✨ feture 增加关联实时文件夹
This commit is contained in:
14
Constant/MenuType.cs
Normal file
14
Constant/MenuType.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace GeekDesk.Constant
|
||||||
|
{
|
||||||
|
public enum MenuType
|
||||||
|
{
|
||||||
|
NORMAL, //普通菜单
|
||||||
|
LINK, //关联菜单
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,7 +49,7 @@ namespace GeekDesk.Control.UserControls.Config
|
|||||||
OpenFileDialog ofd = new OpenFileDialog
|
OpenFileDialog ofd = new OpenFileDialog
|
||||||
{
|
{
|
||||||
Multiselect = false, //只允许选中单个文件
|
Multiselect = false, //只允许选中单个文件
|
||||||
Filter = "图像文件(*.png, *.jpg)|*.png;*.jpg;*.gif"
|
Filter = "图像文件(*.png, *.jpg, *.gif)|*.png;*.jpg;*.gif"
|
||||||
};
|
};
|
||||||
if (ofd.ShowDialog() == true)
|
if (ofd.ShowDialog() == true)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -139,6 +139,7 @@
|
|||||||
<hc:Card.ContextMenu>
|
<hc:Card.ContextMenu>
|
||||||
<ContextMenu Width="200">
|
<ContextMenu Width="200">
|
||||||
<MenuItem Header="新建菜单" Click="CreateMenu"/>
|
<MenuItem Header="新建菜单" Click="CreateMenu"/>
|
||||||
|
<MenuItem Header="新建关联菜单" Click="CreateLinkMenu"/>
|
||||||
<MenuItem x:Name="AlterPW1" Header="修改密码" Click="AlterPassword"/>
|
<MenuItem x:Name="AlterPW1" Header="修改密码" Click="AlterPassword"/>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
</hc:Card.ContextMenu>
|
</hc:Card.ContextMenu>
|
||||||
@@ -158,6 +159,7 @@
|
|||||||
<ListBox.Resources>
|
<ListBox.Resources>
|
||||||
<ContextMenu x:Key="MenuDialog" Width="200">
|
<ContextMenu x:Key="MenuDialog" Width="200">
|
||||||
<MenuItem Header="新建菜单" Click="CreateMenu"/>
|
<MenuItem Header="新建菜单" Click="CreateMenu"/>
|
||||||
|
<MenuItem Header="新建关联菜单" Click="CreateLinkMenu"/>
|
||||||
<MenuItem Header="重命名" Click="RenameMenu" Tag="{Binding}"/>
|
<MenuItem Header="重命名" Click="RenameMenu" Tag="{Binding}"/>
|
||||||
<MenuItem Header="加密此列表" Click="EncryptMenu" Tag="{Binding}"/>
|
<MenuItem Header="加密此列表" Click="EncryptMenu" Tag="{Binding}"/>
|
||||||
<MenuItem x:Name="AlterPW2" Header="修改密码" Click="AlterPassword"/>
|
<MenuItem x:Name="AlterPW2" Header="修改密码" Click="AlterPassword"/>
|
||||||
|
|||||||
@@ -4,14 +4,19 @@ using GeekDesk.Control.Other;
|
|||||||
using GeekDesk.Control.Windows;
|
using GeekDesk.Control.Windows;
|
||||||
using GeekDesk.Util;
|
using GeekDesk.Util;
|
||||||
using GeekDesk.ViewModel;
|
using GeekDesk.ViewModel;
|
||||||
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Threading;
|
||||||
|
using WindowsAPICodePack.Dialogs;
|
||||||
|
|
||||||
namespace GeekDesk.Control.UserControls.PannelCard
|
namespace GeekDesk.Control.UserControls.PannelCard
|
||||||
{
|
{
|
||||||
@@ -200,6 +205,87 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
Lbi_Selected(obj, null);
|
Lbi_Selected(obj, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 创建实时文件菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void CreateLinkMenu(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CommonOpenFileDialog dialog = new CommonOpenFileDialog
|
||||||
|
{
|
||||||
|
IsFolderPicker = true,
|
||||||
|
Title = "选择关联文件夹"
|
||||||
|
};
|
||||||
|
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
|
||||||
|
{
|
||||||
|
string menuId = System.Guid.NewGuid().ToString();
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
string path = dialog.FileName;
|
||||||
|
|
||||||
|
MenuInfo menuInfo = new MenuInfo
|
||||||
|
{
|
||||||
|
MenuName = Path.GetFileNameWithoutExtension(path),
|
||||||
|
MenuId = menuId,
|
||||||
|
MenuType = MenuType.LINK,
|
||||||
|
LinkPath = path,
|
||||||
|
IsEncrypt = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
appData.MenuList.Add(menuInfo);
|
||||||
|
|
||||||
|
MenuListBox.SelectedIndex = appData.MenuList.Count - 1;
|
||||||
|
appData.AppConfig.SelectedMenuIndex = MenuListBox.SelectedIndex;
|
||||||
|
appData.AppConfig.SelectedMenuIcons = menuInfo.IconList;
|
||||||
|
//首次触发不了Selected事件
|
||||||
|
object obj = MenuListBox.ItemContainerGenerator.ContainerFromIndex(MenuListBox.SelectedIndex);
|
||||||
|
SetListBoxItemEvent((ListBoxItem)obj);
|
||||||
|
Lbi_Selected(obj, null);
|
||||||
|
|
||||||
|
HandyControl.Controls.Growl.Success("菜单关联成功, 后台加载列表!", "MainWindowGrowl");
|
||||||
|
|
||||||
|
FileWatcher.LinkMenuWatcher(menuInfo);
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
MenuInfo info = null;
|
||||||
|
foreach (MenuInfo menuInfo in appData.MenuList)
|
||||||
|
{
|
||||||
|
if (menuInfo.MenuId.Equals(menuId))
|
||||||
|
{
|
||||||
|
info = menuInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DirectoryInfo dirInfo = new DirectoryInfo(info.LinkPath);
|
||||||
|
FileSystemInfo[] fileInfos = dirInfo.GetFileSystemInfos();
|
||||||
|
foreach (FileSystemInfo fileInfo in fileInfos)
|
||||||
|
{
|
||||||
|
IconInfo iconInfo = CommonCode.GetIconInfoByPath_NoWrite(fileInfo.FullName);
|
||||||
|
info.IconList.Add(iconInfo);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogUtil.WriteErrorLog(ex, "新建关联菜单失败!");
|
||||||
|
HandyControl.Controls.Growl.WarningGlobal("新建关联菜单失败!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 重命名菜单 将textbox 设置为可见
|
/// 重命名菜单 将textbox 设置为可见
|
||||||
@@ -635,5 +721,7 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,6 +147,9 @@
|
|||||||
<Reference Include="System.Xaml">
|
<Reference Include="System.Xaml">
|
||||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="WindowsAPICodePack.Shell.CommonFileDialogs, Version=1.1.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>packages\WindowsAPICodePack.Shell.CommonFileDialogs.1.1.5\lib\net452\WindowsAPICodePack.Shell.CommonFileDialogs.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="WindowsBase" />
|
<Reference Include="WindowsBase" />
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="PresentationFramework" />
|
<Reference Include="PresentationFramework" />
|
||||||
@@ -167,6 +170,7 @@
|
|||||||
<Compile Include="Constant\IconType.cs" />
|
<Compile Include="Constant\IconType.cs" />
|
||||||
<Compile Include="Constant\CommonEnum.cs" />
|
<Compile Include="Constant\CommonEnum.cs" />
|
||||||
<Compile Include="Constant\IconStartType.cs" />
|
<Compile Include="Constant\IconStartType.cs" />
|
||||||
|
<Compile Include="Constant\MenuType.cs" />
|
||||||
<Compile Include="Constant\PasswordType.cs" />
|
<Compile Include="Constant\PasswordType.cs" />
|
||||||
<Compile Include="Constant\RunTimeStatus.cs" />
|
<Compile Include="Constant\RunTimeStatus.cs" />
|
||||||
<Compile Include="Constant\SearchType.cs" />
|
<Compile Include="Constant\SearchType.cs" />
|
||||||
@@ -287,6 +291,7 @@
|
|||||||
<Compile Include="Util\ColorUtil.cs" />
|
<Compile Include="Util\ColorUtil.cs" />
|
||||||
<Compile Include="Util\DefaultIcons.cs" />
|
<Compile Include="Util\DefaultIcons.cs" />
|
||||||
<Compile Include="Util\DragAdorner.cs" />
|
<Compile Include="Util\DragAdorner.cs" />
|
||||||
|
<Compile Include="Util\FileWatcher.cs" />
|
||||||
<Compile Include="Util\GlobalHotKey.cs" />
|
<Compile Include="Util\GlobalHotKey.cs" />
|
||||||
<Compile Include="Util\CommonCode.cs" />
|
<Compile Include="Util\CommonCode.cs" />
|
||||||
<Compile Include="Util\FileIcon.cs" />
|
<Compile Include="Util\FileIcon.cs" />
|
||||||
|
|||||||
@@ -226,6 +226,9 @@ namespace GeekDesk
|
|||||||
SecondsWindow.ShowWindow();
|
SecondsWindow.ShowWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//监听实时文件夹菜单
|
||||||
|
FileWatcher.StartLinkMenuWatcher(appData);
|
||||||
|
|
||||||
|
|
||||||
//更新线程开启 检测更新
|
//更新线程开启 检测更新
|
||||||
UpdateThread.Update();
|
UpdateThread.Update();
|
||||||
|
|||||||
138
Util/FileWatcher.cs
Normal file
138
Util/FileWatcher.cs
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
using GeekDesk.ViewModel;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace GeekDesk.Util
|
||||||
|
{
|
||||||
|
public class FileWatcher
|
||||||
|
{
|
||||||
|
public static Dictionary<FileSystemWatcher, MenuInfo> linkMenuMap = new Dictionary<FileSystemWatcher, MenuInfo>();
|
||||||
|
/// <summary>
|
||||||
|
/// 实时文件夹监听
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
public static void LinkMenuWatcher(MenuInfo menuInfo)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher
|
||||||
|
{
|
||||||
|
Path = menuInfo.LinkPath,
|
||||||
|
};
|
||||||
|
linkMenuMap.Add(fileSystemWatcher, menuInfo);
|
||||||
|
fileSystemWatcher.EnableRaisingEvents = true;
|
||||||
|
fileSystemWatcher.Changed += LinkIcon_Changed;
|
||||||
|
fileSystemWatcher.Deleted += LinkIcon_Deleted;
|
||||||
|
fileSystemWatcher.Created += LinkIcon_Created;
|
||||||
|
fileSystemWatcher.Renamed += LinkIcon_Renamed;
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
LogUtil.WriteErrorLog(e, "添加LinkMenu监听异常");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LinkIcon_Renamed(object sender, RenamedEventArgs e)
|
||||||
|
{
|
||||||
|
IconInfo iconInfo = getIconInfoByPath(sender, e.OldFullPath);
|
||||||
|
iconInfo.Name = e.Name;
|
||||||
|
iconInfo.Path = e.FullPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LinkIcon_Changed(object sender, FileSystemEventArgs e)
|
||||||
|
{
|
||||||
|
IconInfo iconInfo = getIconInfoByPath(sender, e.FullPath);
|
||||||
|
if (iconInfo != null)
|
||||||
|
{
|
||||||
|
IconInfo newIconInfo = CommonCode.GetIconInfoByPath(e.FullPath);
|
||||||
|
iconInfo.BitmapImage = newIconInfo.BitmapImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
private static void LinkIcon_Deleted(object sender, FileSystemEventArgs e)
|
||||||
|
{
|
||||||
|
IconInfo iconInfo = getIconInfoByPath(sender, e.FullPath);
|
||||||
|
App.Current.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
linkMenuMap[sender as FileSystemWatcher].IconList.Remove(iconInfo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
private static void LinkIcon_Created(object sender, FileSystemEventArgs e)
|
||||||
|
{
|
||||||
|
IconInfo iconInfo = CommonCode.GetIconInfoByPath(e.FullPath);
|
||||||
|
App.Current.Dispatcher.Invoke(() =>
|
||||||
|
{
|
||||||
|
linkMenuMap[sender as FileSystemWatcher].IconList.Add(iconInfo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IconInfo getIconInfoByPath(object sender, string path)
|
||||||
|
{
|
||||||
|
MenuInfo menuInfo = linkMenuMap[sender as FileSystemWatcher];
|
||||||
|
foreach (IconInfo iconInfo in menuInfo.IconList)
|
||||||
|
{
|
||||||
|
if (iconInfo.Path.Equals(path))
|
||||||
|
{
|
||||||
|
return iconInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 开启所有菜单监听
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="appData"></param>
|
||||||
|
public static void StartLinkMenuWatcher(AppData appData)
|
||||||
|
{
|
||||||
|
foreach (MenuInfo menuInfo in appData.MenuList)
|
||||||
|
{
|
||||||
|
if (menuInfo.MenuType == Constant.MenuType.LINK)
|
||||||
|
{
|
||||||
|
LinkMenuWatcher(menuInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 移除菜单监听
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="menuInfo"></param>
|
||||||
|
public static void RemoveLinkMenuWatcher(MenuInfo menuInfo)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (FileSystemWatcher watcher in linkMenuMap.Keys)
|
||||||
|
{
|
||||||
|
if (linkMenuMap[watcher] == menuInfo)
|
||||||
|
{
|
||||||
|
//释放资源
|
||||||
|
watcher.Changed -= LinkIcon_Changed;
|
||||||
|
watcher.Created -= LinkIcon_Created;
|
||||||
|
watcher.Deleted -= LinkIcon_Deleted;
|
||||||
|
watcher.Renamed -= LinkIcon_Renamed;
|
||||||
|
watcher.EnableRaisingEvents = false;
|
||||||
|
watcher.Dispose();
|
||||||
|
linkMenuMap.Remove(watcher);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
//nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,8 +21,36 @@ namespace GeekDesk.ViewModel
|
|||||||
private string geometryColor; //几何图标颜色
|
private string geometryColor; //几何图标颜色
|
||||||
private ObservableCollection<IconInfo> iconList = new ObservableCollection<IconInfo>();
|
private ObservableCollection<IconInfo> iconList = new ObservableCollection<IconInfo>();
|
||||||
private bool isEncrypt; //是否加密
|
private bool isEncrypt; //是否加密
|
||||||
|
private MenuType menuType; //菜单类型 普通, 关联
|
||||||
|
private string linkPath; //关联路径
|
||||||
|
|
||||||
|
|
||||||
|
public string LinkPath
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return linkPath;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
linkPath = value;
|
||||||
|
OnPropertyChanged("LinkPath");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MenuType MenuType
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return menuType;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
menuType = value;
|
||||||
|
OnPropertyChanged("MenuType");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsEncrypt
|
public bool IsEncrypt
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|||||||
@@ -19,5 +19,6 @@
|
|||||||
<package id="System.Reactive" version="5.0.0" targetFramework="net472" />
|
<package id="System.Reactive" version="5.0.0" targetFramework="net472" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
||||||
|
<package id="WindowsAPICodePack.Shell.CommonFileDialogs" version="1.1.5" targetFramework="net472" />
|
||||||
<package id="XamlFlair.WPF" version="1.2.13" targetFramework="net472" />
|
<package id="XamlFlair.WPF" version="1.2.13" targetFramework="net472" />
|
||||||
</packages>
|
</packages>
|
||||||
Reference in New Issue
Block a user