diff --git a/Core.Window/AppTools.cs b/Core.Window/AppTools.cs index 2601317..a7e5c1a 100644 --- a/Core.Window/AppTools.cs +++ b/Core.Window/AppTools.cs @@ -133,6 +133,7 @@ internal static void DelNullFile(ConcurrentDictionary co case FileType.PDF文档: case FileType.PPT文档: { + if (!File.Exists(searchViewItem.OnlyKey)) { toRemove.Add(key); diff --git a/Core.Window/Everything/Tools.cs b/Core.Window/Everything/Tools.cs index 7b5e805..e23e8de 100644 --- a/Core.Window/Everything/Tools.cs +++ b/Core.Window/Everything/Tools.cs @@ -31,7 +31,7 @@ public static void main(List Items) public static void amd32(List Items) { Everything32.Everything_Reset(); - Everything32.Everything_SetSearchW("*.docx|*.doc|*.xls|*.xlsx|*.pdf|*.ppt|*.pptx"); + Everything32.Everything_SetSearchW(String.Join("|",ConfigManger.Config!.everythingSearchExtensions)); Everything32.Everything_SetMatchCase(true); Everything32.Everything_QueryW(true); const int bufsize = 260; @@ -48,7 +48,7 @@ public static void amd32(List Items) public static void amd64(List Items) { Everything64.Everything_Reset(); - Everything64.Everything_SetSearchW("*.docx|*.doc|*.xls|*.xlsx|*.pdf|*.ppt|*.pptx"); + Everything64.Everything_SetSearchW(String.Join("|",ConfigManger.Config!.everythingSearchExtensions)); Everything64.Everything_SetMatchCase(true); Everything64.Everything_QueryW(true); const int bufsize = 260; diff --git a/Core.Window/IconTools.cs b/Core.Window/IconTools.cs index e304c42..77ad6dd 100644 --- a/Core.Window/IconTools.cs +++ b/Core.Window/IconTools.cs @@ -225,11 +225,11 @@ internal static async Task GetIconAsync(string path, SearchViewItem item) await Task.Run(() => { - retry: + var iconBase = GetIconBase(path, cacheKey); if (iconBase == null) { - goto retry; + return; } var clone = ((Bitmap)iconBase.ToBitmap()).ToAvaloniaBitmap(); diff --git a/Core.Window/SearchItemTool.cs b/Core.Window/SearchItemTool.cs index 53c001c..d2330db 100644 --- a/Core.Window/SearchItemTool.cs +++ b/Core.Window/SearchItemTool.cs @@ -165,8 +165,8 @@ public void OpenFolder(SearchViewItem? searchViewItem) { WeakReferenceMessenger.Default.Send("a", "SearchWindowClose"); var item = (SearchViewItem)searchViewItem; - Log.Debug("打开指定内容文件夹" + item.OnlyKey); - Shell32.ShellExecute(IntPtr.Zero, "open", "explorer.exe", "/select," + item.OnlyKey, "", + Log.Debug($"打开指定内容文件夹{item.OnlyKey}_{item.StartDirectory}"); + Shell32.ShellExecute(IntPtr.Zero, "open", "explorer.exe", "/select," + item.OnlyKey, item.StartDirectory, ShowWindowCommand.SW_SHOW); switch (item.FileType) diff --git a/Core/SDKs/Services/Config/KitopiaConfig.cs b/Core/SDKs/Services/Config/KitopiaConfig.cs index e9e1e8b..a0a6afd 100644 --- a/Core/SDKs/Services/Config/KitopiaConfig.cs +++ b/Core/SDKs/Services/Config/KitopiaConfig.cs @@ -7,6 +7,7 @@ using PluginCore; using PluginCore.Attribute; using PluginCore.Config; +// ReSharper disable InconsistentNaming namespace Core.SDKs.Services.Config; @@ -14,45 +15,52 @@ namespace Core.SDKs.Services.Config; public class KitopiaConfig : ConfigBase { private static ILog log = LogManager.GetLogger("KitopiaConfig"); - + + [ConfigField("截图直接复制到剪贴板","截图直接复制到剪贴板,不显示工具栏", 0xE61C,ConfigFieldType.布尔 )] + public bool 截图直接复制到剪贴板 = true; + public List alwayShows = new(); - + [ConfigFieldCategory("基本")] [ConfigField("自动启动","可能被杀毒软件阻止", 0xE61C,ConfigFieldType.布尔 )] public bool autoStart = true; + [ConfigField("自动启动Everything","在Everything未启动时自动启动", 0xE61C,ConfigFieldType.布尔 )] public bool autoStartEverything = true; + [ConfigField("允许程序读取剪贴板","自动读取剪贴板路径和剪贴板图像保存依赖于此权限", 0xF2D7,ConfigFieldType.布尔 )] public bool canReadClipboard = true; - [ConfigField("主题选择","跟随系统,深色还是浅色?", 0xf33c)] - public ThemeEnum themeChoice = ThemeEnum.跟随系统; - public List EnabledPluginInfos = new(); - - - [ConfigFieldCategory("搜索框")] - [ConfigField("搜索框快捷键","显示搜索框快捷键", 0xF4B8,ConfigFieldType.快捷键 )] - public HotKeyModel searchHotKey = new() - { - MainName = "Kitopia", Name = "显示搜索框", IsUsable = true, IsSelectCtrl = false, IsSelectAlt = true, - IsSelectWin = false, - IsSelectShift = false, SelectKey = EKey.空格, - }; - [ConfigField("允许程序调用Everything索引文档","索引文档依赖于此功能", 0xF3AE,ConfigFieldType.布尔 )] - public bool useEverything = true; + public List customCollections = new(); - [ConfigField("最大历史记录","最大历史记录数", 0xF2D7,ConfigFieldType.整数列表 ,null,10,1,1 )] - public int maxHistory = 6; - [ConfigField("输入平滑延时","在指定时间内不处理数据以减轻性能消耗", 0xED9B,ConfigFieldType.整数滑块 ,null,1000,50,10)] - public int inputSmoothingMilliseconds = 50; + public List EnabledPluginInfos = new(); + + public List errorLnk = new(); + public string everythingOnlyKey = ""; + + [ConfigField("允许程序调用Everything索引的文件类型","设置Everything检索的文件类型,注意已索引的项目仅当重启软件后消失", 0xf8cb,ConfigFieldType.字符串列表支持添加 )] + public ObservableCollection everythingSearchExtensions = ["*.docx","*.doc","*.xls","*.xlsx","*.pdf","*.ppt","*.pptx"]; + [ConfigField("忽略项","忽略指定的文件或文件夹", 0xF2D7,ConfigFieldType.字符串列表 )] public ObservableCollection ignoreItems = new(); + + [ConfigField("输入平滑延时","在指定时间内不处理数据以减轻性能消耗", 0xED9B,ConfigFieldType.整数滑块 ,null,1000,50,10)] + public int inputSmoothingMilliseconds = 50; + public Dictionary lastOpens = new(); - public List errorLnk = new(); - public string everythingOnlyKey = ""; - - - + [ConfigField("最大历史记录","最大历史记录数", 0xF2D7,ConfigFieldType.整数列表 ,null,10,1,1 )] + public int maxHistory = 6; + + [ConfigFieldCategory("鼠标快捷操作")] + [ConfigField("鼠标快捷键","修改鼠标快捷菜单激活按键", 0xF4B8 )] + public MouseHookType mouseKey = MouseHookType.鼠标侧键2; + + [ConfigField("鼠标快捷键间隔","按下按键指定时间后触发", 0xED9B,ConfigFieldType.整数滑块 ,null,3000,100,50)] + public int mouseKeyInverval = 1000; + + public List mouseQuickItems = new(); + + [ConfigFieldCategory("截图")] [ConfigField("截图快捷键","修改截图快捷键", 0xF4B8,ConfigFieldType.快捷键 )] public HotKeyModel screenShotHotKey = new() @@ -62,15 +70,20 @@ public class KitopiaConfig : ConfigBase IsSelectShift = false, SelectKey = EKey.Q, }; - [ConfigField("截图直接复制到剪贴板","截图直接复制到剪贴板,不显示工具栏", 0xE61C,ConfigFieldType.布尔 )] - public bool 截图直接复制到剪贴板 = true; - [ConfigFieldCategory("鼠标快捷操作")] - [ConfigField("鼠标快捷键","修改鼠标快捷菜单激活按键", 0xF4B8 )] - public MouseHookType mouseKey = MouseHookType.鼠标侧键2; - [ConfigField("鼠标快捷键间隔","按下按键指定时间后触发", 0xED9B,ConfigFieldType.整数滑块 ,null,3000,100,50)] - public int mouseKeyInverval = 1000; - public List mouseQuickItems = new(); - - + + [ConfigFieldCategory("搜索框")] + [ConfigField("搜索框快捷键","显示搜索框快捷键", 0xF4B8,ConfigFieldType.快捷键 )] + public HotKeyModel searchHotKey = new() + { + MainName = "Kitopia", Name = "显示搜索框", IsUsable = true, IsSelectCtrl = false, IsSelectAlt = true, + IsSelectWin = false, + IsSelectShift = false, SelectKey = EKey.空格, + }; + + [ConfigField("主题选择","跟随系统,深色还是浅色?", 0xf33c)] + public ThemeEnum themeChoice = ThemeEnum.跟随系统; + + [ConfigField("允许程序调用Everything索引文档","索引文档依赖于此功能", 0xF3AE,ConfigFieldType.布尔 )] + public bool useEverything = true; } \ No newline at end of file diff --git a/KitopiaAvalonia/App.axaml.cs b/KitopiaAvalonia/App.axaml.cs index 79e86fe..db4b865 100644 --- a/KitopiaAvalonia/App.axaml.cs +++ b/KitopiaAvalonia/App.axaml.cs @@ -26,7 +26,7 @@ using Core.ViewModel.Pages.customScenario; using Core.ViewModel.Pages.plugin; using Core.ViewModel.TaskEditor; - +using HotAvalonia; using Kitopia.Services; using KitopiaAvalonia.Pages; using KitopiaAvalonia.Services; @@ -45,6 +45,7 @@ public partial class App : Application public override void Initialize() { + //this.EnableHotReload(); AvaloniaXamlLoader.Load(this); } @@ -129,9 +130,4 @@ private static IServiceProvider ConfigureServices() return services.BuildServiceProvider(); } - - - - - } \ No newline at end of file diff --git a/KitopiaAvalonia/Controls/ListShow.axaml b/KitopiaAvalonia/Controls/ListShow.axaml index 9e2f713..846d93b 100644 --- a/KitopiaAvalonia/Controls/ListShow.axaml +++ b/KitopiaAvalonia/Controls/ListShow.axaml @@ -4,7 +4,7 @@ xmlns:system="clr-namespace:System;assembly=System.Runtime" xmlns:controls1="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"> - + 123 @@ -15,67 +15,84 @@ - + + + + + + + + + + - ItemsSource="{TemplateBinding ItemsSource}"> - - - - - - + + + + + - - - - + + - - + + + + + + + + - diff --git a/KitopiaAvalonia/Controls/ListShow.axaml.cs b/KitopiaAvalonia/Controls/ListShow.axaml.cs index 8d36108..a2ba452 100644 --- a/KitopiaAvalonia/Controls/ListShow.axaml.cs +++ b/KitopiaAvalonia/Controls/ListShow.axaml.cs @@ -20,16 +20,59 @@ public class ListShow : ListBox //DelCommand public static readonly StyledProperty DelCommandProperty = AvaloniaProperty.Register(nameof(DelCommand)); + public static readonly StyledProperty WithAddProperty = AvaloniaProperty.Register(nameof(WithAdd),false); + public static readonly StyledProperty AddCommandProperty = AvaloniaProperty.Register(nameof(AddCommand)); + + public static readonly StyledProperty TextValueProperty = AvaloniaProperty.Register(nameof(TextValue)); + + //设置默认DelCommand + public ListShow() + { + SetValue(DelCommandProperty, new RelayCommand(OnDel)); + SetValue(AddCommandProperty, new RelayCommand(OnAdd)); + } + public ICommand DelCommand { get => GetValue(DelCommandProperty); set => SetValue(DelCommandProperty, value); } - //设置默认DelCommand - public ListShow() + + public bool WithAdd { - SetValue(DelCommandProperty, new RelayCommand(OnDel)); + get => GetValue(WithAddProperty); + set => SetValue(WithAddProperty, value); } + + public ICommand AddCommand + { + get => GetValue(AddCommandProperty); + set => SetValue(AddCommandProperty, value); + } + + public string TextValue + { + get => GetValue(TextValueProperty); + set => SetValue(TextValueProperty, value); + } + + //AddCommand执行方法 + private void OnAdd(string? obj) + { + if (string.IsNullOrWhiteSpace(obj)) + { + return; + } + + if (ItemsSource is IList list) + { + list.Add(obj); + TextValue = ""; + } + + + } + //DelCommand执行方法 private void OnDel(string? obj) { @@ -46,5 +89,4 @@ private void OnDel(string? obj) } - } \ No newline at end of file diff --git a/KitopiaAvalonia/Converter/SearchWindow/ItemNameMatchCtr.cs b/KitopiaAvalonia/Converter/SearchWindow/ItemNameMatchCtr.cs index 81a15af..ccbcb42 100644 --- a/KitopiaAvalonia/Converter/SearchWindow/ItemNameMatchCtr.cs +++ b/KitopiaAvalonia/Converter/SearchWindow/ItemNameMatchCtr.cs @@ -23,7 +23,7 @@ public class ItemNameMatchCtr : IValueConverter return new InlineCollection(); } InlineCollection list = new(); - if (str.PinyinItem ==null||str.PinyinItem.CharMatchResults.Length-str.PinyinItem.ZhongWenCount !=str.PinyinItem.SplitWords.Length|| str.PinyinItem.CharMatchResults.Length==0) + if (str.PinyinItem ==null||str.PinyinItem.CharMatchResults ==null||str.PinyinItem.CharMatchResults.Length-str.PinyinItem.ZhongWenCount !=str.PinyinItem.SplitWords.Length|| str.PinyinItem.CharMatchResults.Length==0) { list.Add(new Run(str.ItemDisplayName)); return list; diff --git a/KitopiaAvalonia/KitopiaAvalonia.csproj b/KitopiaAvalonia/KitopiaAvalonia.csproj index 9ff3998..f4836ae 100644 --- a/KitopiaAvalonia/KitopiaAvalonia.csproj +++ b/KitopiaAvalonia/KitopiaAvalonia.csproj @@ -29,6 +29,7 @@ true none 0.0.2.044 + 11.1.0-beta2 @@ -42,12 +43,20 @@ + + $(DefineConstants);ENABLE_XAML_HOT_RELOAD + + + + + + + - - - - - + + + + diff --git a/KitopiaAvalonia/Pages/SettingPage.axaml.cs b/KitopiaAvalonia/Pages/SettingPage.axaml.cs index f4f8997..277b792 100644 --- a/KitopiaAvalonia/Pages/SettingPage.axaml.cs +++ b/KitopiaAvalonia/Pages/SettingPage.axaml.cs @@ -304,16 +304,32 @@ private void LoadConfig() })); } listShow.ItemsSource= enumerable; - - - - - /*listShowItemsSource.WhenChanged((d) => + SettingsExpander.ItemsSource=new[] { listShow }; + break; + } + case ConfigFieldType.字符串列表支持添加: + { + var listShow = new ListShow(); + listShow.WithAdd = true; + SettingsExpander.Bind(Expander.WidthProperty, new Binding("Bounds.Width") + { + RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) { - _configBase.OnConfigChanged(fieldInfo.Name,d); - ConfigManger.Save(_configBase.Name); - })*/ - + AncestorType = typeof(SettingsExpander) + }, + Mode = BindingMode.OneWay, + }); + var enumerable = (IEnumerable?)selectedValue; + if (enumerable is ObservableCollection observableCollection) + { + observableCollection.CollectionChanged += ObservableCollectionChange; + disposables.Add( + new AnonymousDisposable(() => + { + observableCollection.CollectionChanged -= ObservableCollectionChange; + })); + } + listShow.ItemsSource= enumerable; SettingsExpander.ItemsSource=new[] { listShow }; break; } diff --git a/KitopiaAvalonia/Windows/SearchWindow.axaml b/KitopiaAvalonia/Windows/SearchWindow.axaml index 5b4681f..6a75ab4 100644 --- a/KitopiaAvalonia/Windows/SearchWindow.axaml +++ b/KitopiaAvalonia/Windows/SearchWindow.axaml @@ -19,7 +19,7 @@ ShowInTaskbar="False" ExtendClientAreaToDecorationsHint="True" Width="800" - + CanResize="False" SizeToContent="Height" ExtendClientAreaChromeHints="SystemChrome" SystemDecorations="BorderOnly" @@ -63,18 +63,18 @@ PointerMoved="DataGrid_OnPointerMoved" Margin="0,0,0,0"> - + - @@ -128,11 +127,11 @@ - Background="{x:Null}" - FontWeight="Normal" FontSize="18"> + Background="{x:Null}" + FontWeight="Normal" FontSize="18"> - + diff --git a/PluginCore b/PluginCore index 6db6755..666a3cc 160000 --- a/PluginCore +++ b/PluginCore @@ -1 +1 @@ -Subproject commit 6db6755bb4bb222a0177f2acf41b695be3e39e49 +Subproject commit 666a3cc38be85a13931f12bd26f61c721942742e