Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
547 commits
Select commit Hold shift + click to select a range
e468c48
feat: fix erros
01Dri Oct 11, 2025
d7579cc
fix erros
01Dri Oct 11, 2025
690d33e
up
01Dri Oct 11, 2025
a1f82e1
refactor: using count for better performance
01Dri Oct 11, 2025
a3b7c68
up
01Dri Oct 11, 2025
b297f3d
Fix ArgumentOutOfRangeException in WebSearch Plugin (#4041)
Jack251970 Oct 11, 2025
2b7c204
up
01Dri Oct 11, 2025
01bbb54
Merge pull request #4038 from AWAS666/dragdropwebsearch
Jack251970 Oct 11, 2025
cc397d4
Merge branch 'dev' into feature/history_mode
01Dri Oct 11, 2025
eb261f5
Merge pull request #3944 from Flow-Launcher/url_open_enhancement
Jack251970 Oct 12, 2025
b8acead
Merge branch 'dev' into httpspref
Jack251970 Oct 12, 2025
6f17aa2
Resolve conflicts
Jack251970 Oct 12, 2025
1e3306e
Remove unused file
Jack251970 Oct 12, 2025
e6c4cc2
Merge pull request #4037 from AWAS666/httpspref
Jack251970 Oct 12, 2025
e3527f4
Add RecordKey for precise history matching and refactor
Jack251970 Oct 13, 2025
7fa78f0
Code cleanup
Jack251970 Oct 13, 2025
02a29c6
New Crowdin updates (#4002)
jjw24 Oct 14, 2025
7445d54
merge back v2.0.2 from master to dev
jjw24 Oct 14, 2025
b84ca9b
Improve code quality
Jack251970 Oct 14, 2025
592440f
Merge pull request #3982 from Flow-Launcher/squirrel_upgrade
Jack251970 Oct 14, 2025
f6d5a27
Refactor and enhance history management system
Jack251970 Oct 14, 2025
693bae7
Optimize query result selection handling
Jack251970 Oct 14, 2025
787ccad
Refactor history handling with async ResultHelper
Jack251970 Oct 14, 2025
8fde82a
Merge pull request #4047 from Flow-Launcher/merge_back_2_0_2
jjw24 Oct 14, 2025
adfd542
Merge branch 'dev' into plugin_initialization
Jack251970 Oct 14, 2025
66fe0b8
Adjust design-time height in SettingsPaneGeneral.xaml
Jack251970 Oct 14, 2025
a3d1c43
Bump Microsoft.Data.Sqlite from 9.0.9 to 9.0.10
dependabot[bot] Oct 14, 2025
0131b92
The HistoryStyle property is used to distinguish history items
01Dri Oct 15, 2025
ced824d
is equals
01Dri Oct 15, 2025
d5a2695
Update the history item if it equals the last added item or already e…
01Dri Oct 15, 2025
9f652c3
History items filtered based on HistoryStyle.
01Dri Oct 15, 2025
8e96d1a
HistoryStyle enum values
01Dri Oct 15, 2025
4fe3b55
Merge pull request #4049 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Oct 15, 2025
f31abe8
PopulateHistoryFromLegacyHistory with HistoryStyle
01Dri Oct 15, 2025
764c674
code quality
01Dri Oct 15, 2025
a8d3cdf
SubTitle equals
01Dri Oct 15, 2025
9ca7c84
Revert modifications and returning actions
01Dri Oct 15, 2025
10d353d
Returning actions
01Dri Oct 15, 2025
4b6ee4e
Improve code quality
Jack251970 Oct 15, 2025
1298b76
Track user-selected results for ranking purposes
Jack251970 Oct 15, 2025
c73689f
Fix spelling
Jack251970 Oct 15, 2025
629c2eb
Record user-selected results for ranking
Jack251970 Oct 15, 2025
b784a14
Update tooltip text for `historyStyleTooltip`
Jack251970 Oct 15, 2025
83cab76
Fix typos
Jack251970 Oct 15, 2025
df4f08b
Add exception logging to ResultHelper catch block
Jack251970 Oct 15, 2025
b13c29a
Record user selection after successful execution
Jack251970 Oct 15, 2025
3d9ef2c
Merge pull request #4042 from 01Dri/feature/history_mode
Jack251970 Oct 15, 2025
e2abc1b
Merge branch 'dev' into plugin_initialization
Jack251970 Oct 15, 2025
c00d804
Resolve conflicts
Jack251970 Oct 15, 2025
3690042
Fix DialogJump UriFormatException when navigating to root directories…
Jack251970 Oct 15, 2025
386737a
update method parameter style
jjw24 Oct 16, 2025
bd880d3
update wording
jjw24 Oct 16, 2025
68454a8
Change log level for plugin constructor timing message
Jack251970 Oct 16, 2025
fbeaafa
Remove `Score = -100` from result objects in PluginManager
Jack251970 Oct 16, 2025
c9e3c62
Improve code comments
Jack251970 Oct 16, 2025
fb84cb0
Improve code comments
Jack251970 Oct 16, 2025
da4b961
Merge pull request #3854 from Flow-Launcher/plugin_initialization
jjw24 Oct 16, 2025
7883e7a
add result IcoPath & Glyph + handling show badge switching
jjw24 Oct 17, 2025
10d3ba2
update history result icon display logic & remove badge icon logic
jjw24 Oct 19, 2025
26ad473
change getting last history item to get the same result if exists
jjw24 Oct 19, 2025
1bfd147
BUG: Explorer plugin navigate path should only show results in curren…
01Dri Oct 21, 2025
92551c5
show distinct records when history style is last opened
jjw24 Oct 21, 2025
25aa5bf
show history result sorted descending by execution time
jjw24 Oct 21, 2025
0f26945
remove duplicate history item sort call
jjw24 Oct 21, 2025
f0584ac
Bump actions/upload-artifact from 4 to 5
dependabot[bot] Oct 24, 2025
1885a48
Merge pull request #4070 from Flow-Launcher/dependabot/github_actions…
Jack251970 Oct 25, 2025
7f5efc5
Refactor caching and improve QueryAsync method
Jack251970 Oct 26, 2025
637d926
Remove caching logic and initialize emptyResults list
Jack251970 Oct 26, 2025
6a65f80
Enhance thread safety and refactor reindexing logic
Jack251970 Oct 26, 2025
e2fa122
Improve program indexing with logging and thread safety
Jack251970 Oct 26, 2025
f632a4b
Add caching to QueryAsync and integrate cache reset logic
Jack251970 Oct 26, 2025
4cf942a
Add detailed debug logging for query execution process
Jack251970 Oct 26, 2025
348a83a
Update en.xaml
90gq29 Nov 1, 2025
e2ac321
Merge pull request #4084 from 90gq29/patch-1
Jack251970 Nov 2, 2025
6e17d5d
Improve logging for Win32 program lock acquisition
Jack251970 Nov 4, 2025
db0c86d
Remove CancellationToken from semaphore WaitAsync calls
Jack251970 Nov 4, 2025
3d8fd1d
Improve cancellation, locking, and logging mechanisms
Jack251970 Nov 6, 2025
7e332fa
Refactor caching and indexing logic
Jack251970 Nov 6, 2025
30d7f67
Refactor token cancellation check for readability
Jack251970 Nov 6, 2025
bfaff5c
Improve semaphore usage and logging clarity
Jack251970 Nov 6, 2025
d0a47c8
Clarify CancellationToken handling in comments
Jack251970 Nov 6, 2025
49f89e3
Make locking operations cancelable with tokens
Jack251970 Nov 6, 2025
88fd1e5
Handle OperationCanceledException gracefully
Jack251970 Nov 6, 2025
05c8dd2
Remove unnecessary debug information
Jack251970 Nov 6, 2025
2adbc33
Improve semaphore lock handling and code robustness
Jack251970 Nov 7, 2025
fc93d09
Merge pull request #4072 from Flow-Launcher/program_plugin_index_issue
Jack251970 Nov 8, 2025
3492aac
Bump Microsoft.Data.Sqlite from 9.0.10 to 10.0.0
dependabot[bot] Nov 11, 2025
5582402
Merge pull request #4103 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Nov 13, 2025
f1b80ab
Add new sponsor to README
jjw24 Nov 14, 2025
c6c4132
Merge pull request #4108 from Flow-Launcher/add_sponsor
jjw24 Nov 14, 2025
05f15d9
Upgrade iNKORE.UI.WPF.Modern and refactor scroll logic
Jack251970 Nov 18, 2025
a773b51
Handle recoverable DWM composition exceptions gracefully (#4113)
Jack251970 Nov 19, 2025
7958b17
wip show result icon
jjw24 Nov 20, 2025
533a58d
New Crowdin updates (#4051)
jjw24 Nov 20, 2025
1c29fb2
merge back v2.0.3 from master to dev
jjw24 Nov 20, 2025
bb841fc
Merge pull request #4122 from Flow-Launcher/merge_2_0_3
jjw24 Nov 20, 2025
28065f7
Bump actions/checkout from 5 to 6
dependabot[bot] Nov 20, 2025
38c0fae
Merge pull request #4124 from Flow-Launcher/dependabot/github_actions…
Jack251970 Nov 21, 2025
5623bf2
Add null checks and improve dialog window handling
Jack251970 Nov 23, 2025
ce4a37b
Bump Mages from 3.0.0 to 3.0.1
dependabot[bot] Nov 25, 2025
48f67b1
Improve and fix query result update logic issue & provide access to e…
Jack251970 Nov 26, 2025
a49eb46
Merge pull request #4129 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Nov 26, 2025
7d9de4b
Fix index lookup for boundary
VictoriousRaptor Dec 7, 2025
b869eb8
Avoid adding unnecessary space and improve unit test
VictoriousRaptor Dec 7, 2025
a7c67bb
Fix incorrect index marker
VictoriousRaptor Dec 7, 2025
769179d
Fix test case
VictoriousRaptor Dec 7, 2025
42e04d4
Cover all positions in unit test
VictoriousRaptor Dec 7, 2025
b6339d3
Fix compile error introduced by coderabbit
VictoriousRaptor Dec 8, 2025
c03c778
Merge pull request #4151 from Flow-Launcher/fix3965
VictoriousRaptor Dec 9, 2025
4c44877
Bump actions/upload-artifact from 5 to 6
dependabot[bot] Dec 12, 2025
ebc1a85
Merge pull request #4155 from Flow-Launcher/dependabot/github_actions…
Jack251970 Dec 13, 2025
9066913
[FEATURE] Folder and File Action Keywords (#4093)
01Dri Dec 14, 2025
666d525
Add sponsor to README
jjw24 Dec 15, 2025
31f5698
update readme
jjw24 Dec 15, 2025
437b7da
formatting
jjw24 Dec 15, 2025
4221797
Merge pull request #4125 from Flow-Launcher/dialog_jump_ignore_null_h…
Jack251970 Dec 15, 2025
0f34829
Merge pull request #4160 from Flow-Launcher/add_sponsor
jjw24 Dec 15, 2025
2093061
Merge pull request #4118 from Flow-Launcher/UI.WPF.Modern
Jack251970 Dec 16, 2025
bb3c8fb
Bump toshimaru/auto-author-assign from 2.1.1 to 2.1.2
dependabot[bot] Dec 16, 2025
12ab11a
Merge pull request #4165 from Flow-Launcher/dependabot/github_actions…
Jack251970 Dec 17, 2025
b4ec480
Bump Microsoft.Data.Sqlite from 10.0.0 to 10.0.1
dependabot[bot] Dec 17, 2025
e01869a
Fix: Result.Preview.Description is not ignored anymore
Heck-R Dec 17, 2025
c8cebc2
Merge pull request #4166 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Dec 19, 2025
e634e2c
Merge branch 'dev' into dev
Jack251970 Dec 19, 2025
a07af87
Update name
Jack251970 Dec 19, 2025
f95d41e
Merge pull request #4167 from Heck-R/dev
VictoriousRaptor Dec 19, 2025
d1518a4
Replace old clipboard plugin with a new one in README
VictoriousRaptor Dec 21, 2025
a08a456
Merge pull request #4170 from Flow-Launcher/VictoriousRaptor-patch-1
jjw24 Dec 21, 2025
0d4775b
Bump toshimaru/auto-author-assign from 2.1.2 to 3.0.0
dependabot[bot] Dec 22, 2025
1594683
Merge pull request #4178 from Flow-Launcher/dependabot/github_actions…
Jack251970 Dec 24, 2025
bb1dfcd
Fix hide item option not working in Program plugin (#4141)
Jack251970 Dec 25, 2025
ffb37d3
New Crowdin updates (#4127)
jjw24 Dec 25, 2025
2856803
Ensure hotkey actions return to query results page first
Jack251970 Dec 25, 2025
23caeb4
Bump toshimaru/auto-author-assign from 3.0.0 to 3.0.1
dependabot[bot] Dec 25, 2025
1a7957b
Merge pull request #4183 from Flow-Launcher/dependabot/github_actions…
Jack251970 Dec 26, 2025
d78d313
update to use IcoAbsoluteLocalPath
jjw24 Dec 26, 2025
8092a44
Merge pull request #4182 from Flow-Launcher/custom_query_hotkey
Jack251970 Dec 27, 2025
de0d022
rename last opened class; use inheritance; initialise at startup
jjw24 Dec 31, 2025
8e80c3b
Add option to show taskbar when Flow Launcher is opend (#4177)
VictoriousRaptor Dec 31, 2025
6b6a9a9
simplify GetHistoryItems
jjw24 Jan 1, 2026
8d7fa1d
revert QueryHistoryItems property
jjw24 Jan 1, 2026
810725c
add explicit JsonInclude for PluginID internal set
jjw24 Jan 1, 2026
2e8bb35
Merge branch 'dev' into last_history_show_result_icon
jjw24 Jan 1, 2026
20854ba
formatting
jjw24 Jan 1, 2026
7c670de
fix history result highlight and scroll when history mode activated
jjw24 Jan 1, 2026
f9df44a
rename to IcoPathAbsolute
jjw24 Jan 1, 2026
6d6003f
switch to using TrimmedQuery
jjw24 Jan 1, 2026
9c2f239
add method comments for LastOpenedHistoryResult
jjw24 Jan 1, 2026
3e32fca
Fix localized name get failure
VictoriousRaptor Jan 1, 2026
b062fc0
Catch exceptions and release com objects
VictoriousRaptor Jan 2, 2026
83883c4
Merge pull request #4195 from Flow-Launcher/fix-localized-name
Jack251970 Jan 2, 2026
024eeaf
changed LastOpenHistoryResult's Copy to DeepCopy to clarify intent
jjw24 Jan 2, 2026
2176553
Add max suggestions setting for web search plugins
nilvanlopes Jan 2, 2026
4c7cbad
remove the language files other than the en.xaml
nilvanlopes Jan 3, 2026
669f3ef
Update Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml
nilvanlopes Jan 3, 2026
101e5e6
fix Glyph optional null when copying
jjw24 Jan 4, 2026
4174b5e
fix title when query history style used
jjw24 Jan 4, 2026
94ebbab
update legacy item to show Query style title
jjw24 Jan 4, 2026
25037e3
update IcoPath if existing is different to the selected
jjw24 Jan 4, 2026
55673cd
add method comments
jjw24 Jan 4, 2026
ea7a2d2
mark PopulateHistoryFromLegacyHistory obsolete
jjw24 Jan 4, 2026
19fa107
minor fixes and adjustments for code quality
jjw24 Jan 4, 2026
590b4c8
Try NumberBox
Jack251970 Jan 4, 2026
4c46e16
Fix possible convert issue
Jack251970 Jan 4, 2026
af9050c
Test no PrivateAssets
Jack251970 Jan 4, 2026
6c1c9fe
Use wrap panel
Jack251970 Jan 4, 2026
a9e6a68
Revert "Upgrade iNKORE.UI.WPF.Modern and refactor scroll logic"
Jack251970 Jan 4, 2026
27c4d35
Merge pull request #4198 from nilvanlopes/feature/websearch-max-sugge…
Jack251970 Jan 4, 2026
604fd2b
Merge branch 'dev' into revert-4118-UI.WPF.Modern
Jack251970 Jan 4, 2026
1e17615
Merge pull request #4201 from Flow-Launcher/revert-4118-UI.WPF.Modern
Jack251970 Jan 4, 2026
216b6f5
Code cleanup
Jack251970 Jan 5, 2026
5f99235
Code cleanup
Jack251970 Jan 5, 2026
177e607
Add code comments
Jack251970 Jan 5, 2026
11645fd
ensure history results ordered by ExecutedDateTime
jjw24 Jan 5, 2026
58d910d
fix deep copy Glyph on LastOpenHistoryResult
jjw24 Jan 5, 2026
f22b644
Fix issue when querying history items in home page
Jack251970 Jan 5, 2026
e6a91a9
Ensure history items have valid icons in QueryHistory
Jack251970 Jan 5, 2026
cf4268d
Fix preview panel blank issue
Jack251970 Jan 5, 2026
5b2fb1f
Revert "Ensure history items have valid icons in QueryHistory"
Jack251970 Jan 5, 2026
e403c41
Change copied icon logic as origin
Jack251970 Jan 5, 2026
77b631b
Bump Svg.Skia from 3.2.1 to 3.4.0
dependabot[bot] Jan 5, 2026
8d4e03b
Merge pull request #4202 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Jan 6, 2026
c610100
Use QueryManager function
Jack251970 Jan 6, 2026
e404d02
Update the result when executing history item
Jack251970 Jan 6, 2026
26e4529
Update the result when executing history item
Jack251970 Jan 6, 2026
583bf74
Update code comments
Jack251970 Jan 6, 2026
938a87c
Fix preview panel blank issue
Jack251970 Jan 6, 2026
9d9ab1f
Do not allow context menu for history items
Jack251970 Jan 6, 2026
3745c44
Revert `Update the result when executing history item`
Jack251970 Jan 6, 2026
382a77d
Fix ShellPath directory for shell path selection
Jack251970 Jan 7, 2026
34257ca
Initial plan
Copilot Jan 10, 2026
649b142
Add UseThousandsSeparator setting to Calculator plugin
Copilot Jan 10, 2026
4e56cb4
Merge pull request #4203 from Flow-Launcher/shell_path
Jack251970 Jan 11, 2026
fb4da69
Improve calculator thousands separator test
Jack251970 Jan 12, 2026
013622a
Restore to default in calculator tests
Jack251970 Jan 12, 2026
7e7f853
Fix potential locale-dependent test failure
Jack251970 Jan 12, 2026
ed83da5
Bump Svg.Skia from 3.4.0 to 3.4.1
dependabot[bot] Jan 13, 2026
e970bb4
fix icon & glyph display based on selected history style results
jjw24 Jan 13, 2026
98bb98c
Bump Microsoft.Data.Sqlite from 10.0.1 to 10.0.2
dependabot[bot] Jan 13, 2026
91cd272
Bump Microsoft.SourceLink.GitHub from 8.0.0 to 10.0.102
dependabot[bot] Jan 13, 2026
56c1b92
Merge pull request #4210 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Jan 14, 2026
d72a159
Merge branch 'dev' into dependabot/nuget/Plugins/Flow.Launcher.Plugin…
Jack251970 Jan 14, 2026
a46350c
Merge pull request #4211 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Jan 14, 2026
befcc9b
Update Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml
VictoriousRaptor Jan 17, 2026
ca5f5cf
Merge pull request #4206 from Flow-Launcher/copilot/fix-calculator-th…
Jack251970 Jan 17, 2026
9036002
update glyph when history result exists
jjw24 Jan 20, 2026
5c241d7
fix to respect max history result shown setting
jjw24 Jan 20, 2026
4ddb164
adjusted context menu call to exit early when history result selected
jjw24 Jan 20, 2026
657e6ae
add null-safe comparison for glyph
jjw24 Jan 20, 2026
bf44637
revert context menu early exit when history result
jjw24 Jan 20, 2026
add111f
Merge pull request #4212 from Flow-Launcher/dependabot/nuget/Flow.Lau…
Jack251970 Jan 21, 2026
8e127d0
Code cleanup
Jack251970 Jan 21, 2026
b703bcd
Try to fix combability issue
Jack251970 Jan 23, 2026
0f0ee9f
Revert "Try to fix combability issue"
Jack251970 Jan 23, 2026
935d41d
Ensure combability of glyph setter
Jack251970 Jan 23, 2026
e9dcd8b
Fix code comments
Jack251970 Jan 23, 2026
248da93
fix preview when toggle history mode via Ctrl + H
jjw24 Jan 26, 2026
6c8add0
Merge pull request #4057 from Flow-Launcher/last_history_show_result_…
jjw24 Jan 26, 2026
97d7eab
Bump Microsoft.Windows.CsWin32 from 0.3.205 to 0.3.269
dependabot[bot] Feb 4, 2026
d4f472a
Update AdjustTokenPrivileges PInvoke usage
Jack251970 Feb 5, 2026
516059e
Merge pull request #4252 from Flow-Launcher/dependabot/nuget/Flow.Lau…
Jack251970 Feb 6, 2026
0717933
Fix progress query management and thread safety (#4135)
Jack251970 Feb 8, 2026
0f829d0
Bump SkiaSharp from 3.119.1 to 3.119.2
dependabot[bot] Feb 10, 2026
6c1f7fa
Merge pull request #4260 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Feb 10, 2026
498913e
Bump Microsoft.Data.Sqlite from 10.0.2 to 10.0.3
dependabot[bot] Feb 10, 2026
60ef8e6
Bump Microsoft.SourceLink.GitHub from 10.0.102 to 10.0.103
dependabot[bot] Feb 10, 2026
89b338f
Merge pull request #4264 from Flow-Launcher/dependabot/nuget/Flow.Lau…
Jack251970 Feb 11, 2026
faeba81
Merge pull request #4263 from Flow-Launcher/dependabot/nuget/Plugins/…
Jack251970 Feb 11, 2026
cb52fa6
Fix typo: 'can be change' -> 'can be changed' in Drag & Drop section
Feb 19, 2026
9c3dfcd
README Polish: fixed grammar, consistency, and phrasing
Feb 19, 2026
2b50c4f
README Polish: fixed Flow
Jack251970 Feb 20, 2026
886cd75
Merge pull request #4272 from umutKaracelebi/fix/readme-drag-drop-typo
Jack251970 Feb 20, 2026
12fc597
Add Checkbox for Skip Confirm
onesounds Feb 20, 2026
2d7d025
Add Skip logic in command
onesounds Feb 20, 2026
cecd90e
Refactor: Improve power action logic and property setter
onesounds Feb 20, 2026
7e9a626
style: fix indentation and tab spacing
onesounds Feb 20, 2026
a99b839
Improve code quality
Jack251970 Feb 21, 2026
11e0f8c
Merge pull request #4273 from onesounds/20250220_SkipConfirm
onesounds Feb 21, 2026
918eb0f
New Crowdin updates (#4181)
jjw24 Feb 21, 2026
118d6e2
Fix incomplete plugin directory deletion on uninstall (#4250)
Jack251970 Feb 21, 2026
c14eda2
Revert "Merge pull request #4198 from nilvanlopes/feature/websearch-m…
jjw24 Feb 22, 2026
308083d
Revert "Merge pull request #4057 from Flow-Launcher/last_history_show…
jjw24 Feb 22, 2026
9f4a3cc
Revert "Merge pull request #4042 from 01Dri/feature/history_mode"
jjw24 Feb 22, 2026
a1456e0
version bump
jjw24 Feb 22, 2026
2faed59
version bump Plugin project
jjw24 Feb 22, 2026
dfd444c
Revert "Merge pull request #4260 from Flow-Launcher/dependabot/nuget/…
jjw24 Feb 22, 2026
7126750
Reapply "Merge pull request #4198 from nilvanlopes/feature/websearch-…
jjw24 Feb 24, 2026
66dceb6
Merge pull request #4277 from Flow-Launcher/websearch_ui
Jack251970 Feb 23, 2026
5f173c6
Merge pull request #4279 from Flow-Launcher/websearch_ui
Jack251970 Feb 24, 2026
f32ee6e
Fix process priority for logon startup task set to BelowNormal by def…
Jack251970 Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/default_plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
runs-on: windows-latest

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
NUGET_CERT_REVOCATION_MODE: offline
BUILD_NUMBER: ${{ github.run_number }}
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- name: Set Flow.Launcher.csproj version
id: update
uses: vers-one/dotnet-project-version-updater@v1.7
Expand Down Expand Up @@ -54,36 +54,36 @@ jobs:
shell: powershell
run: .\Scripts\post_build.ps1
- name: Upload Plugin Nupkg
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: Plugin nupkg
path: |
Output\Release\Flow.Launcher.Plugin.*.nupkg
compression-level: 0
- name: Upload Setup
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: Flow Installer
path: |
Output\Packages\Flow-Launcher-*.exe
compression-level: 0
- name: Upload Portable Version
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: Portable Version
path: |
Output\Packages\Flow-Launcher-Portable.zip
compression-level: 0
- name: Upload Full Nupkg
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: Full nupkg
path: |
Output\Packages\FlowLauncher-*-full.nupkg

compression-level: 0
- name: Upload Release Information
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v6
with:
name: RELEASES
path: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr_assignee.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Assign PR to creator
uses: toshimaru/auto-author-assign@v2.1.1
uses: toshimaru/auto-author-assign@v3.0.1
2 changes: 1 addition & 1 deletion .github/workflows/release_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
update-pr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6

- uses: actions/setup-python@v6
with:
Expand Down
29 changes: 12 additions & 17 deletions Flow.Launcher.Core/Configuration/Portable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
using System.Linq;
using System.Reflection;
using System.Windows;
using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Infrastructure;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
using Flow.Launcher.Plugin.SharedCommands;
using Microsoft.Win32;
using Squirrel;
Expand All @@ -17,8 +15,6 @@ public class Portable : IPortable
{
private static readonly string ClassName = nameof(Portable);

private readonly IPublicAPI API = Ioc.Default.GetRequiredService<IPublicAPI>();

/// <summary>
/// As at Squirrel.Windows version 1.5.2, UpdateManager needs to be disposed after finish
/// </summary>
Expand All @@ -45,13 +41,13 @@ public void DisablePortableMode()
#endif
IndicateDeletion(DataLocation.PortableDataPath);

API.ShowMsgBox(API.GetTranslation("restartToDisablePortableMode"));
PublicApi.Instance.ShowMsgBox(Localize.restartToDisablePortableMode());

UpdateManager.RestartApp(Constant.ApplicationFileName);
}
catch (Exception e)
{
API.LogException(ClassName, "Error occurred while disabling portable mode", e);
PublicApi.Instance.LogException(ClassName, "Error occurred while disabling portable mode", e);
}
}

Expand All @@ -68,13 +64,13 @@ public void EnablePortableMode()
#endif
IndicateDeletion(DataLocation.RoamingDataPath);

API.ShowMsgBox(API.GetTranslation("restartToEnablePortableMode"));
PublicApi.Instance.ShowMsgBox(Localize.restartToEnablePortableMode());

UpdateManager.RestartApp(Constant.ApplicationFileName);
}
catch (Exception e)
{
API.LogException(ClassName, "Error occurred while enabling portable mode", e);
PublicApi.Instance.LogException(ClassName, "Error occurred while enabling portable mode", e);
}
}

Expand All @@ -94,13 +90,13 @@ public void RemoveUninstallerEntry()

public void MoveUserDataFolder(string fromLocation, string toLocation)
{
FilesFolders.CopyAll(fromLocation, toLocation, (s) => API.ShowMsgBox(s));
FilesFolders.CopyAll(fromLocation, toLocation, (s) => PublicApi.Instance.ShowMsgBox(s));
VerifyUserDataAfterMove(fromLocation, toLocation);
}

public void VerifyUserDataAfterMove(string fromLocation, string toLocation)
{
FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation, (s) => API.ShowMsgBox(s));
FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation, (s) => PublicApi.Instance.ShowMsgBox(s));
}

public void CreateShortcuts()
Expand Down Expand Up @@ -150,12 +146,12 @@ public void PreStartCleanUpAfterPortabilityUpdate()
// delete it and prompt the user to pick the portable data location
if (File.Exists(roamingDataDeleteFilePath))
{
FilesFolders.RemoveFolderIfExists(roamingDataDir, (s) => API.ShowMsgBox(s));
FilesFolders.RemoveFolderIfExists(roamingDataDir, (s) => PublicApi.Instance.ShowMsgBox(s));

if (API.ShowMsgBox(API.GetTranslation("moveToDifferentLocation"),
if (PublicApi.Instance.ShowMsgBox(Localize.moveToDifferentLocation(),
string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
FilesFolders.OpenPath(Constant.RootDirectory, (s) => API.ShowMsgBox(s));
FilesFolders.OpenPath(Constant.RootDirectory, (s) => PublicApi.Instance.ShowMsgBox(s));

Environment.Exit(0);
}
Expand All @@ -164,9 +160,9 @@ public void PreStartCleanUpAfterPortabilityUpdate()
// delete it and notify the user about it.
else if (File.Exists(portableDataDeleteFilePath))
{
FilesFolders.RemoveFolderIfExists(portableDataDir, (s) => API.ShowMsgBox(s));
FilesFolders.RemoveFolderIfExists(portableDataDir, (s) => PublicApi.Instance.ShowMsgBox(s));

API.ShowMsgBox(API.GetTranslation("shortcutsUninstallerCreated"));
PublicApi.Instance.ShowMsgBox(Localize.shortcutsUninstallerCreated());
}
}

Expand All @@ -177,8 +173,7 @@ public bool CanUpdatePortability()

if (roamingLocationExists && portableLocationExists)
{
API.ShowMsgBox(string.Format(API.GetTranslation("userDataDuplicated"),
DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine));
PublicApi.Instance.ShowMsgBox(Localize.userDataDuplicated(DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine));

return false;
}
Expand Down
23 changes: 9 additions & 14 deletions Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Infrastructure.Http;
using Flow.Launcher.Plugin;

Expand All @@ -18,13 +17,9 @@ public record CommunityPluginSource(string ManifestFileUrl)
{
private static readonly string ClassName = nameof(CommunityPluginSource);

// We should not initialize API in static constructor because it will create another API instance
private static IPublicAPI api = null;
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();

private string latestEtag = "";

private List<UserPlugin> plugins = new();
private List<UserPlugin> plugins = [];

private static readonly JsonSerializerOptions PluginStoreItemSerializationOption = new()
{
Expand All @@ -41,7 +36,7 @@ public record CommunityPluginSource(string ManifestFileUrl)
/// </remarks>
public async Task<List<UserPlugin>> FetchAsync(CancellationToken token)
{
API.LogInfo(ClassName, $"Loading plugins from {ManifestFileUrl}");
PublicApi.Instance.LogInfo(ClassName, $"Loading plugins from {ManifestFileUrl}");

var request = new HttpRequestMessage(HttpMethod.Get, ManifestFileUrl);

Expand All @@ -59,40 +54,40 @@ public async Task<List<UserPlugin>> FetchAsync(CancellationToken token)
.ConfigureAwait(false);
latestEtag = response.Headers.ETag?.Tag;

API.LogInfo(ClassName, $"Loaded {plugins.Count} plugins from {ManifestFileUrl}");
PublicApi.Instance.LogInfo(ClassName, $"Loaded {plugins.Count} plugins from {ManifestFileUrl}");
return plugins;
}
else if (response.StatusCode == HttpStatusCode.NotModified)
{
API.LogInfo(ClassName, $"Resource {ManifestFileUrl} has not been modified.");
PublicApi.Instance.LogInfo(ClassName, $"Resource {ManifestFileUrl} has not been modified.");
return plugins;
}
else
{
API.LogWarn(ClassName, $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}");
PublicApi.Instance.LogWarn(ClassName, $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}");
return null;
}
}
catch (OperationCanceledException) when (token.IsCancellationRequested)
{
API.LogDebug(ClassName, $"Fetching from {ManifestFileUrl} was cancelled by caller.");
PublicApi.Instance.LogDebug(ClassName, $"Fetching from {ManifestFileUrl} was cancelled by caller.");
return null;
}
catch (TaskCanceledException)
{
// Likely an HttpClient timeout or external cancellation not requested by our token
API.LogWarn(ClassName, $"Fetching from {ManifestFileUrl} timed out.");
PublicApi.Instance.LogWarn(ClassName, $"Fetching from {ManifestFileUrl} timed out.");
return null;
}
catch (Exception e)
{
if (e is HttpRequestException or WebException or SocketException || e.InnerException is TimeoutException)
{
API.LogException(ClassName, $"Check your connection and proxy settings to {ManifestFileUrl}.", e);
PublicApi.Instance.LogException(ClassName, $"Check your connection and proxy settings to {ManifestFileUrl}.", e);
}
else
{
API.LogException(ClassName, "Error Occurred", e);
PublicApi.Instance.LogException(ClassName, "Error Occurred", e);
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Linq;
using System.Windows;
using System.Windows.Forms;
using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
using Flow.Launcher.Plugin.SharedCommands;
Expand All @@ -15,7 +14,7 @@ public abstract class AbstractPluginEnvironment
{
private static readonly string ClassName = nameof(AbstractPluginEnvironment);

protected readonly IPublicAPI API = Ioc.Default.GetRequiredService<IPublicAPI>();
protected readonly IPublicAPI API = PublicApi.Instance;

internal abstract string Language { get; }

Expand Down Expand Up @@ -58,15 +57,10 @@ internal IEnumerable<PluginPair> Setup()
return SetPathForPluginPairs(PluginsSettingsFilePath, Language);
}

var noRuntimeMessage = string.Format(
API.GetTranslation("runtimePluginInstalledChooseRuntimePrompt"),
Language,
EnvName,
Environment.NewLine
);
var noRuntimeMessage = Localize.runtimePluginInstalledChooseRuntimePrompt(Language, EnvName, Environment.NewLine);
if (API.ShowMsgBox(noRuntimeMessage, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No)
{
var msg = string.Format(API.GetTranslation("runtimePluginChooseRuntimeExecutable"), EnvName);
var msg = Localize.runtimePluginChooseRuntimeExecutable(EnvName);

var selectedFile = GetFileFromDialog(msg, FileDialogFilter);

Expand All @@ -77,12 +71,7 @@ internal IEnumerable<PluginPair> Setup()
// Nothing selected because user pressed cancel from the file dialog window
else
{
var forceDownloadMessage = string.Format(
API.GetTranslation("runtimeExecutableInvalidChooseDownload"),
Language,
EnvName,
Environment.NewLine
);
var forceDownloadMessage = Localize.runtimeExecutableInvalidChooseDownload(Language, EnvName, Environment.NewLine);

// Let users select valid path or choose to download
while (string.IsNullOrEmpty(selectedFile))
Expand Down Expand Up @@ -120,7 +109,7 @@ internal IEnumerable<PluginPair> Setup()
}
else
{
API.ShowMsgBox(string.Format(API.GetTranslation("runtimePluginUnableToSetExecutablePath"), Language));
API.ShowMsgBox(Localize.runtimePluginUnableToSetExecutablePath(Language));
API.LogError(ClassName,
$"Not able to successfully set {EnvName} path, setting's plugin executable path variable is still an empty string.",
$"{Language}Environment");
Expand Down Expand Up @@ -248,7 +237,7 @@ private static bool IsUsingRoamingPath(string filePath)
private static string GetUpdatedEnvironmentPath(string filePath)
{
var index = filePath.IndexOf(DataLocation.PluginEnvironments);

// get the substring after "Environments" because we can not determine it dynamically
var executablePathSubstring = filePath[(index + DataLocation.PluginEnvironments.Length)..];
return $"{DataLocation.PluginEnvironmentsPath}{executablePathSubstring}";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ internal override void InstallEnvironment()
}
catch (System.Exception e)
{
API.ShowMsgError(API.GetTranslation("failToInstallPythonEnv"));
API.ShowMsgError(Localize.failToInstallPythonEnv());
API.LogException(ClassName, "Failed to install Python environment", e);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ internal override void InstallEnvironment()
}
catch (System.Exception e)
{
API.ShowMsgError(API.GetTranslation("failToInstallTypeScriptEnv"));
API.ShowMsgError(Localize.failToInstallTypeScriptEnv());
API.LogException(ClassName, "Failed to install TypeScript environment", e);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ internal override void InstallEnvironment()
}
catch (System.Exception e)
{
API.ShowMsgError(API.GetTranslation("failToInstallTypeScriptEnv"));
API.ShowMsgError(Localize.failToInstallTypeScriptEnv());
API.LogException(ClassName, "Failed to install TypeScript environment", e);
}
});
Expand Down
11 changes: 3 additions & 8 deletions Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Plugin;
using Flow.Launcher.Infrastructure;

Expand All @@ -23,10 +22,6 @@ public static class PluginsManifest
private static DateTime lastFetchedAt = DateTime.MinValue;
private static readonly TimeSpan fetchTimeout = TimeSpan.FromMinutes(2);

// We should not initialize API in static constructor because it will create another API instance
private static IPublicAPI api = null;
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();

public static List<UserPlugin> UserPlugins { get; private set; }

public static async Task<bool> UpdateManifestAsync(bool usePrimaryUrlOnly = false, CancellationToken token = default)
Expand Down Expand Up @@ -67,7 +62,7 @@ public static async Task<bool> UpdateManifestAsync(bool usePrimaryUrlOnly = fals
}
catch (Exception e)
{
API.LogException(ClassName, "Http request failed", e);
PublicApi.Instance.LogException(ClassName, "Http request failed", e);
}
finally
{
Expand All @@ -90,12 +85,12 @@ private static bool IsMinimumAppVersionSatisfied(UserPlugin plugin, SemanticVers
}
catch (Exception e)
{
API.LogException(ClassName, $"Failed to parse the minimum app version {plugin.MinimumAppVersion} for plugin {plugin.Name}. "
PublicApi.Instance.LogException(ClassName, $"Failed to parse the minimum app version {plugin.MinimumAppVersion} for plugin {plugin.Name}. "
+ "Plugin excluded from manifest", e);
return false;
}

API.LogInfo(ClassName, $"Plugin {plugin.Name} requires minimum Flow Launcher version {plugin.MinimumAppVersion}, "
PublicApi.Instance.LogInfo(ClassName, $"Plugin {plugin.Name} requires minimum Flow Launcher version {plugin.MinimumAppVersion}, "
+ $"but current version is {Constant.Version}. Plugin excluded from manifest.");

return false;
Expand Down
Loading
Loading