Skip to content

Commit 659356a

Browse files
committed
Support plugin search delay
1 parent 0dba9bc commit 659356a

File tree

12 files changed

+87
-113
lines changed

12 files changed

+87
-113
lines changed

Flow.Launcher.Infrastructure/UserSettings/PluginSettings.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void UpdatePluginSettings(List<PluginMetadata> metadatas)
5151
settings.Version = metadata.Version;
5252
}
5353
settings.DefaultActionKeywords = metadata.ActionKeywords; // metadata provides default values
54-
settings.DefaultSearchDelay = metadata.SearchDelay; // metadata provides default values
54+
settings.DefaultSearchDelaySpeed = metadata.SearchDelaySpeed; // metadata provides default values
5555

5656
// update metadata values with settings
5757
if (settings.ActionKeywords?.Count > 0)
@@ -66,7 +66,7 @@ public void UpdatePluginSettings(List<PluginMetadata> metadatas)
6666
}
6767
metadata.Disabled = settings.Disabled;
6868
metadata.Priority = settings.Priority;
69-
metadata.SearchDelay = settings.SearchDelay;
69+
metadata.SearchDelaySpeed = settings.SearchDelaySpeed;
7070
}
7171
else
7272
{
@@ -80,8 +80,8 @@ public void UpdatePluginSettings(List<PluginMetadata> metadatas)
8080
ActionKeywords = metadata.ActionKeywords, // use default value
8181
Disabled = metadata.Disabled,
8282
Priority = metadata.Priority,
83-
DefaultSearchDelay = metadata.SearchDelay, // metadata provides default values
84-
SearchDelay = metadata.SearchDelay, // use default value
83+
DefaultSearchDelaySpeed = metadata.SearchDelaySpeed, // metadata provides default values
84+
SearchDelaySpeed = metadata.SearchDelaySpeed, // use default value
8585
};
8686
}
8787
}
@@ -120,9 +120,10 @@ public class Plugin
120120
public int Priority { get; set; }
121121

122122
[JsonIgnore]
123-
public int DefaultSearchDelay { get; set; }
123+
public SearchDelaySpeeds? DefaultSearchDelaySpeed { get; set; }
124124

125-
public int SearchDelay { get; set; }
125+
[JsonConverter(typeof(JsonStringEnumConverter))]
126+
public SearchDelaySpeeds? SearchDelaySpeed { get; set; }
126127

127128
/// <summary>
128129
/// Used only to save the state of the plugin in settings

Flow.Launcher.Infrastructure/UserSettings/Settings.cs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,9 @@ public bool SearchQueryResultsWithDelay
330330
OnPropertyChanged();
331331
}
332332
}
333-
333+
334334
SearchDelaySpeeds searchDelaySpeed { get; set; } = SearchDelaySpeeds.Medium;
335+
[JsonConverter(typeof(JsonStringEnumConverter))]
335336
public SearchDelaySpeeds SearchDelaySpeed
336337
{
337338
get => searchDelaySpeed;
@@ -342,23 +343,6 @@ public SearchDelaySpeeds SearchDelaySpeed
342343
}
343344
}
344345

345-
[JsonIgnore]
346-
public int SearchDelay => SearchDelaySpeed switch
347-
{
348-
SearchDelaySpeeds.Slow => 250,
349-
SearchDelaySpeeds.ModeratelySlow => 200,
350-
SearchDelaySpeeds.Medium => 150,
351-
SearchDelaySpeeds.ModeratelyFast => 100,
352-
SearchDelaySpeeds.Fast => 50,
353-
_ => 150
354-
};
355-
356-
[JsonIgnore]
357-
public List<int> PluginSearchDelayRange { get; } = new()
358-
{
359-
0, 30, 60, 90, 120, 150
360-
};
361-
362346
[JsonConverter(typeof(JsonStringEnumConverter))]
363347
public SearchWindowScreens SearchWindowScreen { get; set; } = SearchWindowScreens.Cursor;
364348

@@ -521,13 +505,4 @@ public enum BackdropTypes
521505
Mica,
522506
MicaAlt
523507
}
524-
525-
public enum SearchDelaySpeeds
526-
{
527-
Slow,
528-
ModeratelySlow,
529-
Medium,
530-
ModeratelyFast,
531-
Fast
532-
}
533508
}

Flow.Launcher.Plugin/PluginMetadata.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,10 @@ internal set
9999
public bool HideActionKeywordPanel { get; set; }
100100

101101
/// <summary>
102-
/// Plugin search delay in ms.
102+
/// Plugin search delay speed. Null means use default search delay.
103103
/// </summary>
104-
public int SearchDelay { get; set; }
104+
[JsonConverter(typeof(JsonStringEnumConverter))]
105+
public SearchDelaySpeeds? SearchDelaySpeed { get; set; } = null;
105106

106107
/// <summary>
107108
/// Plugin icon path.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
namespace Flow.Launcher.Plugin;
2+
3+
/// <summary>
4+
/// Enum for search delay speeds
5+
/// </summary>
6+
public enum SearchDelaySpeeds
7+
{
8+
/// <summary>
9+
/// Slow search delay speed. 50ms.
10+
/// </summary>
11+
Slow,
12+
13+
/// <summary>
14+
/// Moderately slow search delay speed. 100ms.
15+
/// </summary>
16+
ModeratelySlow,
17+
18+
/// <summary>
19+
/// Medium search delay speed. 150ms. Default value.
20+
/// </summary>
21+
Medium,
22+
23+
/// <summary>
24+
/// Moderately fast search delay speed. 200ms.
25+
/// </summary>
26+
ModeratelyFast,
27+
28+
/// <summary>
29+
/// Fast search delay speed. 250ms.
30+
/// </summary>
31+
Fast
32+
}

Flow.Launcher/Flow.Launcher.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@
100100
<PackageReference Include="NHotkey.Wpf" Version="3.0.0" />
101101
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
102102
<PackageReference Include="SemanticVersioning" Version="3.0.0" />
103-
<PackageReference Include="System.Reactive.Linq" Version="6.0.1" />
104103
<PackageReference Include="TaskScheduler" Version="2.12.1" />
105104
<PackageReference Include="VirtualizingWrapPanel" Version="2.1.1" />
106105
</ItemGroup>

Flow.Launcher/Languages/en.xaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@
104104
<system:String x:Key="shadowEffectNotAllowed">Shadow effect is not allowed while current theme has blur effect enabled</system:String>
105105
<system:String x:Key="searchDelay">Search Delay</system:String>
106106
<system:String x:Key="searchDelayToolTip">Delay for a while to search when typing. This reduces interface jumpiness and result load.</system:String>
107-
<system:String x:Key="searchDelayTime">Search Delay Speed</system:String>
108-
<system:String x:Key="searchDelayTimeToolTip">Delay time speed after which search results appear when typing is stopped. Default is medium.</system:String>
107+
<system:String x:Key="searchDelaySpeed">Default Search Delay Speed</system:String>
108+
<system:String x:Key="searchDelaySpeedToolTip">Plugins default delay time after which search results appear when typing is stopped. Default is medium.</system:String>
109109
<system:String x:Key="SearchDelaySpeedSlow">Slow</system:String>
110110
<system:String x:Key="SearchDelaySpeedModeratelySlow">Moderately slow</system:String>
111111
<system:String x:Key="SearchDelaySpeedMedium">Medium</system:String>
@@ -127,7 +127,8 @@
127127
<system:String x:Key="currentActionKeywords">Current action keyword</system:String>
128128
<system:String x:Key="newActionKeyword">New action keyword</system:String>
129129
<system:String x:Key="actionKeywordsTooltip">Change Action Keywords</system:String>
130-
<system:String x:Key="pluginSearchDelayTooltip">Change Seach Delay Time</system:String>
130+
<system:String x:Key="pluginSearchDelaySpeed">Plugin seach delay speed</system:String>
131+
<system:String x:Key="pluginSearchDelaySpeedTooltip">Change Plugin Seach Delay Speed</system:String>
131132
<system:String x:Key="currentPriority">Current Priority</system:String>
132133
<system:String x:Key="newPriority">New Priority</system:String>
133134
<system:String x:Key="priority">Priority</system:String>
@@ -143,6 +144,7 @@
143144
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
144145
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
145146
<system:String x:Key="failedToRemovePluginCacheMessage">Plugins: {0} - Fail to remove plugin cache files, please remove them manually</system:String>
147+
<system:String x:Key="default">Default</system:String>
146148

147149
<!-- Setting Plugin Store -->
148150
<system:String x:Key="pluginStore">Plugin Store</system:String>

Flow.Launcher/MainWindow.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@
252252
PreviewKeyUp="QueryTextBox_KeyUp"
253253
Style="{DynamicResource QueryBoxStyle}"
254254
Text="{Binding QueryText, Mode=OneWay}"
255+
TextChanged="QueryTextBox_TextChanged1"
255256
Visibility="Visible"
256257
WindowChrome.IsHitTestVisibleInChrome="True">
257258
<TextBox.CommandBindings>

Flow.Launcher/MainWindow.xaml.cs

Lines changed: 2 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.ComponentModel;
33
using System.Linq;
44
using System.Media;
5-
using System.Reactive.Linq;
65
using System.Threading.Tasks;
76
using System.Windows;
87
using System.Windows.Controls;
@@ -64,9 +63,6 @@ public partial class MainWindow : IDisposable
6463
private const double DefaultRightMargin = 66; //* this value from base.xaml
6564
private bool _isClockPanelAnimating = false;
6665

67-
// Search Delay
68-
private IDisposable _reactiveSubscription;
69-
7066
// IDisposable
7167
private bool _disposed = false;
7268

@@ -122,9 +118,6 @@ private async void OnLoaded(object sender, RoutedEventArgs _)
122118
welcomeWindow.Show();
123119
}
124120

125-
// Initialize search delay
126-
SetupSearchTextBoxReactiveness(_settings.SearchQueryResultsWithDelay, _settings.SearchDelay);
127-
128121
// Initialize place holder
129122
SetupPlaceholderText();
130123
_viewModel.PlaceholderText = _settings.PlaceholderText;
@@ -267,15 +260,6 @@ private async void OnLoaded(object sender, RoutedEventArgs _)
267260
case nameof(Settings.KeepMaxResults):
268261
SetupResizeMode();
269262
break;
270-
case nameof(Settings.SearchQueryResultsWithDelay):
271-
SetupSearchTextBoxReactiveness(_settings.SearchQueryResultsWithDelay, _settings.SearchDelay);
272-
break;
273-
case nameof(Settings.SearchDelaySpeed):
274-
if (_settings.SearchQueryResultsWithDelay)
275-
{
276-
SetupSearchTextBoxReactiveness(_settings.SearchQueryResultsWithDelay, _settings.SearchDelay);
277-
}
278-
break;
279263
}
280264
};
281265

@@ -1126,46 +1110,11 @@ private void SetupResizeMode()
11261110

11271111
#region Search Delay
11281112

1129-
// Edited from: https://github.com/microsoft/PowerToys
1130-
1131-
private void SetupSearchTextBoxReactiveness(bool showResultsWithDelay, int searchDelay)
1132-
{
1133-
if (_reactiveSubscription != null)
1134-
{
1135-
_reactiveSubscription.Dispose();
1136-
_reactiveSubscription = null;
1137-
}
1138-
1139-
QueryTextBox.TextChanged -= QueryTextBox_TextChanged1;
1140-
1141-
if (showResultsWithDelay)
1142-
{
1143-
_reactiveSubscription = Observable.FromEventPattern<TextChangedEventHandler, TextChangedEventArgs>(
1144-
conversion => (sender, eventArg) => conversion(sender, eventArg),
1145-
add => QueryTextBox.TextChanged += add,
1146-
remove => QueryTextBox.TextChanged -= remove)
1147-
// TODO: Remove debug codes.
1148-
.Throttle(TimeSpan.FromMilliseconds(_settings.SearchDelay * 10))
1149-
.Do(@event => Dispatcher.Invoke(() => PerformSearchQuery(true, (TextBox)@event.Sender)))
1150-
.Subscribe();
1151-
}
1152-
else
1153-
{
1154-
QueryTextBox.TextChanged += QueryTextBox_TextChanged1;
1155-
}
1156-
}
1157-
11581113
private void QueryTextBox_TextChanged1(object sender, TextChangedEventArgs e)
11591114
{
11601115
var textBox = (TextBox)sender;
1161-
PerformSearchQuery(false, textBox);
1162-
}
1163-
1164-
private void PerformSearchQuery(bool searchDelay, TextBox textBox)
1165-
{
1166-
var text = textBox.Text;
1167-
_viewModel.QueryText = text;
1168-
_viewModel.Query(searchDelay);
1116+
_viewModel.QueryText = textBox.Text;
1117+
_viewModel.Query(_settings.SearchQueryResultsWithDelay);
11691118
}
11701119

11711120
#endregion
@@ -1180,7 +1129,6 @@ protected virtual void Dispose(bool disposing)
11801129
{
11811130
_hwndSource?.Dispose();
11821131
_notifyIcon?.Dispose();
1183-
_reactiveSubscription?.Dispose();
11841132
}
11851133

11861134
_disposed = true;

Flow.Launcher/Resources/Controls/InstalledPluginSearchDelay.xaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,18 @@
3232
VerticalAlignment="Center"
3333
DockPanel.Dock="Left"
3434
Style="{DynamicResource SettingTitleLabel}"
35-
Text="{DynamicResource searchDelayTime}" />
35+
Text="{DynamicResource pluginSearchDelaySpeed}" />
3636
<!-- Here Margin="0 -4.5 0 -4.5" is to remove redundant top bottom margin from Margin="{StaticResource SettingPanelMargin}" -->
37-
<ComboBox
37+
<Button
3838
Width="100"
3939
Margin="0 -4.5 0 -4.5"
4040
HorizontalAlignment="Right"
41+
Command="{Binding SetSearchDelaySpeedCommand}"
42+
Content="{Binding SearchDelaySpeedText}"
4143
Cursor="Hand"
4244
DockPanel.Dock="Right"
4345
FontWeight="Bold"
44-
ItemsSource="{Binding PluginSearchDelayRange}"
45-
SelectedItem="{Binding PluginSearchDelay}"
46-
ToolTip="{DynamicResource pluginSearchDelayTooltip}" />
46+
ToolTip="{DynamicResource pluginSearchDelaySpeedTooltip}" />
4747
</DockPanel>
4848
</Border>
4949
</UserControl>

Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,9 @@
184184
</cc:Card>
185185

186186
<cc:Card
187-
Title="{DynamicResource searchDelayTime}"
187+
Title="{DynamicResource searchDelaySpeed}"
188188
Icon="&#xE916;"
189-
Sub="{DynamicResource searchDelayTimeToolTip}">
189+
Sub="{DynamicResource searchDelaySpeedToolTip}">
190190
<ComboBox
191191
MaxWidth="200"
192192
DisplayMemberPath="Display"

0 commit comments

Comments
 (0)