Monorepo/VirtualDrive/Program.cs
2021-02-18 15:34:03 +01:00

132 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ShellBoost.Core;
using ShellBoost.Core.WindowsShell;
using System;
using System.Collections.Generic;
using DigitalData.Modules.Logging;
using DigitalData.Modules.Database;
using System.Data;
namespace VirtualDrive
{
static class Program
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
LogConfig LogConfig = new LogConfig(LogConfig.PathType.Temp);
Logger Logger = LogConfig.GetLogger();
MSSQLServer Db = new MSSQLServer(LogConfig, "Server=172.24.12.41\\tests;Database=DD_ECM_TEST;User Id=sa;Password=dd;");
ShellFolderServer.RegisterNativeDll(RegistrationMode.User);
using (var server = new MyShellFolderServer(Db))
{
var config = new ShellFolderConfiguration(); // this class is located in ShellBoost.Core
server.Start(config); // start the server
while (Console.ReadKey(true).Key != ConsoleKey.Escape)
{
}
}
ShellFolderServer.UnregisterNativeDll(RegistrationMode.User);
}
public class MyShellFolderServer : ShellFolderServer
{
private MyRootFolder _root;
private MSSQLServer _Db;
public MyShellFolderServer(MSSQLServer Db)
{
_Db = Db;
}
// only the Shell knows our root folder PIDL
protected override ShellFolder GetFolderAsRoot(ShellItemIdList idl)
{
if (_root == null)
{
_root = new MyRootFolder(idl, _Db);
}
return _root;
}
}
public class MyRootFolder : ShellFolder // this base class is located in ShellBoost.Core
{
MSSQLServer _Db;
// reference to the ShellFolderServer is now available as the FolderServer instance property
public MyRootFolder(ShellItemIdList idList, MSSQLServer db) : base(idList)
{
_Db = db;
}
public override IEnumerable<ShellItem> EnumItems(SHCONTF options)
{
DataTable oTable = _Db.GetDatatable("SELECT * FROM TBDD_USER");
foreach (DataRow oRow in oTable.Rows)
{
ShellItem oItem = new VirtualItem(this, oRow["USERNAME"].ToString().ToLower() + ".txt");
yield return oItem;
}
yield return new PhysicalItem(this, "My First Item");
// note by default, ShellBoost uses the key/ID value as the display name if its not explicitly defined
//yield return new ShellFolder(this, new StringKeyShellItemId("My First Folder"));
//yield return new ShellItem(this, new StringKeyShellItemId("My First Item"));
}
protected override InformationBar GetInformationBar()
{
var bar = new InformationBar();
bar.Guid = new Guid();
bar.Message = "This is a very important folder!";
return bar;
}
}
public class VirtualItem : ShellItem
{
public VirtualItem(ShellFolder parent, string text): base(parent, new StringKeyShellItemId(text))
{
this.ItemType = ".txt";
this.Size = 999;
this.DateAccessed = DateTime.Now;
this.DateCreated = DateTime.Now;
this.DateModified = DateTime.Now;
this.IsHidden = true;
}
public override ShellContent GetContent()
{
return new MemoryShellContent("Hallo!", System.Text.Encoding.UTF8);
}
}
public class PhysicalItem : ShellItem
{
public PhysicalItem(ShellFolder parent, string text) : base(parent, new StringKeyShellItemId(text))
{
this.ItemType = ".txt";
this.Size = 999;
this.DateAccessed = DateTime.Now;
this.DateCreated = DateTime.Now;
this.DateModified = DateTime.Now;
this.IsHidden = true;
}
public override ShellContent GetContent()
{
return new FileShellContent(@"E:\test.txt");
}
}
}
}