-
-
Notifications
You must be signed in to change notification settings - Fork 442
Add Default Browser & File Explorer & New Profile Translation & Ignore index change for -1 #3988
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🥷 Code experts: onesounds, taooceros Jack251970, onesounds have most 👩💻 activity in the files. See details
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame:
Activity based on git-commit:
Knowledge based on git-blame: ✨ Comment |
Be a legend 🏆 by adding a before and after screenshot of the changes you made, especially if they are around UI/UX. |
📝 WalkthroughWalkthroughIntroduces DisplayName properties with translation-based values for browser and file manager settings, adds OnDisplayNameChanged triggers, centralizes file selection via Win32Helper.SelectFile, updates XAML bindings to DisplayName, adjusts selection index guards, removes duplicated helper methods from viewmodels, and adds new language resources. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant View as SelectBrowser/FileManager Window
participant CodeBehind as XAML Code-Behind
participant Helper as Win32Helper
participant Dialog as OpenFileDialog
User->>View: Click "Browse..."
View->>CodeBehind: btnBrowseFile_Click
CodeBehind->>Helper: SelectFile()
activate Helper
Helper->>Dialog: ShowDialog()
alt User selects file and confirms
Dialog-->>Helper: File path
Helper-->>CodeBehind: selectedFilePath
CodeBehind->>View: Update PathTextBox, focus
else Cancel
Dialog-->>Helper: Empty
Helper-->>CodeBehind: ""
CodeBehind->>View: No change
end
deactivate Helper
sequenceDiagram
autonumber
participant SettingsVM as SettingsPaneGeneralViewModel
participant BrowserUS as CustomBrowserViewModel
participant ExplorerUS as CustomExplorerViewModel
participant Ioc as Ioc.Default
participant API as IPublicAPI
SettingsVM->>BrowserUS: OnDisplayNameChanged()
BrowserUS->>BrowserUS: OnPropertyChanged(DisplayName)
SettingsVM->>ExplorerUS: OnDisplayNameChanged()
ExplorerUS->>ExplorerUS: OnPropertyChanged(DisplayName)
note over BrowserUS,ExplorerUS: DisplayName getters resolve translations
BrowserUS->>Ioc: Resolve IPublicAPI (lazy)
Ioc-->>BrowserUS: API instance
BrowserUS->>API: GetTranslation("defaultBrowser_default") when Name == "Default"
ExplorerUS->>Ioc: Resolve IPublicAPI (lazy)
Ioc-->>ExplorerUS: API instance
ExplorerUS->>API: GetTranslation("fileManagerExplorer") when Name == "Explorer"
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR improves the user experience for custom browser and file manager settings by adding proper translations, fixing UI binding issues, and preventing index errors when items are removed.
- Adds translations for "Default Browser", "File Explorer", and "New Profile" to replace hardcoded English strings
- Fixes index validation to prevent crashes when selected items are removed (-1 index handling)
- Refactors duplicated file selection code into a centralized utility method
Reviewed Changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.
Show a summary per file
File | Description |
---|---|
Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs | Adds index validation and uses translated "New Profile" text |
Flow.Launcher/ViewModel/SelectBrowserViewModel.cs | Adds index validation and uses translated "New Profile" text |
Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml | Updates UI bindings to use DisplayName instead of Name |
Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs | Triggers display name updates when language changes |
Flow.Launcher/SelectFileManagerWindow.xaml.cs | Uses centralized Win32Helper.SelectFile() method |
Flow.Launcher/SelectFileManagerWindow.xaml | Updates ComboBox binding to use DisplayName |
Flow.Launcher/SelectBrowserWindow.xaml.cs | Uses centralized Win32Helper.SelectFile() method |
Flow.Launcher/SelectBrowserWindow.xaml | Updates ComboBox binding to use DisplayName |
Flow.Launcher/Languages/en.xaml | Adds translation keys for file explorer, default browser, and new profile |
Flow.Launcher.Infrastructure/Win32Helper.cs | Adds centralized SelectFile() utility method |
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs | Adds DisplayName property with translation support |
Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs | Adds DisplayName property with translation support |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs (2)
68-76
: Fix crash when Path is null/empty in IsFileManagerValidPath.IsPathRooted(null) throws. New profiles (no path yet) will hit this in SaveSettings.
private static bool IsFileManagerValid(string path) { - if (string.Equals(path, "explorer", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(path, "explorer", StringComparison.OrdinalIgnoreCase)) return true; + if (string.IsNullOrWhiteSpace(path)) + return false; + if (Path.IsPathRooted(path)) { return File.Exists(path); }
113-121
: Deleting the last item leaves invalid selectionIf the last profile is removed, you set index to 0 while the collection is empty; later access to CustomExplorer will throw.
[RelayCommand] private void Delete() { var currentIndex = SelectedCustomExplorerIndex; - if (currentIndex >= 0 && currentIndex < CustomExplorers.Count) + if (currentIndex >= 0 && currentIndex < CustomExplorers.Count) { + // Prevent removing the last remaining profile + if (CustomExplorers.Count <= 1) + return; + CustomExplorers.RemoveAt(currentIndex); - SelectedCustomExplorerIndex = currentIndex > 0 ? currentIndex - 1 : 0; + SelectedCustomExplorerIndex = Math.Min(currentIndex, CustomExplorers.Count - 1); } }Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
19-22
: Propagate change notifications from OpenInTab to OpenInNewWindowOpenInNewWindow is computed; without raising PropertyChanged when OpenInTab changes, bindings to OpenInNewWindow won't update.
-public bool OpenInTab { get; set; } = true; -[JsonIgnore] -public bool OpenInNewWindow => !OpenInTab; +private bool openInTab = true; +public bool OpenInTab +{ + get => openInTab; + set + { + if (openInTab == value) return; + openInTab = value; + OnPropertyChanged(nameof(OpenInTab)); + OnPropertyChanged(nameof(OpenInNewWindow)); + } +} +[JsonIgnore] +public bool OpenInNewWindow => !openInTab;
🧹 Nitpick comments (11)
Flow.Launcher.Infrastructure/Win32Helper.cs (1)
910-918
: Make the file dialog modal to the owner and expose basic options.Current dialog isn’t owned, so it may appear behind the window; also no way to set title/filter/initial dir. Add optional parameters and call the owner overload.
-public static string SelectFile() +public static string SelectFile( + System.Windows.Window? owner = null, + string? title = null, + string? filter = null, + string? initialDirectory = null) { - var dlg = new OpenFileDialog(); - var result = dlg.ShowDialog(); + var dlg = new OpenFileDialog + { + Title = title ?? dlg?.Title, + Filter = filter ?? string.Empty, + InitialDirectory = initialDirectory ?? string.Empty, + CheckFileExists = true, + CheckPathExists = true, + Multiselect = false + }; + var result = owner is null ? dlg.ShowDialog() : dlg.ShowDialog(owner); if (result == true) return dlg.FileName; return string.Empty; }Flow.Launcher/SelectFileManagerWindow.xaml.cs (2)
34-38
: Use the Uri overload of OpenUrl.Avoids unnecessary string conversion.
- App.API.OpenUrl(e.Uri.AbsoluteUri); + App.API.OpenUrl(e.Uri);
40-51
: Own the file dialog and avoid fragile FindName traversal.Pass this as owner (ensures modality/foreground) and use the generated PathTextBox field.
- var selectedFilePath = Win32Helper.SelectFile(); + var selectedFilePath = Win32Helper.SelectFile(this); @@ - if (!string.IsNullOrEmpty(selectedFilePath)) - { - var path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); - path.Text = selectedFilePath; - path.Focus(); - ((Button)sender).Focus(); - } + if (!string.IsNullOrEmpty(selectedFilePath)) + { + PathTextBox.Text = selectedFilePath; + PathTextBox.Focus(); + ((Button)sender).Focus(); + }Flow.Launcher/SelectBrowserWindow.xaml.cs (1)
33-44
: Same here: own the dialog and avoid visual-tree lookup.- var selectedFilePath = Win32Helper.SelectFile(); + var selectedFilePath = Win32Helper.SelectFile(this); @@ - if (!string.IsNullOrEmpty(selectedFilePath)) - { - var path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); - path.Text = selectedFilePath; - path.Focus(); - ((Button)sender).Focus(); - } + if (!string.IsNullOrEmpty(selectedFilePath)) + { + PathTextBox.Text = selectedFilePath; + PathTextBox.Focus(); + ((Button)sender).Focus(); + }Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs (2)
222-224
: Refresh all profiles’ DisplayName, not just the selected ones.Calling through Settings.CustomExplorer/Browser only updates one item and risks index issues. Notify all list items instead.
-OnPropertyChanged(nameof(AlwaysPreviewToolTip)); -Settings.CustomExplorer.OnDisplayNameChanged(); -Settings.CustomBrowser.OnDisplayNameChanged(); +OnPropertyChanged(nameof(AlwaysPreviewToolTip)); +foreach (var e in Settings.CustomExplorerList) e.OnDisplayNameChanged(); +foreach (var b in Settings.CustomBrowserList) b.OnDisplayNameChanged();
333-350
: Consider centralizing file pickers on Win32Helper.SelectFile.This WinForms OpenFileDialog can be replaced with the shared helper for consistency and less duplication.
Flow.Launcher/ViewModel/SelectBrowserViewModel.cs (1)
20-27
: Raise PropertyChanged for SelectedCustomBrowserIndex as well.Without notifying the index property, bindings to SelectedIndex may not update after programmatic changes (e.g., Add/Delete).
- if (selectedCustomBrowserIndex != value) - { - selectedCustomBrowserIndex = value; - OnPropertyChanged(nameof(CustomBrowser)); - } + if (selectedCustomBrowserIndex != value) + { + selectedCustomBrowserIndex = value; + OnPropertyChanged(); // SelectedCustomBrowserIndex + OnPropertyChanged(nameof(CustomBrowser)); + }Optional: clamp out-of-range values instead of ignoring negatives for extra robustness.
Flow.Launcher/Languages/en.xaml (1)
501-502
: Naming nit: consider neutral key for reusedefaultBrowser_new_profile is used by file-manager too. A neutral key like newProfile (or fileManager_new_profile + defaultBrowser_new_profile) would be clearer for translators.
Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs (1)
24-26
: Guard is good; also raise SelectedCustomExplorerIndex changeIgnoring -1 avoids noisy updates. Also raise PropertyChanged for SelectedCustomExplorerIndex so any selection bindings refresh.
- if (selectedCustomExplorerIndex != value) + if (selectedCustomExplorerIndex != value) { selectedCustomExplorerIndex = value; + OnPropertyChanged(nameof(SelectedCustomExplorerIndex)); OnPropertyChanged(nameof(CustomExplorer)); }Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs (1)
14-16
: Make comparison explicit and culture-safeBe explicit about comparison semantics.
-[JsonIgnore] -public string DisplayName => Name == "Explorer" ? API.GetTranslation("fileManagerExplorer") : Name; +[JsonIgnore] +public string DisplayName => + string.Equals(Name, "Explorer", StringComparison.Ordinal) + ? API.GetTranslation("fileManagerExplorer") + : Name;Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
14-16
: DisplayName logic: OK; make comparison explicitSame nit on string comparison semantics as Explorer.
-[JsonIgnore] -public string DisplayName => Name == "Default" ? API.GetTranslation("defaultBrowser_default") : Name; +[JsonIgnore] +public string DisplayName => + string.Equals(Name, "Default", StringComparison.Ordinal) + ? API.GetTranslation("defaultBrowser_default") + : Name;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs
(2 hunks)Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs
(2 hunks)Flow.Launcher.Infrastructure/Win32Helper.cs
(2 hunks)Flow.Launcher/Languages/en.xaml
(2 hunks)Flow.Launcher/SelectBrowserWindow.xaml
(1 hunks)Flow.Launcher/SelectBrowserWindow.xaml.cs
(2 hunks)Flow.Launcher/SelectFileManagerWindow.xaml
(1 hunks)Flow.Launcher/SelectFileManagerWindow.xaml.cs
(2 hunks)Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs
(2 hunks)Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml
(2 hunks)Flow.Launcher/ViewModel/SelectBrowserViewModel.cs
(2 hunks)Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs
(2 hunks)
🧰 Additional context used
🧠 Learnings (8)
📚 Learning: 2024-11-03T07:40:11.014Z
Learnt from: Yusyuriv
PR: Flow-Launcher/Flow.Launcher#3057
File: Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs:0-0
Timestamp: 2024-11-03T07:40:11.014Z
Learning: In Flow Launcher, when using Windows Forms dialogs (e.g., in `JsonRPCPluginSettings.cs`), path validation is enabled by default in `OpenFileDialog` and `FolderBrowserDialog`, preventing users from selecting invalid paths, but it's possible to opt out of this validation on individual dialogs.
Applied to files:
Flow.Launcher/SelectFileManagerWindow.xaml.cs
Flow.Launcher.Infrastructure/Win32Helper.cs
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-09-05T11:56:27.267Z
Learnt from: Jack251970
PR: Flow-Launcher/Flow.Launcher#3593
File: Flow.Launcher/HotkeyControlDialog.xaml:6-6
Timestamp: 2025-09-05T11:56:27.267Z
Learning: In Flow.Launcher's migration to iNKORE.UI.WPF.Modern UI framework, dialog resource keys like PopuBGColor, PopupButtonAreaBGColor, PopupButtonAreaBorderColor, and PopupTextColor are provided by the iNKORE.UI.WPF.Modern framework itself, not defined locally in the codebase theme files.
Applied to files:
Flow.Launcher/SelectFileManagerWindow.xaml.cs
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-06-08T14:12:21.348Z
Learnt from: Jack251970
PR: Flow-Launcher/Flow.Launcher#3672
File: Flow.Launcher/MainWindow.xaml.cs:244-247
Timestamp: 2025-06-08T14:12:21.348Z
Learning: In Flow.Launcher, App.NotifyIcon is created before MainWindow creation, so null checks for App.NotifyIcon are not necessary when accessing it from MainWindow code.
Applied to files:
Flow.Launcher/SelectFileManagerWindow.xaml.cs
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-06-08T14:12:12.842Z
Learnt from: Jack251970
PR: Flow-Launcher/Flow.Launcher#3672
File: Flow.Launcher/MainWindow.xaml.cs:318-318
Timestamp: 2025-06-08T14:12:12.842Z
Learning: In Flow.Launcher, the App.NotifyIcon static property is initialized in the App class before MainWindow creation, so null checks are not needed when accessing App.NotifyIcon in MainWindow lifecycle methods.
Applied to files:
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-07-21T09:19:49.684Z
Learnt from: Jack251970
PR: Flow-Launcher/Flow.Launcher#3854
File: Flow.Launcher/App.xaml.cs:246-262
Timestamp: 2025-07-21T09:19:49.684Z
Learning: In Flow Launcher's App.xaml.cs, the asynchronous plugin initialization task (containing AbstractPluginEnvironment.PreStartPluginExecutablePathUpdate, PluginManager.LoadPlugins, PluginManager.InitializePluginsAsync, and AutoPluginUpdates) does not require additional try-catch error handling according to maintainer Jack251970, as these operations are designed to handle exceptions internally.
Applied to files:
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-03-28T21:20:54.978Z
Learnt from: onesounds
PR: Flow-Launcher/Flow.Launcher#3394
File: Flow.Launcher/Themes/Darker Glass.xaml:134-141
Timestamp: 2025-03-28T21:20:54.978Z
Learning: In WPF applications like Flow.Launcher, Border elements cannot directly display text content and require a child element like TextBlock to handle text rendering. This separation of concerns (Border for visual container styling, TextBlock for text display) follows WPF best practices and provides greater styling flexibility.
Applied to files:
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-04-23T15:14:49.986Z
Learnt from: onesounds
PR: Flow-Launcher/Flow.Launcher#0
File: :0-0
Timestamp: 2025-04-23T15:14:49.986Z
Learning: In WPF applications like Flow.Launcher, font styling should be applied using implicit styles instead of setting the FontFamily property on individual controls. Define implicit styles in a ResourceDictionary using <Style TargetType="{x:Type Button}"> format and merge it into App.xaml, which automatically applies the font to all instances of the control type while still allowing explicit overrides where needed.
Applied to files:
Flow.Launcher/SelectBrowserWindow.xaml.cs
📚 Learning: 2025-06-24T19:06:48.344Z
Learnt from: Koisu-unavailable
PR: Flow-Launcher/Flow.Launcher#3770
File: Flow.Launcher/ViewModel/MainViewModel.cs:0-0
Timestamp: 2025-06-24T19:06:48.344Z
Learning: In Flow.Launcher's Explorer plugin results, the SubTitle property always contains the directory containing the file. For file results, Title contains the filename and SubTitle contains the parent directory. For directory results, SubTitle contains the directory path itself.
Applied to files:
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs
🧬 Code graph analysis (7)
Flow.Launcher/SelectFileManagerWindow.xaml.cs (4)
Flow.Launcher/App.xaml.cs (2)
App
(31-447)App
(56-116)Flow.Launcher/PublicAPIInstance.cs (2)
OpenUrl
(464-467)OpenUrl
(469-472)Flow.Launcher/SelectBrowserWindow.xaml.cs (1)
btnBrowseFile_Click
(33-44)Flow.Launcher.Infrastructure/Win32Helper.cs (2)
Win32Helper
(31-921)SelectFile
(910-918)
Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs (3)
Flow.Launcher.Infrastructure/UserSettings/Settings.cs (1)
Settings
(16-616)Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
OnDisplayNameChanged
(37-40)Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs (1)
OnDisplayNameChanged
(33-36)
Flow.Launcher/SelectBrowserWindow.xaml.cs (1)
Flow.Launcher.Infrastructure/Win32Helper.cs (2)
Win32Helper
(31-921)SelectFile
(910-918)
Flow.Launcher/ViewModel/SelectBrowserViewModel.cs (2)
Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs (1)
CustomBrowser
(6-52)Flow.Launcher/App.xaml.cs (2)
App
(31-447)App
(56-116)
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs (1)
Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
OnDisplayNameChanged
(37-40)
Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs (1)
OnDisplayNameChanged
(33-36)
Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs (1)
Flow.Launcher/App.xaml.cs (2)
App
(31-447)App
(56-116)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: gitStream.cm
- GitHub Check: build
🔇 Additional comments (10)
Flow.Launcher/SelectFileManagerWindow.xaml (1)
105-105
: LGTM: bind to DisplayName.Switching the item template to DisplayName matches the new localization model.
Flow.Launcher/SelectBrowserWindow.xaml (1)
95-95
: LGTM: DisplayName binding.This aligns with translated labels for “Default”.
Flow.Launcher/ViewModel/SelectBrowserViewModel.cs (1)
53-54
: LGTM: translated default name for new profile.Good use of defaultBrowser_new_profile.
Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml (2)
406-406
: LGTM: use DisplayName for default file manager.
418-418
: LGTM: use DisplayName for default browser.Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs (1)
108-109
: LGTM: localized default nameUsing App.API.GetTranslation("defaultBrowser_new_profile") aligns with the new resource keys.
If you keep the browser‑prefixed key here long‑term, ensure translators get context that it's also used for file manager profiles.
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs (2)
9-12
: Lazy API resolver: OKStatic lazy resolve via Ioc.Default avoids multiple IPublicAPI instances.
32-36
: DisplayName change notifier: OKFlow.Launcher/Languages/en.xaml (1)
490-490
: Ensure localization keys exist in all non-en locale XAML filesConfirm these keys are present in every file under Flow.Launcher/Languages/*.xaml (e.g., es.xaml): fileManagerExplorer, defaultBrowser_default, defaultBrowser_new_profile. If any are missing, add translations or an English fallback and re-run the verification script; attach the script output.
Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs (1)
1-2
: JsonIgnore (System.Text.Json) is correct — settings use System.Text.JsonFlow.Launcher persists settings with System.Text.Json (see Flow.Launcher.Infrastructure/Storage/JsonStorage.cs), so the System.Text.Json.Serialization.JsonIgnore on Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs is appropriate; Newtonsoft.Json only appears in package locks.
Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
…translation Add Default Browser & File Explorer & New Profile Translation & Ignore index change for -1
…ser_explorer_translation Add Default Browser & File Explorer & New Profile Translation & Ignore index change for -1
CHANGES
Fix #1330, #2758
TEST