diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs index c9a0b730373..21eb844b449 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs @@ -7,12 +7,13 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Plugin.SharedCommands; using Flow.Launcher.Plugin.Explorer.Search; -using Flow.Launcher.Plugin.Explorer.Search.FolderLinks; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using System.Linq; using MessageBox = System.Windows.Forms.MessageBox; using MessageBoxIcon = System.Windows.Forms.MessageBoxIcon; using MessageBoxButton = System.Windows.Forms.MessageBoxButtons; using DialogResult = System.Windows.Forms.DialogResult; +using Flow.Launcher.Plugin.Explorer.ViewModels; namespace Flow.Launcher.Plugin.Explorer { @@ -22,10 +23,13 @@ internal class ContextMenu : IContextMenu private Settings Settings { get; set; } - public ContextMenu(PluginInitContext context, Settings settings) + private SettingsViewModel ViewModel { get; set; } + + public ContextMenu(PluginInitContext context, Settings settings, SettingsViewModel vm) { Context = context; Settings = settings; + ViewModel = vm; } public List LoadContextMenus(Result selectedResult) @@ -50,6 +54,58 @@ public List LoadContextMenus(Result selectedResult) var icoPath = (record.Type == ResultType.File) ? Constants.FileImagePath : Constants.FolderImagePath; var fileOrFolder = (record.Type == ResultType.File) ? "file" : "folder"; + + if (!Settings.QuickAccessLinks.Any(x => x.Path == record.FullPath)) + { + contextMenus.Add(new Result + { + Title = Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_title"), + SubTitle = string.Format(Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_subtitle"), fileOrFolder), + Action = (context) => + { + Settings.QuickAccessLinks.Add(new AccessLink { Path = record.FullPath, Type = record.Type }); + + Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess"), + string.Format( + Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess_detail"), + fileOrFolder), + Constants.ExplorerIconImageFullPath); + + ViewModel.Save(); + + return true; + }, + SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"), + TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"), + IcoPath = Constants.QuickAccessImagePath + }); + } + else + { + contextMenus.Add(new Result + { + Title = Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_title"), + SubTitle = string.Format(Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_subtitle"), fileOrFolder), + Action = (context) => + { + Settings.QuickAccessLinks.Remove(Settings.QuickAccessLinks.FirstOrDefault(x => x.Path == record.FullPath)); + + Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_removefilefoldersuccess"), + string.Format( + Context.API.GetTranslation("plugin_explorer_removefilefoldersuccess_detail"), + fileOrFolder), + Constants.ExplorerIconImageFullPath); + + ViewModel.Save(); + + return true; + }, + SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"), + TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"), + IcoPath = Constants.RemoveQuickAccessImagePath + }); + } + contextMenus.Add(new Result { Title = Context.API.GetTranslation("plugin_explorer_copypath"), @@ -228,7 +284,7 @@ private Result CreateAddToIndexSearchExclusionListResult(SearchResult record) Action = _ => { if(!Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => x.Path == record.FullPath)) - Settings.IndexSearchExcludedSubdirectoryPaths.Add(new FolderLink { Path = record.FullPath }); + Settings.IndexSearchExcludedSubdirectoryPaths.Add(new AccessLink { Path = record.FullPath }); Task.Run(() => { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Images/quickaccess.png b/Plugins/Flow.Launcher.Plugin.Explorer/Images/quickaccess.png new file mode 100644 index 00000000000..470a6782fe7 Binary files /dev/null and b/Plugins/Flow.Launcher.Plugin.Explorer/Images/quickaccess.png differ diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Images/removequickaccess.png b/Plugins/Flow.Launcher.Plugin.Explorer/Images/removequickaccess.png new file mode 100644 index 00000000000..fbfb0b960ee Binary files /dev/null and b/Plugins/Flow.Launcher.Plugin.Explorer/Images/removequickaccess.png differ diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index 2fb16e0e1a4..9ba0da3f6f5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -16,7 +16,7 @@ Edit Add Customise Action Keywords - Quick Folder Access Paths + Quick Access Links Index Search Excluded Paths Indexing Options Search Activation: @@ -42,5 +42,15 @@ Open Windows Indexing Options Manage indexed files and folders Failed to open Windows Indexing Options + Add to Quick Access + Add the current {0} to Quick Access + Successfully Added + Successfully added to Quick Access + Successfully Removed + Successfully removed from Quick Access + Add to Quick Access so it can be opened with Explorer's Search Activation action keyword + Remove from Quick Access + Remove from Quick Access + Remove the current {0} from Quick Access \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs index 7b56df69146..8002369a408 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs @@ -1,8 +1,10 @@ using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin.Explorer.Search; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using Flow.Launcher.Plugin.Explorer.ViewModels; using Flow.Launcher.Plugin.Explorer.Views; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Controls; @@ -32,7 +34,15 @@ public async Task InitAsync(PluginInitContext context) viewModel = new SettingsViewModel(context); await viewModel.LoadStorage(); Settings = viewModel.Settings; - contextMenu = new ContextMenu(Context, Settings); + + // as at v1.7.0 this is to maintain backwards compatibility, need to be removed afterwards. + if (Settings.QuickFolderAccessLinks.Any()) + { + Settings.QuickAccessLinks = Settings.QuickFolderAccessLinks; + Settings.QuickFolderAccessLinks = new List(); + } + + contextMenu = new ContextMenu(Context, Settings, viewModel); searchManager = new SearchManager(Settings, Context); } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Constants.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Constants.cs index 38939e244a5..78c7c98a5ec 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Constants.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Constants.cs @@ -15,6 +15,8 @@ internal static class Constants internal const string ExplorerIconImagePath = "Images\\explorer.png"; internal const string DifferentUserIconImagePath = "Images\\user.png"; internal const string IndexingOptionsIconImagePath = "Images\\windowsindexingoptions.png"; + internal const string QuickAccessImagePath = "Images\\quickaccess.png"; + internal const string RemoveQuickAccessImagePath = "Images\\removequickaccess.png"; internal const string ToolTipOpenDirectory = "Ctrl + Enter to open the directory"; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/QuickFolderAccess.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/QuickFolderAccess.cs deleted file mode 100644 index 6f0020ac956..00000000000 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/QuickFolderAccess.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Flow.Launcher.Plugin.Explorer.Search.FolderLinks -{ - public class QuickFolderAccess - { - private readonly ResultManager resultManager; - - public QuickFolderAccess(PluginInitContext context) - { - resultManager = new ResultManager(context); - } - - internal List FolderListMatched(Query query, List folderLinks) - { - if (string.IsNullOrEmpty(query.Search)) - return new List(); - - string search = query.Search.ToLower(); - - var queriedFolderLinks = - folderLinks.Where(x => x.Nickname.StartsWith(search, StringComparison.OrdinalIgnoreCase)); - - return queriedFolderLinks.Select(item => - resultManager.CreateFolderResult(item.Nickname, item.Path, item.Path, query)) - .ToList(); - } - - internal List FolderListAll(Query query, List folderLinks) - => folderLinks - .Select(item => resultManager.CreateFolderResult(item.Nickname, item.Path, item.Path, query)) - .ToList(); - } -} diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/FolderLink.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/AccessLink.cs similarity index 80% rename from Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/FolderLink.cs rename to Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/AccessLink.cs index 43ecdad97a2..f623cc2ca17 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/FolderLinks/FolderLink.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/AccessLink.cs @@ -1,14 +1,15 @@ using System; using System.Linq; -using System.Text.Json; using System.Text.Json.Serialization; -namespace Flow.Launcher.Plugin.Explorer.Search.FolderLinks +namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks { - public class FolderLink + public class AccessLink { public string Path { get; set; } + public ResultType Type { get; set; } = ResultType.Folder; + [JsonIgnore] public string Nickname { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs new file mode 100644 index 00000000000..270e8825a48 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks +{ + public class QuickAccess + { + private readonly ResultManager resultManager; + + public QuickAccess(PluginInitContext context) + { + resultManager = new ResultManager(context); + } + + internal List AccessLinkListMatched(Query query, List accessLinks) + { + if (string.IsNullOrEmpty(query.Search)) + return new List(); + + string search = query.Search.ToLower(); + + var queriedAccessLinks = + accessLinks + .Where(x => x.Nickname.StartsWith(search, StringComparison.OrdinalIgnoreCase)) + .OrderBy(x => x.Type) + .ThenBy(x => x.Nickname); + + return queriedAccessLinks.Select(l => l.Type switch + { + ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), + ResultType.File => resultManager.CreateFileResult(l.Path, query), + _ => throw new ArgumentOutOfRangeException() + + }).ToList(); + } + + internal List AccessLinkListAll(Query query, List accessLinks) + => accessLinks + .OrderBy(x => x.Type) + .ThenBy(x => x.Nickname) + .Select(l => l.Type switch + { + ResultType.Folder => resultManager.CreateFolderResult(l.Nickname, l.Path, l.Path, query), + ResultType.File => resultManager.CreateFileResult(l.Path, query), + _ => throw new ArgumentOutOfRangeException() + + }).ToList(); + } +} diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 6a336c59a89..24eb9972448 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -140,7 +140,7 @@ internal class SearchResult public bool ShowIndexState { get; set; } } - internal enum ResultType + public enum ResultType { Volume, Folder, diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 14aefeb1984..f8ba3a56fa0 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -1,5 +1,5 @@ using Flow.Launcher.Plugin.Explorer.Search.DirectoryInfo; -using Flow.Launcher.Plugin.Explorer.Search.FolderLinks; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using Flow.Launcher.Plugin.Explorer.Search.WindowsIndex; using Flow.Launcher.Plugin.SharedCommands; using System; @@ -16,7 +16,7 @@ public class SearchManager private readonly IndexSearch indexSearch; - private readonly QuickFolderAccess quickFolderAccess; + private readonly QuickAccess quickAccess; private readonly ResultManager resultManager; @@ -28,7 +28,7 @@ public SearchManager(Settings settings, PluginInitContext context) indexSearch = new IndexSearch(context); resultManager = new ResultManager(context); this.settings = settings; - quickFolderAccess = new QuickFolderAccess(context); + quickAccess = new QuickAccess(context); } internal async Task> SearchAsync(Query query, CancellationToken token) @@ -42,12 +42,12 @@ internal async Task> SearchAsync(Query query, CancellationToken tok // This allows the user to type the assigned action keyword and only see the list of quick folder links if (string.IsNullOrEmpty(query.Search)) - return quickFolderAccess.FolderListAll(query, settings.QuickFolderAccessLinks); + return quickAccess.AccessLinkListAll(query, settings.QuickAccessLinks); - var quickFolderLinks = quickFolderAccess.FolderListMatched(query, settings.QuickFolderAccessLinks); + var quickaccessLinks = quickAccess.AccessLinkListMatched(query, settings.QuickAccessLinks); - if (quickFolderLinks.Count > 0) - results.AddRange(quickFolderLinks); + if (quickaccessLinks.Count > 0) + results.AddRange(quickaccessLinks); var isEnvironmentVariable = EnvironmentVariables.IsEnvironmentVariableSearch(querySearch); diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs index e6263789627..a8eac986d2e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs @@ -1,5 +1,5 @@ using Flow.Launcher.Plugin.Explorer.Search; -using Flow.Launcher.Plugin.Explorer.Search.FolderLinks; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using System.Collections.Generic; namespace Flow.Launcher.Plugin.Explorer @@ -8,11 +8,14 @@ public class Settings { public int MaxResult { get; set; } = 100; - public List QuickFolderAccessLinks { get; set; } = new List(); + public List QuickAccessLinks { get; set; } = new List(); + + // as at v1.7.0 this is to maintain backwards compatibility, need to be removed afterwards. + public List QuickFolderAccessLinks { get; set; } = new List(); public bool UseWindowsIndexForDirectorySearch { get; set; } = true; - public List IndexSearchExcludedSubdirectoryPaths { get; set; } = new List(); + public List IndexSearchExcludedSubdirectoryPaths { get; set; } = new List(); public string SearchActionKeyword { get; set; } = Query.GlobalPluginWildcardSign; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs index 21bc49741de..791c06b66f4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs @@ -1,7 +1,7 @@ using Flow.Launcher.Core.Plugin; using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin.Explorer.Search; -using Flow.Launcher.Plugin.Explorer.Search.FolderLinks; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using System.Diagnostics; using System.Threading.Tasks; @@ -32,9 +32,9 @@ public void Save() storage.Save(); } - internal void RemoveFolderLinkFromQuickFolders(FolderLink selectedRow) => Settings.QuickFolderAccessLinks.Remove(selectedRow); + internal void RemoveLinkFromQuickAccess(AccessLink selectedRow) => Settings.QuickAccessLinks.Remove(selectedRow); - internal void RemoveFolderLinkFromExcludedIndexPaths(FolderLink selectedRow) => Settings.IndexSearchExcludedSubdirectoryPaths.Remove(selectedRow); + internal void RemoveAccessLinkFromExcludedIndexPaths(AccessLink selectedRow) => Settings.IndexSearchExcludedSubdirectoryPaths.Remove(selectedRow); internal void OpenWindowsIndexingOptions() { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml index 9d6f4976e9a..13d46394c38 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml @@ -7,7 +7,7 @@ mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> - + @@ -40,22 +40,22 @@ - + x:Name="lbxAccessLinks" AllowDrop="True" + Drop="lbxAccessLinks_Drop" + DragEnter="lbxAccessLinks_DragEnter" + ItemTemplate="{StaticResource ListViewTemplateAccessLinks}"/> diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs index 3b67b408d39..5d2980c55fb 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml.cs @@ -1,4 +1,4 @@ -using Flow.Launcher.Plugin.Explorer.Search.FolderLinks; +using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using Flow.Launcher.Plugin.Explorer.ViewModels; using System; using System.Collections.Generic; @@ -29,7 +29,7 @@ public ExplorerSettings(SettingsViewModel viewModel) this.viewModel = viewModel; - lbxFolderLinks.ItemsSource = this.viewModel.Settings.QuickFolderAccessLinks; + lbxAccessLinks.ItemsSource = this.viewModel.Settings.QuickAccessLinks; lbxExcludedPaths.ItemsSource = this.viewModel.Settings.IndexSearchExcludedSubdirectoryPaths; @@ -54,7 +54,7 @@ public ExplorerSettings(SettingsViewModel viewModel) public void RefreshView() { - lbxFolderLinks.Items.SortDescriptions.Add(new SortDescription("Path", ListSortDirection.Ascending)); + lbxAccessLinks.Items.SortDescriptions.Add(new SortDescription("Path", ListSortDirection.Ascending)); lbxExcludedPaths.Items.SortDescriptions.Add(new SortDescription("Path", ListSortDirection.Ascending)); @@ -62,7 +62,7 @@ public void RefreshView() btnEdit.Visibility = Visibility.Hidden; btnAdd.Visibility = Visibility.Hidden; - if (expFolderLinks.IsExpanded || expExcludedPaths.IsExpanded || expActionKeywords.IsExpanded) + if (expAccessLinks.IsExpanded || expExcludedPaths.IsExpanded || expActionKeywords.IsExpanded) { if (!expActionKeywords.IsExpanded) btnAdd.Visibility = Visibility.Visible; @@ -71,7 +71,7 @@ public void RefreshView() && btnEdit.Visibility == Visibility.Hidden) btnEdit.Visibility = Visibility.Visible; - if ((lbxFolderLinks.Items.Count == 0 && lbxExcludedPaths.Items.Count == 0) + if ((lbxAccessLinks.Items.Count == 0 && lbxExcludedPaths.Items.Count == 0) && btnDelete.Visibility == Visibility.Visible && btnEdit.Visibility == Visibility.Visible) { @@ -79,8 +79,8 @@ public void RefreshView() btnEdit.Visibility = Visibility.Hidden; } - if (expFolderLinks.IsExpanded - && lbxFolderLinks.Items.Count > 0 + if (expAccessLinks.IsExpanded + && lbxAccessLinks.Items.Count > 0 && btnDelete.Visibility == Visibility.Hidden && btnEdit.Visibility == Visibility.Hidden) { @@ -98,7 +98,7 @@ public void RefreshView() } } - lbxFolderLinks.Items.Refresh(); + lbxAccessLinks.Items.Refresh(); lbxExcludedPaths.Items.Refresh(); @@ -113,8 +113,8 @@ private void expActionKeywords_Click(object sender, RoutedEventArgs e) if (expExcludedPaths.IsExpanded) expExcludedPaths.IsExpanded = false; - if (expFolderLinks.IsExpanded) - expFolderLinks.IsExpanded = false; + if (expAccessLinks.IsExpanded) + expAccessLinks.IsExpanded = false; RefreshView(); } @@ -125,10 +125,10 @@ private void expActionKeywords_Collapsed(object sender, RoutedEventArgs e) expActionKeywords.Height = Double.NaN; } - private void expFolderLinks_Click(object sender, RoutedEventArgs e) + private void expAccessLinks_Click(object sender, RoutedEventArgs e) { - if (expFolderLinks.IsExpanded) - expFolderLinks.Height = 215; + if (expAccessLinks.IsExpanded) + expAccessLinks.Height = 215; if (expExcludedPaths.IsExpanded) expExcludedPaths.IsExpanded = false; @@ -139,19 +139,19 @@ private void expFolderLinks_Click(object sender, RoutedEventArgs e) RefreshView(); } - private void expFolderLinks_Collapsed(object sender, RoutedEventArgs e) + private void expAccessLinks_Collapsed(object sender, RoutedEventArgs e) { - if (!expFolderLinks.IsExpanded) - expFolderLinks.Height = Double.NaN; + if (!expAccessLinks.IsExpanded) + expAccessLinks.Height = Double.NaN; } private void expExcludedPaths_Click(object sender, RoutedEventArgs e) { if (expExcludedPaths.IsExpanded) - expFolderLinks.Height = Double.NaN; + expAccessLinks.Height = Double.NaN; - if (expFolderLinks.IsExpanded) - expFolderLinks.IsExpanded = false; + if (expAccessLinks.IsExpanded) + expAccessLinks.IsExpanded = false; if (expActionKeywords.IsExpanded) expActionKeywords.IsExpanded = false; @@ -161,7 +161,7 @@ private void expExcludedPaths_Click(object sender, RoutedEventArgs e) private void btnDelete_Click(object sender, RoutedEventArgs e) { - var selectedRow = lbxFolderLinks.SelectedItem as FolderLink?? lbxExcludedPaths.SelectedItem as FolderLink; + var selectedRow = lbxAccessLinks.SelectedItem as AccessLink?? lbxExcludedPaths.SelectedItem as AccessLink; if (selectedRow != null) { @@ -169,11 +169,11 @@ private void btnDelete_Click(object sender, RoutedEventArgs e) if (MessageBox.Show(msg, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes) { - if (expFolderLinks.IsExpanded) - viewModel.RemoveFolderLinkFromQuickFolders(selectedRow); + if (expAccessLinks.IsExpanded) + viewModel.RemoveLinkFromQuickAccess(selectedRow); if (expExcludedPaths.IsExpanded) - viewModel.RemoveFolderLinkFromExcludedIndexPaths(selectedRow); + viewModel.RemoveAccessLinkFromExcludedIndexPaths(selectedRow); RefreshView(); } @@ -199,7 +199,7 @@ private void btnEdit_Click(object sender, RoutedEventArgs e) } else { - var selectedRow = lbxFolderLinks.SelectedItem as FolderLink ?? lbxExcludedPaths.SelectedItem as FolderLink; + var selectedRow = lbxAccessLinks.SelectedItem as AccessLink ?? lbxExcludedPaths.SelectedItem as AccessLink; if (selectedRow != null) { @@ -207,9 +207,9 @@ private void btnEdit_Click(object sender, RoutedEventArgs e) folderBrowserDialog.SelectedPath = selectedRow.Path; if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { - if (expFolderLinks.IsExpanded) + if (expAccessLinks.IsExpanded) { - var link = viewModel.Settings.QuickFolderAccessLinks.First(x => x.Path == selectedRow.Path); + var link = viewModel.Settings.QuickAccessLinks.First(x => x.Path == selectedRow.Path); link.Path = folderBrowserDialog.SelectedPath; } @@ -235,36 +235,36 @@ private void btnAdd_Click(object sender, RoutedEventArgs e) var folderBrowserDialog = new FolderBrowserDialog(); if (folderBrowserDialog.ShowDialog() == DialogResult.OK) { - var newFolderLink = new FolderLink + var newAccessLink = new AccessLink { Path = folderBrowserDialog.SelectedPath }; - AddFolderLink(newFolderLink); + AddAccessLink(newAccessLink); } RefreshView(); } - private void lbxFolders_Drop(object sender, DragEventArgs e) + private void lbxAccessLinks_Drop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files != null && files.Count() > 0) { - if (expFolderLinks.IsExpanded && viewModel.Settings.QuickFolderAccessLinks == null) - viewModel.Settings.QuickFolderAccessLinks = new List(); + if (expAccessLinks.IsExpanded && viewModel.Settings.QuickAccessLinks == null) + viewModel.Settings.QuickAccessLinks = new List(); foreach (string s in files) { if (Directory.Exists(s)) { - var newFolderLink = new FolderLink + var newFolderLink = new AccessLink { Path = s }; - AddFolderLink(newFolderLink); + AddAccessLink(newFolderLink); } RefreshView(); @@ -272,28 +272,28 @@ private void lbxFolders_Drop(object sender, DragEventArgs e) } } - private void AddFolderLink(FolderLink newFolderLink) + private void AddAccessLink(AccessLink newAccessLink) { - if (expFolderLinks.IsExpanded - && !viewModel.Settings.QuickFolderAccessLinks.Any(x => x.Path == newFolderLink.Path)) + if (expAccessLinks.IsExpanded + && !viewModel.Settings.QuickAccessLinks.Any(x => x.Path == newAccessLink.Path)) { - if (viewModel.Settings.QuickFolderAccessLinks == null) - viewModel.Settings.QuickFolderAccessLinks = new List(); + if (viewModel.Settings.QuickAccessLinks == null) + viewModel.Settings.QuickAccessLinks = new List(); - viewModel.Settings.QuickFolderAccessLinks.Add(newFolderLink); + viewModel.Settings.QuickAccessLinks.Add(newAccessLink); } if (expExcludedPaths.IsExpanded - && !viewModel.Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => x.Path == newFolderLink.Path)) + && !viewModel.Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => x.Path == newAccessLink.Path)) { if (viewModel.Settings.IndexSearchExcludedSubdirectoryPaths == null) - viewModel.Settings.IndexSearchExcludedSubdirectoryPaths = new List(); + viewModel.Settings.IndexSearchExcludedSubdirectoryPaths = new List(); - viewModel.Settings.IndexSearchExcludedSubdirectoryPaths.Add(newFolderLink); + viewModel.Settings.IndexSearchExcludedSubdirectoryPaths.Add(newAccessLink); } } - private void lbxFolders_DragEnter(object sender, DragEventArgs e) + private void lbxAccessLinks_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index 1e92d2254ec..e9c8ef8735c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -7,7 +7,7 @@ "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.5.0", + "Version": "1.6.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",