diff --git a/.github/workflows/default_plugins.yml b/.github/workflows/default_plugins.yml
index 59cedc1e8..d0ba62c17 100644
--- a/.github/workflows/default_plugins.yml
+++ b/.github/workflows/default_plugins.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v5
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index 988548bee..9a09198fe 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -20,7 +20,7 @@ jobs:
NUGET_CERT_REVOCATION_MODE: offline
BUILD_NUMBER: ${{ github.run_number }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v5
- name: Set Flow.Launcher.csproj version
id: update
uses: vers-one/dotnet-project-version-updater@v1.7
diff --git a/.github/workflows/release_pr.yml b/.github/workflows/release_pr.yml
index 451bf386c..65946755b 100644
--- a/.github/workflows/release_pr.yml
+++ b/.github/workflows/release_pr.yml
@@ -11,7 +11,7 @@ jobs:
update-pr:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index a4cf567c0..7944541bc 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -39,6 +39,48 @@
false
+
+
+
+
+
+
+
+
diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml
index 9ff38a564..132ec8389 100644
--- a/Flow.Launcher/MainWindow.xaml
+++ b/Flow.Launcher/MainWindow.xaml
@@ -534,10 +534,8 @@
MinHeight="380"
MaxHeight="{Binding ElementName=ResultListBox, Path=ActualHeight}"
Padding="0 0 10 10"
- d:DataContext="{d:DesignInstance vm:ResultViewModel}"
- DataContext="{Binding PreviewSelectedItem, Mode=OneWay}"
Visibility="{Binding ShowCustomizedPreview}">
-
+
diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs
index 045ff46cc..d492f28c5 100644
--- a/Flow.Launcher/ViewModel/MainViewModel.cs
+++ b/Flow.Launcher/ViewModel/MainViewModel.cs
@@ -9,6 +9,7 @@ using System.Threading.Channels;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
+using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Threading;
using CommunityToolkit.Mvvm.DependencyInjection;
@@ -883,6 +884,12 @@ namespace Flow.Launcher.ViewModel
}
}
+ public Visibility ShowCustomizedPreview
+ => InternalPreviewVisible && PreviewSelectedItem?.Result.PreviewPanel != null ? Visibility.Visible : Visibility.Collapsed;
+
+ public UserControl CustomizedPreviewControl
+ => ShowCustomizedPreview == Visibility.Visible ? PreviewSelectedItem?.Result.PreviewPanel.Value : null;
+
public Visibility ProgressBarVisibility { get; set; }
public Visibility MainWindowVisibility { get; set; }
diff --git a/Flow.Launcher/ViewModel/PluginViewModel.cs b/Flow.Launcher/ViewModel/PluginViewModel.cs
index ea222d023..d889bdd52 100644
--- a/Flow.Launcher/ViewModel/PluginViewModel.cs
+++ b/Flow.Launcher/ViewModel/PluginViewModel.cs
@@ -37,12 +37,17 @@ namespace Flow.Launcher.ViewModel
OnPropertyChanged(nameof(Image));
}
+ private bool _imageLoaded = false;
+
public ImageSource Image
{
get
{
- if (_image == ImageLoader.MissingImage)
+ if (!_imageLoaded)
+ {
+ _imageLoaded = true;
_ = LoadIconAsync();
+ }
return _image;
}
diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs
index c58abae28..d4382fb7f 100644
--- a/Flow.Launcher/ViewModel/ResultViewModel.cs
+++ b/Flow.Launcher/ViewModel/ResultViewModel.cs
@@ -66,8 +66,6 @@ namespace Flow.Launcher.ViewModel
public Visibility ShowDefaultPreview => Result.PreviewPanel == null ? Visibility.Visible : Visibility.Collapsed;
- public Visibility ShowCustomizedPreview => Result.PreviewPanel == null ? Visibility.Collapsed : Visibility.Visible;
-
public Visibility ShowIcon
{
get
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs
index 33d7725f1..07ce510fb 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs
@@ -36,6 +36,26 @@ public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, IContex
_faviconCacheDir = Path.Combine(
context.CurrentPluginMetadata.PluginCacheDirectoryPath,
"FaviconCache");
+
+ try
+ {
+ if (Directory.Exists(_faviconCacheDir))
+ {
+ var files = Directory.GetFiles(_faviconCacheDir);
+ foreach (var file in files)
+ {
+ var extension = Path.GetExtension(file);
+ if (extension is ".db-shm" or ".db-wal" or ".sqlite-shm" or ".sqlite-wal")
+ {
+ File.Delete(file);
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Context.API.LogException(ClassName, "Failed to clean up orphaned cache files.", e);
+ }
LoadBookmarksIfEnabled();
}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
index 21f836bec..c6a74a047 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
@@ -13,6 +13,7 @@
Edit
Add
Enabled
+ Private Mode
Enabled
Disabled
Confirm
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs
index 0040cffa7..97f90b52c 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs
@@ -71,7 +71,7 @@ namespace Flow.Launcher.Plugin.WebSearch
Score = score,
Action = c =>
{
- _context.API.OpenWebUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(keyword)));
+ _context.API.OpenWebUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(keyword)), searchSource.IsPrivateMode);
return true;
},
@@ -135,7 +135,7 @@ namespace Flow.Launcher.Plugin.WebSearch
ActionKeywordAssigned = searchSource.ActionKeyword == SearchSourceGlobalPluginWildCardSign ? string.Empty : searchSource.ActionKeyword,
Action = c =>
{
- _context.API.OpenWebUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)));
+ _context.API.OpenWebUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)), searchSource.IsPrivateMode);
return true;
},
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs
index 9eedd29a3..bfd95c242 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSource.cs
@@ -7,6 +7,7 @@ namespace Flow.Launcher.Plugin.WebSearch
public class SearchSource : BaseModel
{
public string Title { get; set; }
+
public string ActionKeyword { get; set; }
[NotNull]
@@ -19,21 +20,17 @@ namespace Flow.Launcher.Plugin.WebSearch
/// Custom icons are placed in the user data directory
///
[JsonIgnore]
- public string IconPath
- {
- get
- {
- if (CustomIcon)
- return Path.Combine(Main.CustomImagesDirectory, Icon);
-
- return Path.Combine(Main.DefaultImagesDirectory, Icon);
- }
- }
+ public string IconPath => CustomIcon
+ ? Path.Combine(Main.CustomImagesDirectory, Icon)
+ : Path.Combine(Main.DefaultImagesDirectory, Icon);
public string Url { get; set; }
[JsonIgnore]
public bool Status => Enabled;
+
+ public bool IsPrivateMode { get; set; }
+
public bool Enabled { get; set; }
public SearchSource DeepCopy()
@@ -45,8 +42,10 @@ namespace Flow.Launcher.Plugin.WebSearch
Url = Url,
Icon = Icon,
CustomIcon = CustomIcon,
+ IsPrivateMode = IsPrivateMode,
Enabled = Enabled
};
+
return webSearch;
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml
index 746c9cf84..c6f9b27f3 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml
@@ -101,6 +101,7 @@
+
+ Text="{DynamicResource flowlauncher_plugin_websearch_private_mode_label}" />
+
+
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs
index f0e5ac327..0c0ac4b84 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs
@@ -191,7 +191,19 @@ namespace Flow.Launcher.Plugin.WebSearch
[JsonIgnore]
public SearchSource SelectedSearchSource { get; set; }
- public bool EnableSuggestion { get; set; }
+ private bool enableSuggestion;
+ public bool EnableSuggestion
+ {
+ get => enableSuggestion;
+ set
+ {
+ if (enableSuggestion != value)
+ {
+ enableSuggestion = value;
+ OnPropertyChanged(nameof(EnableSuggestion));
+ }
+ }
+ }
[JsonIgnore]
public SuggestionSource[] Suggestions { get; set; } = {
@@ -221,9 +233,5 @@ namespace Flow.Launcher.Plugin.WebSearch
}
}
}
-
- public string BrowserPath { get; set; }
-
- public bool OpenInNewBrowser { get; set; } = true;
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml
index 1ce9b70b4..33461e9e7 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml
@@ -11,10 +11,6 @@
mc:Ignorable="d">
-
@@ -96,6 +92,20 @@
+
+
+
+
+
+
+
@@ -138,7 +148,7 @@
Margin="{StaticResource SettingPanelItemLeftMargin}"
VerticalAlignment="Center"
FontSize="11"
- IsEnabled="{Binding ElementName=EnableSuggestion, Path=IsChecked}"
+ IsEnabled="{Binding Settings.EnableSuggestion}"
ItemsSource="{Binding Settings.Suggestions}"
SelectedItem="{Binding Settings.SelectedSuggestion}" />
-
\ No newline at end of file
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs
index e53f4ec75..71dc6ece7 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs
@@ -94,7 +94,8 @@ namespace Flow.Launcher.Plugin.WebSearch
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;
- if(sortBy != null) {
+ if (sortBy != null)
+ {
Sort(sortBy, direction);
if (direction == ListSortDirection.Ascending)
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/setting.json b/Plugins/Flow.Launcher.Plugin.WebSearch/setting.json
index 533b894b8..a10ea6f33 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/setting.json
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/setting.json
@@ -141,6 +141,6 @@
"Enabled": true
}
],
- "EnableWebSearchSuggestion": false,
- "WebSearchSuggestionSource": "Google"
+ "EnableSuggestion": false,
+ "Suggestion": "Google"
}
\ No newline at end of file