From 9dfc47590ab833f13c2504c322784aa7e9c410dd Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 4 Jun 2025 21:33:44 -0400 Subject: [PATCH 001/107] Code Quality: Fixed typo in string resources --- src/Files.App/Strings/en-US/Resources.resw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 31013adb5b84..8a5b39ff452e 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4233,7 +4233,7 @@ Show status center button - Status center progress ping + Status center progress ring Screen reader name for the status center progress ring From 6b5bf5bfa0ef204e3de043bf113372461d30a9cc Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Mon, 9 Jun 2025 16:23:34 -0400 Subject: [PATCH 002/107] Feature: Added support for Windows App Actions (#17178) --- Directory.Build.props | 2 +- .../Data/Items/NavigationBarSuggestionItem.cs | 13 ++++ src/Files.App/Extensions/ActionManager.cs | 56 +++++++++++++++ .../UserControls/NavigationToolbar.xaml | 1 + .../UserControls/NavigationToolbar.xaml.cs | 44 +++++++++--- .../NavigationToolbarViewModel.cs | 70 +++++++++++++++---- 6 files changed, 160 insertions(+), 26 deletions(-) create mode 100644 src/Files.App/Extensions/ActionManager.cs diff --git a/Directory.Build.props b/Directory.Build.props index e8dea3960b24..1eaa9e68097e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ net9.0 10.0.22621.0 10.0.19041.0 - 10.0.22621.57 + 10.0.26100.67-preview $(TargetFrameworkVersion)-windows$(TargetWindowsVersion) diff --git a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs index dbc4fb8c8f90..12376354e783 100644 --- a/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs +++ b/src/Files.App/Data/Items/NavigationBarSuggestionItem.cs @@ -3,12 +3,17 @@ using Files.App.Controls; using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Media; +using Windows.AI.Actions.Hosting; namespace Files.App.Data.Items { [Obsolete("Remove once Omnibar goes out of experimental.")] public sealed partial class NavigationBarSuggestionItem : ObservableObject, IOmnibarTextMemberPathProvider { + private ImageSource? _ActionIconSource; + public ImageSource? ActionIconSource { get => _ActionIconSource; set => SetProperty(ref _ActionIconSource, value); } + private Style? _ThemedIconStyle; public Style? ThemedIconStyle { get => _ThemedIconStyle; set => SetProperty(ref _ThemedIconStyle, value); } @@ -47,6 +52,14 @@ public string? PrimaryDisplayPreMatched private set => SetProperty(ref _PrimaryDisplayPreMatched, value); } + + private ActionInstance? _ActionInstance; + public ActionInstance? ActionInstance + { + get => _ActionInstance; + set => SetProperty(ref _ActionInstance, value); + } + private string? _PrimaryDisplayMatched; public string? PrimaryDisplayMatched { diff --git a/src/Files.App/Extensions/ActionManager.cs b/src/Files.App/Extensions/ActionManager.cs new file mode 100644 index 000000000000..8928718ef6c9 --- /dev/null +++ b/src/Files.App/Extensions/ActionManager.cs @@ -0,0 +1,56 @@ +using System.Runtime.InteropServices; +using Windows.AI.Actions; +using Windows.AI.Actions.Hosting; +using Windows.Win32; +using Windows.Win32.Foundation; +using Windows.Win32.System.Com; +using WinRT; + +namespace Files.App.Extensions +{ + internal class ActionManager + { + internal static ActionManager Instance => _instance ??= new(); + + private static ActionManager? _instance; + + // NOTE: This Guid is subject to change in the future + private static readonly Guid IActionRuntimeIID = Guid.Parse("206EFA2C-C909-508A-B4B0-9482BE96DB9C"); + + // Public API usage (ActionCatalog) + private const string ActionRuntimeClsidStr = "C36FEF7E-35F3-4192-9F2C-AF1FD425FB85"; + + internal ActionEntityFactory EntityFactory => ActionRuntime.EntityFactory; + + internal ActionRuntime? ActionRuntime; + internal ActionCatalog ActionCatalog => ActionRuntime.ActionCatalog; + + private ActionManager() + { + ActionRuntime = CreateActionRuntime(); + } + + public static unsafe Windows.AI.Actions.ActionRuntime? CreateActionRuntime() + { + IntPtr abiPtr = default; + try + { + Guid classId = Guid.Parse(ActionRuntimeClsidStr); + Guid iid = IActionRuntimeIID; + + HRESULT hresult = PInvoke.CoCreateInstance(&classId, null, CLSCTX.CLSCTX_LOCAL_SERVER, &iid, (void**)&abiPtr); + Marshal.ThrowExceptionForHR((int)hresult); + + return MarshalInterface.FromAbi(abiPtr); + } + catch + { + return null; + } + finally + { + MarshalInspectable.DisposeAbi(abiPtr); + } + } + } +} \ No newline at end of file diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index cd42bde08434..30f1f6f82475 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -392,6 +392,7 @@ + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 1a42b1d0c61f..9d7751f1b88e 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -10,6 +10,7 @@ using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Navigation; +using Windows.AI.Actions.Hosting; using Windows.System; namespace Files.App.UserControls @@ -262,20 +263,41 @@ private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedE } else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) { - if (args.Item is not NavigationBarSuggestionItem item || item.Text is not { } commandText) + if (args.Item is not NavigationBarSuggestionItem item) return; - var command = Commands[commandText]; - if (command == Commands.None) - await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedResource(), - string.Format(Strings.InvalidCommandContent.GetLocalizedResource(), commandText)); - else if (!command.IsExecutable) - await DialogDisplayHelper.ShowDialogAsync(Strings.CommandNotExecutable.GetLocalizedResource(), - string.Format(Strings.CommandNotExecutableContent.GetLocalizedResource(), command.Code)); - else - await command.ExecuteAsync(); + // Try invoking built-in command + if (item.Text is { } commandText) + { + var command = Commands[commandText]; + if (command == Commands.None) + await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedResource(), + string.Format(Strings.InvalidCommandContent.GetLocalizedResource(), commandText)); + else if (!command.IsExecutable) + await DialogDisplayHelper.ShowDialogAsync(Strings.CommandNotExecutable.GetLocalizedResource(), + string.Format(Strings.CommandNotExecutableContent.GetLocalizedResource(), command.Code)); + else + await command.ExecuteAsync(); + + ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; + return; + } - ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; + // Try invoking Windows app action + if (ActionManager.Instance.ActionRuntime is not null && item.ActionInstance is ActionInstance actionInstance) + { + // Workaround for https://github.com/microsoft/App-Actions-On-Windows-Samples/issues/7 + var action = ActionManager.Instance.ActionRuntime.ActionCatalog.GetAllActions() + .FirstOrDefault(a => a.Id == actionInstance.Context.ActionId); + + if (action is not null) + { + var overload = action.GetOverloads().FirstOrDefault(); + await overload?.InvokeAsync(actionInstance.Context); + } + + ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; + } } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index b596888f2c54..f1f9c67aae72 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -11,8 +11,12 @@ using Microsoft.UI.Xaml.Input; using System.IO; using System.Windows.Input; +using Windows.AI.Actions; +using Windows.AI.Actions.Hosting; using Windows.ApplicationModel.DataTransfer; +using Microsoft.Windows.ApplicationModel.Resources; using Windows.UI.Text; +using Microsoft.UI.Xaml.Media.Imaging; namespace Files.App.ViewModels.UserControls { @@ -65,6 +69,8 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr // Properties + internal static ActionRuntime? ActionRuntime { get; private set; } + public ObservableCollection PathComponents { get; } = []; public ObservableCollection NavigationBarSuggestions { get; } = []; @@ -248,7 +254,6 @@ public bool IsOmnibarFocused _ = PopulateOmnibarSuggestionsForPathMode(); break; case OmnibarPaletteModeName: - if (OmnibarCommandPaletteModeSuggestionItems.Count is 0) PopulateOmnibarSuggestionsForCommandPaletteMode(); break; case OmnibarSearchModeName: @@ -1172,23 +1177,60 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() OmnibarCommandPaletteModeText ??= string.Empty; OmnibarCommandPaletteModeSuggestionItems.Clear(); - var suggestionItems = Commands.Where(command => - command.IsExecutable && - command.IsAccessibleGlobally && - (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) || - command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) - .Select(command => new NavigationBarSuggestionItem() + if (ContentPageContext.SelectedItems.Count == 1 && ContentPageContext.SelectedItem is not null && !ContentPageContext.SelectedItem.IsFolder) { - ThemedIconStyle = command.Glyph.ToThemedIconStyle(), - Glyph = command.Glyph.BaseGlyph, - Text = command.Code.ToString(), - PrimaryDisplay = command.Description, - HotKeys = command.HotKeys, - SearchText = OmnibarCommandPaletteModeText, - }); + var dispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread(); + + dispatcherQueue.TryEnqueue(() => + { + var selectedItemPath = ContentPageContext.SelectedItem.ItemPath; + var fileActionEntity = ActionManager.Instance.EntityFactory.CreateFileEntity(selectedItemPath); + var actions = ActionManager.Instance.ActionRuntime.ActionCatalog.GetActionsForInputs(new[] { fileActionEntity }); + + foreach (var action in actions.Where(a => a.Definition.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) + { + var newItem = new NavigationBarSuggestionItem + { + PrimaryDisplay = action.Definition.Description, + SearchText = OmnibarCommandPaletteModeText, + ActionInstance = action + }; + + if (Uri.TryCreate(action.Definition.IconFullPath, UriKind.RelativeOrAbsolute, out Uri? validUri)) + { + try + { + newItem.ActionIconSource = new BitmapImage(validUri); + } + catch (Exception) + { + } + } + + OmnibarCommandPaletteModeSuggestionItems.Add(newItem); + } + }); + } + + var suggestionItems = Commands + .Where(command => command.IsExecutable + && command.IsAccessibleGlobally + && (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) + || command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) + .Select(command => new NavigationBarSuggestionItem + { + ThemedIconStyle = command.Glyph.ToThemedIconStyle(), + Glyph = command.Glyph.BaseGlyph, + Text = command.Code.ToString(), + PrimaryDisplay = command.Description, + HotKeys = command.HotKeys, + SearchText = OmnibarCommandPaletteModeText, + }); foreach (var item in suggestionItems) + { OmnibarCommandPaletteModeSuggestionItems.Add(item); + } } [Obsolete("Remove once Omnibar goes out of experimental.")] From 083ef0ed401bcc1c7fa97cd5dfc148243d6efa7a Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 12 Jun 2025 23:18:53 +0900 Subject: [PATCH 003/107] Code Quality: Improved Omnibar UX 2 (#17157) Co-authored-by: Yair <39923744+yaira2@users.noreply.github.com> --- .../BreadcrumbBar/BreadcrumbBar.Properties.cs | 6 + .../BreadcrumbBar/BreadcrumbBar.xaml | 225 +++++++++--------- .../BreadcrumbBar/BreadcrumbBarItem.Events.cs | 15 ++ .../BreadcrumbBarItem.Properties.cs | 6 + .../BreadcrumbBar/BreadcrumbBarItem.cs | 2 + .../BreadcrumbBarItemAutomationPeer.cs | 13 +- .../BreadcrumbBar/BreadcrumbBarLayout.cs | 10 +- .../Omnibar/Omnibar.Events.cs | 17 +- src/Files.App.Controls/Omnibar/Omnibar.cs | 15 +- src/Files.App.Controls/Omnibar/Omnibar.xaml | 13 +- .../Omnibar/OmnibarMode.Events.cs | 2 + .../Omnibar/OmnibarMode.Properties.cs | 3 + .../Compress/BaseCompressArchiveAction.cs | 3 + .../Actions/Global/EditPathAction.cs | 3 + src/Files.App/Actions/Global/SearchAction.cs | 2 +- .../Actions/Open/OpenSettingsAction.cs | 3 + src/Files.App/Strings/en-US/Resources.resw | 9 + .../UserControls/NavigationToolbar.xaml | 13 +- .../UserControls/NavigationToolbar.xaml.cs | 28 ++- .../NavigationToolbarViewModel.cs | 22 +- 20 files changed, 261 insertions(+), 149 deletions(-) diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.Properties.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.Properties.cs index 36dca955a6c1..a02306d2a95c 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.Properties.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.Properties.cs @@ -15,5 +15,11 @@ public partial class BreadcrumbBar : Control [GeneratedDependencyProperty] public partial object? ItemTemplate { get; set; } + + [GeneratedDependencyProperty] + public partial string? EllipsisButtonToolTip { get; set; } + + [GeneratedDependencyProperty] + public partial string? RootItemToolTip { get; set; } } } diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.xaml b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.xaml index 213ab4cd8340..071c43d19e5a 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.xaml +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBar.xaml @@ -13,6 +13,7 @@ 8,0 16,0,8,0 2,0,0,0 + 32 2,2,2,2 2,2,2,2 @@ -55,8 +56,8 @@ x:Name="PART_RootBreadcrumbBarItem" Grid.Column="0" Padding="{StaticResource BreadcrumbBarRootItemPadding}" - AutomationProperties.AccessibilityView="Content" - CornerRadius="{StaticResource BreadcrumbBarRootItemCornerRadius}"> + CornerRadius="{StaticResource BreadcrumbBarRootItemCornerRadius}" + ItemToolTip="{TemplateBinding RootItemToolTip}"> @@ -64,8 +65,8 @@ x:Name="PART_EllipsisBreadcrumbBarItem" Grid.Column="1" Margin="{StaticResource BreadcrumbBarItemMargin}" - AutomationProperties.AccessibilityView="Content" IsEllipsis="True" + ToolTipService.ToolTip="{TemplateBinding EllipsisButtonToolTip}" Visibility="Collapsed"> @@ -96,7 +97,7 @@ - + @@ -114,120 +115,116 @@ x:Name="PART_LayoutRoot" TabFocusNavigation="Once" XYFocusKeyboardNavigation="Enabled"> - - - - - - - - - - + + + + AutomationProperties.Name="Chevron" + Background="{TemplateBinding Background}" + BorderBrush="{TemplateBinding BorderBrush}" + BorderThickness="{TemplateBinding BorderThickness}" + CornerRadius="{StaticResource BreadcrumbBarChevronCornerRaduis}" + Style="{StaticResource BreadcrumbBarItemChevronButtonStyle}" + ToolTipService.ToolTip="{TemplateBinding ChevronToolTip}" + UseSystemFocusVisuals="True"> + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Events.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Events.cs index b0f60ecaf587..3e067946cf4f 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Events.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Events.cs @@ -1,6 +1,9 @@ // Copyright (c) Files Community // Licensed under the MIT License. +using Microsoft.UI.Xaml.Input; +using Windows.System; + namespace Files.App.Controls { public partial class BreadcrumbBarItem @@ -15,6 +18,18 @@ private void ItemChevronButton_Click(object sender, RoutedEventArgs e) FlyoutBase.ShowAttachedFlyout(_itemChevronButton); } + private void ItemChevronButton_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + { + if (e.Key == VirtualKey.Down) + FlyoutBase.ShowAttachedFlyout(_itemChevronButton); + } + + private void ItemContentButton_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + { + if (e.Key == VirtualKey.Down) + FlyoutBase.ShowAttachedFlyout(_itemChevronButton); + } + private void ChevronDropDownMenuFlyout_Opening(object? sender, object e) { if (_ownerRef is null || diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Properties.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Properties.cs index 7b1709d84b26..47cae0a537a4 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Properties.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.Properties.cs @@ -13,6 +13,12 @@ public partial class BreadcrumbBarItem [GeneratedDependencyProperty] public partial bool IsLastItem { get; set; } + [GeneratedDependencyProperty] + public partial string ItemToolTip { get; set; } + + [GeneratedDependencyProperty] + public partial string ChevronToolTip { get; set; } + partial void OnIsEllipsisChanged(bool newValue) { VisualStateManager.GoToState(this, newValue ? "ChevronCollapsed" : "ChevronVisible", true); diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.cs index f68d369105db..e7ba940b0153 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItem.cs @@ -47,7 +47,9 @@ protected override void OnApplyTemplate() VisualStateManager.GoToState(this, "ChevronCollapsed", true); _itemContentButton.Click += ItemContentButton_Click; + _itemContentButton.PreviewKeyDown += ItemContentButton_PreviewKeyDown; _itemChevronButton.Click += ItemChevronButton_Click; + _itemChevronButton.PreviewKeyDown += ItemChevronButton_PreviewKeyDown; _itemChevronDropDownMenuFlyout.Opening += ChevronDropDownMenuFlyout_Opening; _itemChevronDropDownMenuFlyout.Opened += ChevronDropDownMenuFlyout_Opened; _itemChevronDropDownMenuFlyout.Closed += ChevronDropDownMenuFlyout_Closed; diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItemAutomationPeer.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItemAutomationPeer.cs index 42d81617f28c..bddb74a7bf8f 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItemAutomationPeer.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarItemAutomationPeer.cs @@ -24,7 +24,7 @@ protected override string GetLocalizedControlTypeCore() protected override object GetPatternCore(PatternInterface patternInterface) { - if (patternInterface is PatternInterface.Invoke) + if (patternInterface is PatternInterface.ExpandCollapse or PatternInterface.Invoke) return this; return base.GetPatternCore(patternInterface); @@ -37,12 +37,15 @@ protected override string GetClassNameCore() protected override AutomationControlType GetAutomationControlTypeCore() { - return AutomationControlType.Button; + return AutomationControlType.SplitButton; } - /// - /// Sends a request to invoke the item associated with the automation peer. - /// + protected override bool IsControlElementCore() + { + return true; + } + + /// public void Invoke() { if (Owner is not BreadcrumbBarItem item) diff --git a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs index da0313988121..f1a0d2efcc25 100644 --- a/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs +++ b/src/Files.App.Controls/BreadcrumbBar/BreadcrumbBarLayout.cs @@ -33,13 +33,15 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si var accumulatedSize = new Size(0, 0); _availableSize = availableSize; + var indexAfterEllipsis = GetFirstIndexToRender(context); + // Go through all items and measure them - foreach (var item in context.Children) + for (int index = 0; index < context.Children.Count; index++) { - if (item is BreadcrumbBarItem breadcrumbItem) + if (context.Children[index] is BreadcrumbBarItem breadcrumbItem) { breadcrumbItem.Measure(availableSize); - accumulatedSize.Width += breadcrumbItem.DesiredSize.Width; + accumulatedSize.Width += index < indexAfterEllipsis ? 0: breadcrumbItem.DesiredSize.Width; accumulatedSize.Height = Math.Max(accumulatedSize.Height, breadcrumbItem.DesiredSize.Height); } } @@ -49,7 +51,7 @@ protected override Size MeasureOverride(NonVirtualizingLayoutContext context, Si _ellipsisButton ??= context.Children[0] as BreadcrumbBarItem; // Sets the ellipsis item's visibility based on whether the items are overflowing - EllipsisIsRendered = accumulatedSize.Width > availableSize.Width; + EllipsisIsRendered = indexAfterEllipsis is not 0; return accumulatedSize; } diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 9f33112c8ee0..4499c41ab5d4 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -22,6 +22,16 @@ private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs _previouslyFocusedElement = new(args.OldFocusedElement as UIElement); } + private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs args) + { + if (IsModeButtonPressed) + { + IsModeButtonPressed = false; + args.TryCancel(); + return; + } + } + private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) { IsFocused = true; @@ -70,7 +80,7 @@ private void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) { _textBoxSuggestionsListView.SelectedIndex = nextIndex; - ChooseSuggestionItem(_textBoxSuggestionsListView.SelectedItem); + ChooseSuggestionItem(_textBoxSuggestionsListView.SelectedItem, true); } } else if (e.Key == VirtualKey.Escape) @@ -127,5 +137,10 @@ private void AutoSuggestBoxSuggestionsListView_ItemClick(object sender, ItemClic ChooseSuggestionItem(e.ClickedItem); SubmitQuery(e.ClickedItem); } + + private void AutoSuggestBoxSuggestionsListView_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + _textBoxSuggestionsListView.ScrollIntoView(_textBoxSuggestionsListView.SelectedItem); + } } } diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index f4d29468e1ff..50c4eecacd43 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -33,6 +33,9 @@ public partial class Omnibar : Control private WeakReference _previouslyFocusedElement = new(null); + // NOTE: This is a workaround to keep Omnibar's focus on a mode button being clicked + internal bool IsModeButtonPressed { get; set; } + // Events public event TypedEventHandler? QuerySubmitted; @@ -71,11 +74,13 @@ protected override void OnApplyTemplate() SizeChanged += Omnibar_SizeChanged; _textBox.GettingFocus += AutoSuggestBox_GettingFocus; _textBox.GotFocus += AutoSuggestBox_GotFocus; + _textBox.LosingFocus += AutoSuggestBox_LosingFocus; _textBox.LostFocus += AutoSuggestBox_LostFocus; _textBox.KeyDown += AutoSuggestBox_KeyDown; _textBox.TextChanged += AutoSuggestBox_TextChanged; _textBoxSuggestionsPopup.GettingFocus += AutoSuggestBoxSuggestionsPopup_GettingFocus; _textBoxSuggestionsListView.ItemClick += AutoSuggestBoxSuggestionsListView_ItemClick; + _textBoxSuggestionsListView.SelectionChanged += AutoSuggestBoxSuggestionsListView_SelectionChanged; // Set the default width _textBoxSuggestionsContainerBorder.Width = ActualWidth; @@ -148,6 +153,11 @@ protected void ChangeMode(OmnibarMode? oldMode, OmnibarMode newMode) VisualStateManager.GoToState(newMode, "Focused", true); newMode.IsTabStop = false; + + _textBox.PlaceholderText = newMode.PlaceholderText ?? string.Empty; + _textBoxSuggestionsListView.ItemTemplate = newMode.SuggestionItemTemplate; + _textBoxSuggestionsListView.ItemsSource = newMode.SuggestionItemsSource; + if (newMode.IsAutoFocusEnabled) { _textBox.Focus(FocusState.Pointer); @@ -196,12 +206,13 @@ public bool TryToggleIsSuggestionsPopupOpen(bool wantToOpen) return false; } - public void ChooseSuggestionItem(object obj) + public void ChooseSuggestionItem(object obj, bool isOriginatedFromArrowKey = false) { if (CurrentSelectedMode is null) return; - if (CurrentSelectedMode.UpdateTextOnSelect) + if (CurrentSelectedMode.UpdateTextOnSelect || + (isOriginatedFromArrowKey && CurrentSelectedMode.UpdateTextOnArrowKeys)) { _textChangeReason = OmnibarTextChangeReason.SuggestionChosen; ChangeTextBoxText(GetObjectText(obj)); diff --git a/src/Files.App.Controls/Omnibar/Omnibar.xaml b/src/Files.App.Controls/Omnibar/Omnibar.xaml index 64eabed99947..26c90b65eb0f 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.xaml +++ b/src/Files.App.Controls/Omnibar/Omnibar.xaml @@ -67,7 +67,6 @@ FontStretch="{TemplateBinding FontStretch}" FontWeight="{TemplateBinding FontWeight}" Foreground="{TemplateBinding Foreground}" - PlaceholderText="{Binding CurrentSelectedMode.PlaceholderText, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" ScrollViewer.BringIntoViewOnFocusChange="False" Style="{StaticResource DefaultOmnibarTextBoxStyle}" UseSystemFocusVisuals="{TemplateBinding UseSystemFocusVisuals}" /> @@ -96,11 +95,7 @@ MaxHeight="{ThemeResource AutoSuggestListMaxHeight}" Margin="{ThemeResource AutoSuggestListPadding}" IsItemClickEnabled="True" - ItemTemplate="{Binding CurrentSelectedMode.SuggestionItemTemplate, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" - ItemsSource="{Binding CurrentSelectedMode.SuggestionItemsSource, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" - SelectionMode="Single"> - - + SelectionMode="Single" /> @@ -138,7 +133,7 @@ - + - + diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs index e7f73fd5262c..fdc6fa6b3c7f 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs @@ -30,6 +30,8 @@ private void ModeButton_PointerReleased(object sender, PointerRoutedEventArgs e) VisualStateManager.GoToState(this, "PointerOver", true); + owner.IsModeButtonPressed = true; + // Change the current mode owner.CurrentSelectedMode = this; } diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.Properties.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.Properties.cs index dbac55f6ca1f..6245ebbca02f 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.Properties.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.Properties.cs @@ -43,6 +43,9 @@ public partial class OmnibarMode [GeneratedDependencyProperty(DefaultValue = true)] public partial bool UpdateTextOnSelect { get; set; } + [GeneratedDependencyProperty(DefaultValue = true)] + public partial bool UpdateTextOnArrowKeys { get; set; } + [GeneratedDependencyProperty] public partial bool IsAutoFocusEnabled { get; set; } diff --git a/src/Files.App/Actions/Content/Archives/Compress/BaseCompressArchiveAction.cs b/src/Files.App/Actions/Content/Archives/Compress/BaseCompressArchiveAction.cs index 51cb8befbf02..8add21c1d0b0 100644 --- a/src/Files.App/Actions/Content/Archives/Compress/BaseCompressArchiveAction.cs +++ b/src/Files.App/Actions/Content/Archives/Compress/BaseCompressArchiveAction.cs @@ -12,6 +12,9 @@ internal abstract class BaseCompressArchiveAction : BaseUIAction, IAction public abstract string Description { get; } + public RichGlyph Glyph + => new(themedIconStyle: "App.ThemedIcons.Zip"); + public override bool IsExecutable => IsContextPageTypeAdaptedToCommand() && StorageArchiveService.CanCompress(context.SelectedItems) && diff --git a/src/Files.App/Actions/Global/EditPathAction.cs b/src/Files.App/Actions/Global/EditPathAction.cs index 1f4ce2013182..61e90f7070ca 100644 --- a/src/Files.App/Actions/Global/EditPathAction.cs +++ b/src/Files.App/Actions/Global/EditPathAction.cs @@ -20,6 +20,9 @@ public HotKey HotKey public HotKey SecondHotKey => new(Keys.D, KeyModifiers.Alt); + public RichGlyph Glyph + => new(themedIconStyle: "App.ThemedIcons.Omnibar.Path"); + public EditPathAction() { diff --git a/src/Files.App/Actions/Global/SearchAction.cs b/src/Files.App/Actions/Global/SearchAction.cs index 77ad67222e59..6e4b63a3cdcc 100644 --- a/src/Files.App/Actions/Global/SearchAction.cs +++ b/src/Files.App/Actions/Global/SearchAction.cs @@ -20,7 +20,7 @@ public HotKey SecondHotKey => new(Keys.F3); public RichGlyph Glyph - => new(); + => new(themedIconStyle: "App.ThemedIcons.Omnibar.Search"); public bool IsExecutable => !context.IsSearchBoxVisible; diff --git a/src/Files.App/Actions/Open/OpenSettingsAction.cs b/src/Files.App/Actions/Open/OpenSettingsAction.cs index 80f1d03531f4..6c1712b887fb 100644 --- a/src/Files.App/Actions/Open/OpenSettingsAction.cs +++ b/src/Files.App/Actions/Open/OpenSettingsAction.cs @@ -19,6 +19,9 @@ public string Description public HotKey HotKey => new(Keys.OemComma, KeyModifiers.Ctrl); + + public RichGlyph Glyph + => new(themedIconStyle: "App.ThemedIcons.Settings"); public Task ExecuteAsync(object? parameter = null) { diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 8a5b39ff452e..96109bb31ab5 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4240,4 +4240,13 @@ Icon files This is the friendly name for a variety of different icon files. + + Show collapsed path breadcrumbs + + + Show child folders + + + There are no commands containing {0} + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 30f1f6f82475..ef9e511e009c 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -324,6 +324,8 @@ CurrentSelectedMode="{x:Bind ViewModel.OmnibarCurrentSelectedMode, Mode=TwoWay}" CurrentSelectedModeName="{x:Bind ViewModel.OmnibarCurrentSelectedModeName, Mode=TwoWay}" IsFocused="{x:Bind ViewModel.IsOmnibarFocused, Mode=TwoWay}" + LostFocus="Omnibar_LostFocus" + PreviewKeyDown="Omnibar_PreviewKeyDown" QuerySubmitted="Omnibar_QuerySubmitted" TextChanged="Omnibar_TextChanged"> @@ -340,10 +342,12 @@ + ItemsSource="{x:Bind ViewModel.PathComponents, Mode=OneWay}" + RootItemToolTip="{helpers:ResourceString Name=Home}"> - + @@ -422,6 +430,7 @@ IconOnActive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Search}, IsFilled=True}" IconOnInactive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Search}, IconType=Outline}" IsAutoFocusEnabled="True" + IsEnabled="False" ModeName="{x:Bind Commands.Search.LabelWithHotKey, Mode=OneWay}" PlaceholderText="{helpers:ResourceString Name=OmnibarSearchModeTextPlaceholder}" /> diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 9d7751f1b88e..e2b093d36d22 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -260,6 +260,7 @@ private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedE if (Omnibar.CurrentSelectedMode == OmnibarPathMode) { await ViewModel.HandleItemNavigationAsync(args.Text); + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) { @@ -278,13 +279,10 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.CommandNotExecutable.GetLocali string.Format(Strings.CommandNotExecutableContent.GetLocalizedResource(), command.Code)); else await command.ExecuteAsync(); - - ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; - return; } // Try invoking Windows app action - if (ActionManager.Instance.ActionRuntime is not null && item.ActionInstance is ActionInstance actionInstance) + else if (ActionManager.Instance.ActionRuntime is not null && item.ActionInstance is ActionInstance actionInstance) { // Workaround for https://github.com/microsoft/App-Actions-On-Windows-Samples/issues/7 var action = ActionManager.Instance.ActionRuntime.ActionCatalog.GetAllActions() @@ -295,9 +293,9 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.CommandNotExecutable.GetLocali var overload = action.GetOverloads().FirstOrDefault(); await overload?.InvokeAsync(actionInstance.Context); } - - ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; } + + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { @@ -412,5 +410,23 @@ private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBar // Clear the flyout items to save memory e.Flyout.Items.Clear(); } + + private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + { + if (ViewModel.OmnibarCurrentSelectedMode == OmnibarCommandPaletteMode) + { + ViewModel.OmnibarCurrentSelectedMode = OmnibarPathMode; + ViewModel.OmnibarCommandPaletteModeText = string.Empty; + } + } + + private void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + { + if (e.Key is VirtualKey.Escape) + { + Omnibar.IsFocused = false; + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); + } + } } } diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index f1f9c67aae72..7b2db64ecf6f 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -9,14 +9,12 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media.Imaging; using System.IO; using System.Windows.Input; using Windows.AI.Actions; -using Windows.AI.Actions.Hosting; using Windows.ApplicationModel.DataTransfer; -using Microsoft.Windows.ApplicationModel.Resources; using Windows.UI.Text; -using Microsoft.UI.Xaml.Media.Imaging; namespace Files.App.ViewModels.UserControls { @@ -254,7 +252,7 @@ public bool IsOmnibarFocused _ = PopulateOmnibarSuggestionsForPathMode(); break; case OmnibarPaletteModeName: - PopulateOmnibarSuggestionsForCommandPaletteMode(); + PopulateOmnibarSuggestionsForCommandPaletteMode(); break; case OmnibarSearchModeName: break; @@ -794,7 +792,8 @@ public void SwitchToSearchMode() { if (EnableOmnibar) { - OmnibarCurrentSelectedModeName = OmnibarSearchModeName; + // TODO enable when implemented + // OmnibarCurrentSelectedModeName = OmnibarSearchModeName; } else { @@ -816,6 +815,10 @@ public void SwitchToSearchMode() public void SwitchToPathMode() { OmnibarCurrentSelectedModeName = OmnibarPathModeName; + + var omnibar = AddressToolbar?.FindDescendant("Omnibar") as Omnibar; + omnibar?.Focus(FocusState.Programmatic); + omnibar.IsFocused = true; } public void UpdateAdditionalActions() @@ -1231,6 +1234,15 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() { OmnibarCommandPaletteModeSuggestionItems.Add(item); } + + if (OmnibarCommandPaletteModeSuggestionItems.Count is 0) + { + OmnibarCommandPaletteModeSuggestionItems.Add(new NavigationBarSuggestionItem() + { + PrimaryDisplay = string.Format(Strings.NoCommandsFound.GetLocalizedResource(), OmnibarCommandPaletteModeText), + SearchText = OmnibarCommandPaletteModeText, + }); + } } [Obsolete("Remove once Omnibar goes out of experimental.")] From 17f7ff6f18b37caedd1b50c39b5a71a83a4aa329 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 12 Jun 2025 10:20:13 -0400 Subject: [PATCH 004/107] GitHub: Removed windows-store-action --- .github/workflows/cd-store-preview.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/cd-store-preview.yml b/.github/workflows/cd-store-preview.yml index 5c2b60efd5fe..4fed52f9d7cf 100644 --- a/.github/workflows/cd-store-preview.yml +++ b/.github/workflows/cd-store-preview.yml @@ -120,14 +120,3 @@ jobs: with: name: 'Appx Packages (${{ env.CONFIGURATION }}, ${{ env.PLATFORM }})' path: ${{ env.ARTIFACTS_STAGING_DIR }} - - - name: Publish the packages to Microsoft Store - uses: isaacrlevin/windows-store-action@1.0 - with: - app-id: '9NSQD9PKV3SS' - tenant-id: ${{ secrets.STORE_TENANT_ID }} - client-id: ${{ secrets.STORE_CLIENT_ID }} - client-secret: ${{ secrets.STORE_CLIENT_SECRET }} - package-path: '${{ env.APPX_PACKAGE_DIR }}' - skip-polling: false - packages-keep: 5 From 3824834554bbebbffce9db1dc43cd168715b4ed7 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 12 Jun 2025 10:40:22 -0400 Subject: [PATCH 005/107] Code Quality: Updated Directory.Packages.props (#17185) --- Directory.Packages.props | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 54b0c9633666..b2c27c87c0cb 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -27,14 +27,14 @@ - + - + - + @@ -50,14 +50,14 @@ - - - + + + - + \ No newline at end of file From 378f5094c9806c3b6ade76ffe77baceab640adac Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:03:17 -0400 Subject: [PATCH 006/107] Code Quality: Improved Omnibar (#17186) Signed-off-by: Yair <39923744+yaira2@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 6 ++++++ src/Files.App.Controls/Omnibar/Omnibar.cs | 1 + .../ViewModels/UserControls/NavigationToolbarViewModel.cs | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 4499c41ab5d4..bdb8de3e3fac 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -129,6 +129,12 @@ private void AutoSuggestBoxSuggestionsPopup_GettingFocus(UIElement sender, Getti args.TryCancel(); } + private void AutoSuggestBoxSuggestionsPopup_Opened(object? sender, object e) + { + if (_textBoxSuggestionsListView.Items.Count > 0) + _textBoxSuggestionsListView.ScrollIntoView(_textBoxSuggestionsListView.Items[0]); + } + private void AutoSuggestBoxSuggestionsListView_ItemClick(object sender, ItemClickEventArgs e) { if (CurrentSelectedMode is null) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index 50c4eecacd43..6ab43cea4e14 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -79,6 +79,7 @@ protected override void OnApplyTemplate() _textBox.KeyDown += AutoSuggestBox_KeyDown; _textBox.TextChanged += AutoSuggestBox_TextChanged; _textBoxSuggestionsPopup.GettingFocus += AutoSuggestBoxSuggestionsPopup_GettingFocus; + _textBoxSuggestionsPopup.Opened += AutoSuggestBoxSuggestionsPopup_Opened; _textBoxSuggestionsListView.ItemClick += AutoSuggestBoxSuggestionsListView_ItemClick; _textBoxSuggestionsListView.SelectionChanged += AutoSuggestBoxSuggestionsListView_SelectionChanged; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 7b2db64ecf6f..8332c2aa3a04 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -1232,7 +1232,8 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() foreach (var item in suggestionItems) { - OmnibarCommandPaletteModeSuggestionItems.Add(item); + if (item.Text != Commands.OpenCommandPalette.Code.ToString()) + OmnibarCommandPaletteModeSuggestionItems.Add(item); } if (OmnibarCommandPaletteModeSuggestionItems.Count is 0) From ba538233ea3f102717c3c7ee5b05712322021568 Mon Sep 17 00:00:00 2001 From: AkhilReddy-Ramireddy Date: Thu, 12 Jun 2025 16:23:16 -0400 Subject: [PATCH 007/107] Fix: Fixed an issue where the home key wouldn't move focus when renaming items (#17127) Co-authored-by: Manus Contributor --- src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs index 1ba13fb01592..14c87e12a590 100644 --- a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs @@ -312,6 +312,11 @@ protected async void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e) await CommitRenameAsync(textBox); e.Handled = true; break; + case VirtualKey.Home: + textBox.SelectionStart = 0; + textBox.SelectionLength = 0; + e.Handled = true; + break; case VirtualKey.Up: if (!isShiftPressed) textBox.SelectionStart = 0; From 0d24cbccb7e206d3678b99bd48ed6de99ead93f8 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Sun, 15 Jun 2025 16:22:17 -0400 Subject: [PATCH 008/107] Code Quality: Added navigation button overflow menu (#17195) --- src/Files.App/Strings/en-US/Resources.resw | 5 +- .../UserControls/NavigationToolbar.xaml | 53 +++++++++++++++++++ .../UserControls/NavigationToolbar.xaml.cs | 7 +++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 96109bb31ab5..4931374c0288 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4245,8 +4245,11 @@ Show child folders - + There are no commands containing {0} + + See more + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index ef9e511e009c..792596a20033 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -136,6 +136,34 @@ + + From bd2f5f11d658cfb1853ef65c19d2c3193ab64424 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Tue, 1 Jul 2025 23:07:37 +0900 Subject: [PATCH 025/107] Code Quality: Added debug logs for Omnibar (#17231) --- src/Files.App.Controls/Files.App.Controls.csproj | 1 + .../{Util.cs => GlobalHelper.cs} | 8 +++++++- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 15 +++++++++++++++ .../Omnibar/Omnibar.Properties.cs | 7 +++++++ src/Files.App.Controls/Omnibar/Omnibar.cs | 11 +++++++++++ .../Omnibar/OmnibarMode.Events.cs | 8 ++++++++ src/Files.App.Controls/Omnibar/OmnibarMode.cs | 6 +++++- 7 files changed, 54 insertions(+), 2 deletions(-) rename src/Files.App.Controls/{Util.cs => GlobalHelper.cs} (76%) diff --git a/src/Files.App.Controls/Files.App.Controls.csproj b/src/Files.App.Controls/Files.App.Controls.csproj index e2f44e087d4d..9e7631dc70e9 100644 --- a/src/Files.App.Controls/Files.App.Controls.csproj +++ b/src/Files.App.Controls/Files.App.Controls.csproj @@ -10,6 +10,7 @@ x86;x64;arm64 win-x86;win-x64;win-arm64 true + $(DefineConstants);OMNIBAR_DEBUG diff --git a/src/Files.App.Controls/Util.cs b/src/Files.App.Controls/GlobalHelper.cs similarity index 76% rename from src/Files.App.Controls/Util.cs rename to src/Files.App.Controls/GlobalHelper.cs index e9866d156880..62c27e0b7462 100644 --- a/src/Files.App.Controls/Util.cs +++ b/src/Files.App.Controls/GlobalHelper.cs @@ -3,7 +3,7 @@ namespace Files.App.Controls { - public static class Util + public static class GlobalHelper { /// /// Sets cursor when hovering on a specific element. @@ -22,5 +22,11 @@ public static void ChangeCursor(this UIElement uiElement, InputCursor cursor) [cursor] ); } + + [Conditional("OMNIBAR_DEBUG")] + public static void WriteDebugStringForOmnibar(string? message) + { + Debug.WriteLine($"OMNIBAR DEBUG: [{message}]"); + } } } diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index f3f0459d0624..9b224f0f442f 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -21,6 +21,8 @@ private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs if (args.OldFocusedElement is null) return; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox is getting the focus."); + _previouslyFocusedElement = new(args.OldFocusedElement as UIElement); } @@ -36,6 +38,8 @@ private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs a private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) { + GlobalHelper.WriteDebugStringForOmnibar("The TextBox got the focus."); + IsFocused = true; _textBox.SelectAll(); } @@ -46,6 +50,8 @@ private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e) if (_textBox.ContextFlyout.IsOpen) return; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox lost the focus."); + IsFocused = false; } @@ -55,12 +61,16 @@ private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) { e.Handled = true; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Enter key."); + SubmitQuery(_textBoxSuggestionsPopup.IsOpen && _textBoxSuggestionsListView.SelectedIndex is not -1 ? _textBoxSuggestionsListView.SelectedItem : null); } else if ((e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) && _textBoxSuggestionsPopup.IsOpen) { e.Handled = true; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Up/Down key while the suggestions pop-up is open."); + var currentIndex = _textBoxSuggestionsListView.SelectedIndex; var nextIndex = currentIndex; var suggestionsCount = _textBoxSuggestionsListView.Items.Count; @@ -89,6 +99,8 @@ private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) { e.Handled = true; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Esc key."); + if (_textBoxSuggestionsPopup.IsOpen) { RevertTextToUserInput(); @@ -102,6 +114,8 @@ private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) } else if (e.Key == VirtualKey.Tab && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)) { + GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Tab key."); + // Focus on inactive content when pressing Tab instead of moving to the next control in the tab order e.Handled = true; IsFocused = false; @@ -136,6 +150,7 @@ private void AutoSuggestBox_TextChanged(object sender, TextChangedEventArgs e) private void AutoSuggestBoxSuggestionsPopup_GettingFocus(UIElement sender, GettingFocusEventArgs args) { + // The suggestions popup is never wanted to be focused when it come to open. args.TryCancel(); } diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Properties.cs b/src/Files.App.Controls/Omnibar/Omnibar.Properties.cs index cd156dc4cea2..1ee98de0c802 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Properties.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Properties.cs @@ -27,6 +27,11 @@ partial void OnCurrentSelectedModePropertyChanged(DependencyPropertyChangedEvent if (e.NewValue is not OmnibarMode newMode) return; + if (e.OldValue is OmnibarMode oldMode) + GlobalHelper.WriteDebugStringForOmnibar($"The mode change from {oldMode} to {newMode} has been requested."); + else + GlobalHelper.WriteDebugStringForOmnibar($"The mode change to {newMode} has been requested."); + ChangeMode(e.OldValue as OmnibarMode, newMode); CurrentSelectedModeName = newMode.Name; } @@ -51,6 +56,8 @@ partial void OnIsFocusedChanged(bool newValue) if (CurrentSelectedMode is null || _textBox is null) return; + GlobalHelper.WriteDebugStringForOmnibar($"{nameof(IsFocused)} has been changed to {IsFocused}"); + if (newValue) { VisualStateManager.GoToState(CurrentSelectedMode, "Focused", true); diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index f404a66e3381..ff02da54c508 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -51,6 +51,8 @@ public Omnibar() Modes = []; AutoSuggestBoxPadding = new(0, 0, 0, 0); + + GlobalHelper.WriteDebugStringForOmnibar("Omnibar has been initialized."); } // Methods @@ -86,6 +88,8 @@ protected override void OnApplyTemplate() // Set the default width _textBoxSuggestionsContainerBorder.Width = ActualWidth; + + GlobalHelper.WriteDebugStringForOmnibar("The template and the events have been initialized."); } public void PopulateModes() @@ -195,6 +199,8 @@ protected void ChangeMode(OmnibarMode? oldMode, OmnibarMode newMode) mode.Transitions.Clear(); mode.UpdateLayout(); } + + GlobalHelper.WriteDebugStringForOmnibar($"Successfully changed Mode from {oldMode} to {newMode}"); } internal protected void FocusTextBox() @@ -210,11 +216,16 @@ internal protected bool TryToggleIsSuggestionsPopupOpen(bool wantToOpen) if (wantToOpen && (!IsFocused || CurrentSelectedMode?.ItemsSource is null || (CurrentSelectedMode?.ItemsSource is IList collection && collection.Count is 0))) { _textBoxSuggestionsPopup.IsOpen = false; + + GlobalHelper.WriteDebugStringForOmnibar("The suggestions pop-up closed."); + return false; } _textBoxSuggestionsPopup.IsOpen = wantToOpen; + GlobalHelper.WriteDebugStringForOmnibar("The suggestions pop-up is open."); + return false; } diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs index fdc6fa6b3c7f..39fed9ea25b1 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs @@ -12,6 +12,8 @@ private void ModeButton_PointerEntered(object sender, PointerRoutedEventArgs e) if (_ownerRef is null || _ownerRef.TryGetTarget(out var owner) is false || owner.CurrentSelectedMode == this) return; + GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has entered the UI area of this Mode ({this})"); + VisualStateManager.GoToState(this, "PointerOver", true); } @@ -20,6 +22,8 @@ private void ModeButton_PointerPressed(object sender, PointerRoutedEventArgs e) if (_ownerRef is null || _ownerRef.TryGetTarget(out var owner) is false || owner.CurrentSelectedMode == this) return; + GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has been pressed on the UI area of this Mode ({this})"); + VisualStateManager.GoToState(this, "PointerPressed", true); } @@ -28,6 +32,8 @@ private void ModeButton_PointerReleased(object sender, PointerRoutedEventArgs e) if (_ownerRef is null || _ownerRef.TryGetTarget(out var owner) is false || owner.CurrentSelectedMode == this) return; + GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has been unpressed from the UI area of this Mode ({this})"); + VisualStateManager.GoToState(this, "PointerOver", true); owner.IsModeButtonPressed = true; @@ -38,6 +44,8 @@ private void ModeButton_PointerReleased(object sender, PointerRoutedEventArgs e) private void ModeButton_PointerExited(object sender, PointerRoutedEventArgs e) { + GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has moved away from the UI area of this Mode ({this})"); + VisualStateManager.GoToState(this, "PointerNormal", true); } } diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.cs index 1a3b49e975d9..f75bffcb9412 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.cs @@ -23,6 +23,8 @@ public partial class OmnibarMode : ItemsControl public OmnibarMode() { DefaultStyleKey = typeof(OmnibarMode); + + GlobalHelper.WriteDebugStringForOmnibar($"Omnibar Mode ({this}) has been initialized."); } // Methods @@ -39,6 +41,8 @@ protected override void OnApplyTemplate() _modeButton.PointerPressed += ModeButton_PointerPressed; _modeButton.PointerReleased += ModeButton_PointerReleased; _modeButton.PointerExited += ModeButton_PointerExited; + + GlobalHelper.WriteDebugStringForOmnibar($"The template and the events of the Omnibar Mode ({this}) have been initialized."); } protected override void OnKeyUp(KeyRoutedEventArgs args) @@ -88,7 +92,7 @@ public void SetOwner(Omnibar owner) public override string ToString() { - return ModeName ?? string.Empty; + return Name ?? string.Empty; } } } From 80204346eb5d21354eed5200736a058b0aadc517 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:37:05 -0400 Subject: [PATCH 026/107] Code Quality: Follow up for group header alignment --- src/Files.App/Views/Layouts/ColumnLayoutPage.xaml | 1 + src/Files.App/Views/Layouts/DetailsLayoutPage.xaml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml index 72cf9ca66ed6..8c4ed8e3ce9a 100644 --- a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml +++ b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml @@ -84,6 +84,7 @@ Date: Wed, 2 Jul 2025 18:59:04 -0400 Subject: [PATCH 027/107] Code Quality: Added sponsor flyout for sideload versions (#17240) --- src/Files.App/Constants.cs | 2 +- .../Contracts/IApplicationSettingsService.cs | 9 ++++- .../Helpers/Application/AppLifecycleHelper.cs | 3 +- .../Settings/ApplicationSettingsService.cs | 8 +++- src/Files.App/Strings/en-US/Resources.resw | 8 +++- src/Files.App/ViewModels/MainPageViewModel.cs | 39 ++++++++++++++++--- src/Files.App/Views/MainPage.xaml | 15 ++++++- 7 files changed, 71 insertions(+), 13 deletions(-) diff --git a/src/Files.App/Constants.cs b/src/Files.App/Constants.cs index b92eb22f08a0..a8d191705981 100644 --- a/src/Files.App/Constants.cs +++ b/src/Files.App/Constants.cs @@ -205,7 +205,7 @@ public static class ExternalUrl public const string FeatureRequestUrl = @"https://github.com/files-community/Files/issues/new?labels=feature+request&template=feature_request.yml"; public const string BugReportUrl = @"https://github.com/files-community/Files/issues/new?labels=bug&template=bug_report.yml"; public const string PrivacyPolicyUrl = @"https://files.community/privacy"; - public const string SupportUsUrl = @"https://github.com/sponsors/yaira2"; + public const string SupportUsUrl = @"https://github.com/files-community/Files?sponsor"; public const string CrowdinUrl = @"https://crowdin.com/project/files-app"; public static readonly string ReleaseNotesUrl= $"https://files.community/blog/posts/v{Package.Current.Id.Version.Major}-{Package.Current.Id.Version.Minor}-{Package.Current.Id.Version.Build}?minimal"; } diff --git a/src/Files.App/Data/Contracts/IApplicationSettingsService.cs b/src/Files.App/Data/Contracts/IApplicationSettingsService.cs index 312434583600..df7535e83b8e 100644 --- a/src/Files.App/Data/Contracts/IApplicationSettingsService.cs +++ b/src/Files.App/Data/Contracts/IApplicationSettingsService.cs @@ -6,9 +6,14 @@ namespace Files.App.Data.Contracts public interface IApplicationSettingsService : IBaseSettingsService { /// - /// Gets or sets a value indicating whether or not the user clicked to review the app. + /// Gets or sets a value indicating whether or not the user clicked the 'review' prompt. /// - bool ClickedToReviewApp { get; set; } + bool HasClickedReviewPrompt { get; set; } + + /// + /// Gets or sets a value indicating whether or not the user clicked the 'sponsor' prompt. + /// + bool HasClickedSponsorPrompt { get; set; } /// /// Gets or sets a value indicating whether or not to display a prompt when running the app as administrator. diff --git a/src/Files.App/Helpers/Application/AppLifecycleHelper.cs b/src/Files.App/Helpers/Application/AppLifecycleHelper.cs index 6537d6943e4a..9be8c4bd051f 100644 --- a/src/Files.App/Helpers/Application/AppLifecycleHelper.cs +++ b/src/Files.App/Helpers/Application/AppLifecycleHelper.cs @@ -61,7 +61,8 @@ static AppLifecycleHelper() { IsAppUpdated = version.ToString() != AppVersion.ToString(); } - TotalLaunchCount = launchCount is long l ? l + 1 : 1; + + TotalLaunchCount = long.TryParse(launchCount?.ToString(), out var v) ? v + 1 : 1; infoKey.SetValue("LastLaunchVersion", AppVersion.ToString()); infoKey.SetValue("TotalLaunchCount", TotalLaunchCount); } diff --git a/src/Files.App/Services/Settings/ApplicationSettingsService.cs b/src/Files.App/Services/Settings/ApplicationSettingsService.cs index 898bcce492f1..769995db9368 100644 --- a/src/Files.App/Services/Settings/ApplicationSettingsService.cs +++ b/src/Files.App/Services/Settings/ApplicationSettingsService.cs @@ -8,7 +8,13 @@ namespace Files.App.Services.Settings { internal sealed partial class ApplicationSettingsService : BaseObservableJsonSettings, IApplicationSettingsService { - public bool ClickedToReviewApp + public bool HasClickedReviewPrompt + { + get => Get(false); + set => Set(value); + } + + public bool HasClickedSponsorPrompt { get => Get(false); set => Set(value); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index acef44a16ef4..c0ba4fad97f7 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -2012,11 +2012,17 @@ Behaviors - + Hello! Enjoying Files? Please consider reviewing in the Microsoft Store. + + + Enjoying Files? Please consider supporting the project on GitHub. + + + Sponsor Rate us diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index 432f52939cab..de2098cfcd79 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -8,7 +8,6 @@ using Microsoft.UI.Xaml.Media.Imaging; using Microsoft.UI.Xaml.Navigation; using System.Windows.Input; -using Windows.ApplicationModel; using Windows.Services.Store; using Windows.System; using WinRT.Interop; @@ -134,11 +133,23 @@ public bool ShowReviewPrompt { get { - var isTargetPackage = Package.Current.Id.Name == "49306atecsolution.FilesUWP" || Package.Current.Id.Name == "49306atecsolution.FilesPreview"; - var hasNotClickedReview = !UserSettingsService.ApplicationSettingsService.ClickedToReviewApp; + var isTargetEnvironment = AppLifecycleHelper.AppEnvironment is AppEnvironment.StoreStable or AppEnvironment.StorePreview; + var hasClickedReviewPrompt = UserSettingsService.ApplicationSettingsService.HasClickedReviewPrompt; var launchCountReached = AppLifecycleHelper.TotalLaunchCount == 30; - return isTargetPackage && hasNotClickedReview && launchCountReached; + return isTargetEnvironment && !hasClickedReviewPrompt && launchCountReached; + } + } + + public bool ShowSponsorPrompt + { + get + { + var isTargetEnvironment = AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev or AppEnvironment.SideloadStable or AppEnvironment.SideloadPreview; + var hasClickedSponsorPrompt = UserSettingsService.ApplicationSettingsService.HasClickedSponsorPrompt; + var launchCountReached = AppLifecycleHelper.TotalLaunchCount == 30; + + return isTargetEnvironment && !hasClickedSponsorPrompt && launchCountReached; } } @@ -147,6 +158,8 @@ public bool ShowReviewPrompt public ICommand NavigateToNumberedTabKeyboardAcceleratorCommand { get; } public ICommand ReviewAppCommand { get; } public ICommand DismissReviewPromptCommand { get; } + public ICommand SponsorCommand { get; } + public ICommand DismissSponsorPromptCommand { get; } // Constructor @@ -155,6 +168,8 @@ public MainPageViewModel() NavigateToNumberedTabKeyboardAcceleratorCommand = new RelayCommand(ExecuteNavigateToNumberedTabKeyboardAcceleratorCommand); ReviewAppCommand = new RelayCommand(ExecuteReviewAppCommand); DismissReviewPromptCommand = new RelayCommand(ExecuteDismissReviewPromptCommand); + SponsorCommand = new RelayCommand(ExecuteSponsorCommand); + DismissSponsorPromptCommand = new RelayCommand(ExecuteDismissSponsorPromptCommand); AppearanceSettingsService.PropertyChanged += (s, e) => { @@ -322,7 +337,7 @@ await Task.WhenAll( private async void ExecuteReviewAppCommand() { - UserSettingsService.ApplicationSettingsService.ClickedToReviewApp = true; + UserSettingsService.ApplicationSettingsService.HasClickedReviewPrompt = true; OnPropertyChanged(nameof(ShowReviewPrompt)); try @@ -336,7 +351,19 @@ private async void ExecuteReviewAppCommand() private void ExecuteDismissReviewPromptCommand() { - UserSettingsService.ApplicationSettingsService.ClickedToReviewApp = true; + UserSettingsService.ApplicationSettingsService.HasClickedReviewPrompt = true; + } + + private async void ExecuteSponsorCommand() + { + UserSettingsService.ApplicationSettingsService.HasClickedSponsorPrompt = true; + OnPropertyChanged(nameof(ShowSponsorPrompt)); + await Launcher.LaunchUriAsync(new Uri(Constants.ExternalUrl.SupportUsUrl)).AsTask(); + } + + private void ExecuteDismissSponsorPromptCommand() + { + UserSettingsService.ApplicationSettingsService.HasClickedSponsorPrompt = true; } private async void ExecuteNavigateToNumberedTabKeyboardAcceleratorCommand(KeyboardAcceleratorInvokedEventArgs? e) diff --git a/src/Files.App/Views/MainPage.xaml b/src/Files.App/Views/MainPage.xaml index a7cb40424092..ab1bde83e9b5 100644 --- a/src/Files.App/Views/MainPage.xaml +++ b/src/Files.App/Views/MainPage.xaml @@ -368,7 +368,7 @@ + + + From 622b7051eab1def6afc0f23ab0db0f09de690389 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:02:33 -0400 Subject: [PATCH 028/107] Code Quality: Fixed a number of focus related issues in Omnibar (#17239) --- .../Omnibar/Omnibar.Events.cs | 22 +++++--------- src/Files.App.Controls/Omnibar/Omnibar.cs | 2 +- src/Files.App.Controls/Omnibar/Omnibar.xaml | 30 +++++++------------ .../Omnibar/OmnibarMode.Events.cs | 16 ++++++---- src/Files.App.Controls/Omnibar/OmnibarMode.cs | 5 ++-- .../UserControls/NavigationToolbar.xaml | 2 +- .../UserControls/NavigationToolbar.xaml.cs | 20 +++++++++---- 7 files changed, 48 insertions(+), 49 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 9b224f0f442f..f33680ad704f 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -1,10 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Input; using Microsoft.UI.Xaml.Input; using Windows.System; -using Windows.UI.Core; namespace Files.App.Controls { @@ -28,7 +26,7 @@ private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs args) { - if (IsModeButtonPressed) + if (args.NewFocusedElement is Button && IsModeButtonPressed) { IsModeButtonPressed = false; args.TryCancel(); @@ -47,12 +45,16 @@ private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e) { // TextBox still has focus if the context menu for selected text is open - if (_textBox.ContextFlyout.IsOpen) + var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(this.XamlRoot); + if (element is FlyoutBase or Popup) return; GlobalHelper.WriteDebugStringForOmnibar("The TextBox lost the focus."); IsFocused = false; + + // Reset to the default mode when Omnibar loses focus + CurrentSelectedMode = Modes?.FirstOrDefault(); } private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) @@ -112,16 +114,6 @@ private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) previouslyFocusedElement?.Focus(FocusState.Programmatic); } } - else if (e.Key == VirtualKey.Tab && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)) - { - GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Tab key."); - - // Focus on inactive content when pressing Tab instead of moving to the next control in the tab order - e.Handled = true; - IsFocused = false; - await Task.Delay(15); - CurrentSelectedMode?.ContentOnInactive?.Focus(FocusState.Keyboard); - } else { _textChangeReason = OmnibarTextChangeReason.UserInput; @@ -141,6 +133,8 @@ private void AutoSuggestBox_TextChanged(object sender, TextChangedEventArgs e) _textChangeReason = OmnibarTextChangeReason.UserInput; _userInput = _textBox.Text; } + else if (_textChangeReason is OmnibarTextChangeReason.ProgrammaticChange) + _textBox.SelectAll(); TextChanged?.Invoke(this, new(CurrentSelectedMode, _textChangeReason)); diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index ff02da54c508..fbe301a3b9df 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -128,7 +128,7 @@ protected void ChangeMode(OmnibarMode? oldMode, OmnibarMode newMode) // Add the reposition transition to the all modes mode.Transitions = [new RepositionThemeTransition()]; mode.UpdateLayout(); - mode.IsTabStop = true; + mode.IsTabStop = false; } var index = _modesHostGrid.Children.IndexOf(newMode); diff --git a/src/Files.App.Controls/Omnibar/Omnibar.xaml b/src/Files.App.Controls/Omnibar/Omnibar.xaml index c5afe0825931..546902e4663a 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.xaml +++ b/src/Files.App.Controls/Omnibar/Omnibar.xaml @@ -117,9 +117,6 @@ - - - @@ -127,23 +124,21 @@ x:Name="PART_RootGrid" Height="{TemplateBinding Height}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" - Background="{TemplateBinding Background}" - TabFocusNavigation="Local"> + Background="{TemplateBinding Background}"> - - - - + ToolTipService.ToolTip="{Binding ModeName, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"> + + + + - + - - - - - + - diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs index 39fed9ea25b1..a40dd8abbdcb 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs @@ -35,11 +35,6 @@ private void ModeButton_PointerReleased(object sender, PointerRoutedEventArgs e) GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has been unpressed from the UI area of this Mode ({this})"); VisualStateManager.GoToState(this, "PointerOver", true); - - owner.IsModeButtonPressed = true; - - // Change the current mode - owner.CurrentSelectedMode = this; } private void ModeButton_PointerExited(object sender, PointerRoutedEventArgs e) @@ -48,5 +43,14 @@ private void ModeButton_PointerExited(object sender, PointerRoutedEventArgs e) VisualStateManager.GoToState(this, "PointerNormal", true); } + + private void ModeButton_Click(object sender, RoutedEventArgs e) + { + if (_ownerRef is null || _ownerRef.TryGetTarget(out var owner) is false || owner.CurrentSelectedMode == this) + return; + + owner.IsModeButtonPressed = true; + owner.CurrentSelectedMode = this; + } } -} +} \ No newline at end of file diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.cs index f75bffcb9412..e91e05abe24b 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.cs @@ -16,7 +16,7 @@ public partial class OmnibarMode : ItemsControl private WeakReference? _ownerRef; - private Border _modeButton = null!; + private Button _modeButton = null!; // Constructor @@ -33,7 +33,7 @@ protected override void OnApplyTemplate() { base.OnApplyTemplate(); - _modeButton = GetTemplateChild(TemplatePartName_ModeButton) as Border + _modeButton = GetTemplateChild(TemplatePartName_ModeButton) as Button ?? throw new MissingFieldException($"Could not find {TemplatePartName_ModeButton} in the given {nameof(OmnibarMode)}'s style."); Loaded += OmnibarMode_Loaded; @@ -41,6 +41,7 @@ protected override void OnApplyTemplate() _modeButton.PointerPressed += ModeButton_PointerPressed; _modeButton.PointerReleased += ModeButton_PointerReleased; _modeButton.PointerExited += ModeButton_PointerExited; + _modeButton.Click += ModeButton_Click; GlobalHelper.WriteDebugStringForOmnibar($"The template and the events of the Omnibar Mode ({this}) have been initialized."); } diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index acf1697fc5f4..5d4a2db52e38 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -351,7 +351,7 @@ x:Load="{x:Bind ViewModel.EnableOmnibar, Mode=OneWay}" CurrentSelectedModeName="{x:Bind ViewModel.OmnibarCurrentSelectedModeName, Mode=TwoWay}" IsFocused="{x:Bind ViewModel.IsOmnibarFocused, Mode=TwoWay}" - LostFocus="Omnibar_LostFocus" + ModeChanged="Omnibar_ModeChanged" PreviewKeyDown="Omnibar_PreviewKeyDown" QuerySubmitted="Omnibar_QuerySubmitted" TextChanged="Omnibar_TextChanged"> diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 900d19f769d6..719b32093f3c 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -12,6 +12,7 @@ using Microsoft.UI.Xaml.Navigation; using Windows.AI.Actions.Hosting; using Windows.System; +using Windows.UI.Core; namespace Files.App.UserControls { @@ -427,22 +428,31 @@ private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBar e.Flyout.Items.Clear(); } - private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) { + // Reset the command palette text when switching modes if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) - { - Omnibar.CurrentSelectedMode = OmnibarPathMode; ViewModel.OmnibarCommandPaletteModeText = string.Empty; - } } - private void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key is VirtualKey.Escape) { Omnibar.IsFocused = false; (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } + else if (e.Key is VirtualKey.Tab && Omnibar.IsFocused && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)) + { + var currentSelectedMode = Omnibar.CurrentSelectedMode; + Omnibar.IsFocused = false; + await Task.Delay(15); + + if (currentSelectedMode == OmnibarPathMode) + BreadcrumbBar.Focus(FocusState.Keyboard); + else if (currentSelectedMode == OmnibarCommandPaletteMode) + OmnibarCommandPaletteMode.Focus(FocusState.Keyboard); + } } private void NavigationButtonOverflowFlyoutButton_LosingFocus(UIElement sender, LosingFocusEventArgs args) From 4646cd6c92f9577fcc44f363f3c33d3631cde658 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 3 Jul 2025 11:20:40 -0400 Subject: [PATCH 029/107] Code Quality: Prevent mode button from removing Omnibar focus (#17242) --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 11 ++++++----- src/Files.App.Controls/Omnibar/Omnibar.cs | 3 --- src/Files.App.Controls/Omnibar/Omnibar.xaml | 1 + src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs | 1 - 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index f33680ad704f..78c4d4c3e271 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -26,12 +26,13 @@ private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs args) { - if (args.NewFocusedElement is Button && IsModeButtonPressed) - { - IsModeButtonPressed = false; - args.TryCancel(); + // Prevent the TextBox from losing focus when the ModeButton is focused + if (args.NewFocusedElement is not Button button || + args.InputDevice is FocusInputDeviceKind.Keyboard || + button.Name.ToString() != "PART_ModeButton") return; - } + + args.TryCancel(); } private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index fbe301a3b9df..5806676b5688 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -33,9 +33,6 @@ public partial class Omnibar : Control private WeakReference _previouslyFocusedElement = new(null); - // NOTE: This is a workaround to keep Omnibar's focus on a mode button being clicked - internal bool IsModeButtonPressed { get; set; } - // Events public event TypedEventHandler? QuerySubmitted; diff --git a/src/Files.App.Controls/Omnibar/Omnibar.xaml b/src/Files.App.Controls/Omnibar/Omnibar.xaml index 546902e4663a..dc84422b9673 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.xaml +++ b/src/Files.App.Controls/Omnibar/Omnibar.xaml @@ -129,6 +129,7 @@ - @@ -238,14 +234,36 @@ - + + + + + + + + + + - - - + + + + + + + - From 8313457338e84365ece89b57267d7c0fc78d60bd Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 8 Jul 2025 17:30:52 -0400 Subject: [PATCH 039/107] Fix: Fixed support for RTL --- .../Helpers/Application/AppLanguageHelper.cs | 15 +++++++++++++++ src/Files.App/UserControls/TabBar/TabBar.xaml.cs | 2 +- .../Storage/Helpers/FilePropertiesHelpers.cs | 6 ------ src/Files.App/Views/MainPage.xaml.cs | 6 +++++- .../Views/Properties/MainPropertiesPage.xaml.cs | 2 +- src/Files.App/Views/Shells/BaseShellPage.cs | 2 +- 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/Files.App/Helpers/Application/AppLanguageHelper.cs b/src/Files.App/Helpers/Application/AppLanguageHelper.cs index 3883cecae9c5..673e69673c5d 100644 --- a/src/Files.App/Helpers/Application/AppLanguageHelper.cs +++ b/src/Files.App/Helpers/Application/AppLanguageHelper.cs @@ -27,6 +27,21 @@ public static class AppLanguageHelper /// public static AppLanguageItem PreferredLanguage { get; private set; } + /// + /// Gets the preferred language. + /// + public static bool IsPreferredLanguageRtl + { + get + { + if (PreferredLanguage.Code is null) + return false; + + var culture = new CultureInfo(PreferredLanguage.Code); + return culture.TextInfo.IsRightToLeft; + } + } + /// /// Initializes the class. /// diff --git a/src/Files.App/UserControls/TabBar/TabBar.xaml.cs b/src/Files.App/UserControls/TabBar/TabBar.xaml.cs index c1163e066c12..7455e6511038 100644 --- a/src/Files.App/UserControls/TabBar/TabBar.xaml.cs +++ b/src/Files.App/UserControls/TabBar/TabBar.xaml.cs @@ -363,7 +363,7 @@ private async void DragAreaRectangle_Loaded(object sender, RoutedEventArgs e) if (HorizontalTabView.ActualWidth <= 0 && TabBarAddNewTabButton.Width <= 0) await Task.Delay(100); - var titleBarInset = ((FilePropertiesHelpers.FlowDirectionSettingIsRightToLeft + var titleBarInset = ((AppLanguageHelper.IsPreferredLanguageRtl ? MainWindow.Instance.AppWindow.TitleBar.LeftInset : MainWindow.Instance.AppWindow.TitleBar.RightInset) / DragAreaRectangle.XamlRoot.RasterizationScale) + 40; diff --git a/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs b/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs index 2d62652bf0b6..2ce4294c1763 100644 --- a/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs @@ -21,12 +21,6 @@ public static class FilePropertiesHelpers { private static IAppThemeModeService AppThemeModeService { get; } = Ioc.Default.GetRequiredService(); - /// - /// Whether LayoutDirection (FlowDirection) is set to right-to-left (RTL) - /// - public static readonly bool FlowDirectionSettingIsRightToLeft = - new ResourceManager().CreateResourceContext().QualifierValues["LayoutDirection"] == "RTL"; - /// /// Get window handle (hWnd) of the given properties window instance /// diff --git a/src/Files.App/Views/MainPage.xaml.cs b/src/Files.App/Views/MainPage.xaml.cs index d060ba68c9d9..d849eaf3ec80 100644 --- a/src/Files.App/Views/MainPage.xaml.cs +++ b/src/Files.App/Views/MainPage.xaml.cs @@ -13,6 +13,7 @@ using Microsoft.UI.Xaml.Navigation; using Windows.Foundation.Metadata; using Windows.Graphics; +using WinUIEx; using GridSplitter = Files.App.Controls.GridSplitter; using VirtualKey = Windows.System.VirtualKey; @@ -41,8 +42,11 @@ public MainPage() SidebarAdaptiveViewModel.PaneFlyout = (MenuFlyout)Resources["SidebarContextMenu"]; ViewModel = Ioc.Default.GetRequiredService(); - if (FilePropertiesHelpers.FlowDirectionSettingIsRightToLeft) + if (AppLanguageHelper.IsPreferredLanguageRtl) + { + MainWindow.Instance.SetExtendedWindowStyle(ExtendedWindowStyle.LayoutRtl); FlowDirection = FlowDirection.RightToLeft; + } ViewModel.PropertyChanged += ViewModel_PropertyChanged; UserSettingsService.OnSettingChangedEvent += UserSettingsService_OnSettingChangedEvent; diff --git a/src/Files.App/Views/Properties/MainPropertiesPage.xaml.cs b/src/Files.App/Views/Properties/MainPropertiesPage.xaml.cs index 0490036cb2a2..c9c1228a483b 100644 --- a/src/Files.App/Views/Properties/MainPropertiesPage.xaml.cs +++ b/src/Files.App/Views/Properties/MainPropertiesPage.xaml.cs @@ -26,7 +26,7 @@ public MainPropertiesPage() { InitializeComponent(); - if (FilePropertiesHelpers.FlowDirectionSettingIsRightToLeft) + if (AppLanguageHelper.IsPreferredLanguageRtl) FlowDirection = FlowDirection.RightToLeft; } diff --git a/src/Files.App/Views/Shells/BaseShellPage.cs b/src/Files.App/Views/Shells/BaseShellPage.cs index fd68fd4770d0..65a60d14d6e4 100644 --- a/src/Files.App/Views/Shells/BaseShellPage.cs +++ b/src/Files.App/Views/Shells/BaseShellPage.cs @@ -176,7 +176,7 @@ public BaseShellPage(CurrentInstanceViewModel instanceViewModel) DisplayFilesystemConsentDialogAsync(); - if (FilePropertiesHelpers.FlowDirectionSettingIsRightToLeft) + if (AppLanguageHelper.IsPreferredLanguageRtl) FlowDirection = FlowDirection.RightToLeft; ToolbarViewModel.ToolbarPathItemInvoked += ShellPage_NavigationRequested; From 6b8a578ead1bf99607b1b612ba99756364fe5f5e Mon Sep 17 00:00:00 2001 From: Corvin <43533385+corvinsz@users.noreply.github.com> Date: Thu, 10 Jul 2025 04:49:41 +0200 Subject: [PATCH 040/107] Code Quality: Use newer syntaxes for ArgumentException handling (#17258) --- src/Files.App/Extensions/EnumExtensions.cs | 2 +- .../Helpers/WMI/ManagementEventWatcher.cs | 30 ++++--------------- .../Services/App/AppUpdateSideloadService.cs | 3 +- .../DefaultSettingsSerializer.cs | 4 +-- .../Utils/Shell/ShellLibraryFolders.cs | 6 ++-- .../Storage/StorageItems/ZipStorageFolder.cs | 5 +--- .../Extensions/StringExtensions.cs | 22 ++++---------- 7 files changed, 18 insertions(+), 54 deletions(-) diff --git a/src/Files.App/Extensions/EnumExtensions.cs b/src/Files.App/Extensions/EnumExtensions.cs index e1feaff30c2b..3d5a4b7ecbde 100644 --- a/src/Files.App/Extensions/EnumExtensions.cs +++ b/src/Files.App/Extensions/EnumExtensions.cs @@ -15,7 +15,7 @@ public static TEnum GetEnum(string text) where TEnum : struct throw new InvalidOperationException("Generic parameter 'TEnum' must be an enum."); } - return (TEnum)Enum.Parse(typeof(TEnum), text); + return Enum.Parse(text); } } } diff --git a/src/Files.App/Helpers/WMI/ManagementEventWatcher.cs b/src/Files.App/Helpers/WMI/ManagementEventWatcher.cs index 6de09f630c47..5c74ae665683 100644 --- a/src/Files.App/Helpers/WMI/ManagementEventWatcher.cs +++ b/src/Files.App/Helpers/WMI/ManagementEventWatcher.cs @@ -51,10 +51,7 @@ public ManagementEventWatcher(WqlEventQuery query) { string queryExpression = query.QueryExpression; - if (string.IsNullOrWhiteSpace(queryExpression)) - { - throw new ArgumentNullException(nameof(queryExpression)); - } + ArgumentNullException.ThrowIfNullOrWhiteSpace(queryExpression); _nameSpace = DefaultNameSpace; _queryDialect = DefaultQueryDialect; @@ -70,10 +67,7 @@ public ManagementEventWatcher(WqlEventQuery query) /// public ManagementEventWatcher(string queryDialect, string queryExpression) { - if (string.IsNullOrWhiteSpace(queryExpression)) - { - throw new ArgumentNullException(nameof(queryExpression)); - } + ArgumentNullException.ThrowIfNullOrWhiteSpace(queryExpression); _nameSpace = DefaultNameSpace; _queryDialect = queryDialect ?? DefaultQueryDialect; @@ -90,10 +84,7 @@ public ManagementEventWatcher(string queryDialect, string queryExpression) /// public ManagementEventWatcher(string nameSpace, string queryDialect, string queryExpression) { - if (string.IsNullOrWhiteSpace(queryExpression)) - { - throw new ArgumentNullException(nameof(queryExpression)); - } + ArgumentNullException.ThrowIfNullOrWhiteSpace(queryExpression); _nameSpace = nameSpace ?? DefaultNameSpace; _queryDialect = queryDialect ?? DefaultQueryDialect; @@ -111,10 +102,7 @@ public ManagementEventWatcher(string nameSpace, string queryDialect, string quer /// public ManagementEventWatcher(string computerName, string nameSpace, string queryDialect, string queryExpression) { - if (string.IsNullOrWhiteSpace(queryExpression)) - { - throw new ArgumentNullException(nameof(queryExpression)); - } + ArgumentNullException.ThrowIfNullOrWhiteSpace(queryExpression); _computerName = computerName; _nameSpace = nameSpace ?? DefaultNameSpace; @@ -160,10 +148,7 @@ public void Start() { lock (_myLock) { - if (_isDisposed) - { - throw new ObjectDisposedException(nameof(ManagementEventWatcher)); - } + ObjectDisposedException.ThrowIf(_isDisposed, this); if (_cimWatcherStatus != CimWatcherStatus.Default && _cimWatcherStatus != CimWatcherStatus.Stopped) { @@ -180,10 +165,7 @@ public void Stop() { lock (_myLock) { - if (_isDisposed) - { - throw new ObjectDisposedException(nameof(ManagementEventWatcher)); - } + ObjectDisposedException.ThrowIf(_isDisposed, this); if (_cimWatcherStatus != CimWatcherStatus.Started) { diff --git a/src/Files.App/Services/App/AppUpdateSideloadService.cs b/src/Files.App/Services/App/AppUpdateSideloadService.cs index 25df4e538652..bbea36a8509e 100644 --- a/src/Files.App/Services/App/AppUpdateSideloadService.cs +++ b/src/Files.App/Services/App/AppUpdateSideloadService.cs @@ -87,8 +87,7 @@ public async Task CheckForUpdatesAsync() XmlSerializer xml = new XmlSerializer(typeof(AppInstaller)); var appInstaller = (AppInstaller?)xml.Deserialize(stream); - if (appInstaller is null) - throw new ArgumentNullException(nameof(appInstaller)); + ArgumentNullException.ThrowIfNull(appInstaller); var remoteVersion = new Version(appInstaller.Version); diff --git a/src/Files.App/Utils/Serialization/Implementation/DefaultSettingsSerializer.cs b/src/Files.App/Utils/Serialization/Implementation/DefaultSettingsSerializer.cs index 9a3cf4a30804..db37b20cd7f5 100644 --- a/src/Files.App/Utils/Serialization/Implementation/DefaultSettingsSerializer.cs +++ b/src/Files.App/Utils/Serialization/Implementation/DefaultSettingsSerializer.cs @@ -36,14 +36,14 @@ public bool CreateFile(string path) /// public string ReadFromFile() { - _ = _filePath ?? throw new ArgumentNullException(nameof(_filePath)); + ArgumentNullException.ThrowIfNull(_filePath); return ReadStringFromFile(_filePath); } public bool WriteToFile(string? text) { - _ = _filePath ?? throw new ArgumentNullException(nameof(_filePath)); + ArgumentNullException.ThrowIfNull(_filePath); return WriteStringToFile(_filePath, text); } diff --git a/src/Files.App/Utils/Shell/ShellLibraryFolders.cs b/src/Files.App/Utils/Shell/ShellLibraryFolders.cs index a4499c245c98..ee33126d09c3 100644 --- a/src/Files.App/Utils/Shell/ShellLibraryFolders.cs +++ b/src/Files.App/Utils/Shell/ShellLibraryFolders.cs @@ -38,8 +38,7 @@ bool ICollection.IsReadOnly /// location public void Add(ShellItem location) { - if (location is null) - throw new ArgumentNullException(nameof(location)); + ArgumentNullException.ThrowIfNull(location); _lib.AddFolder(location.IShellItem); } @@ -52,8 +51,7 @@ public void Add(ShellItem location) /// location public bool Remove(ShellItem location) { - if (location is null) - throw new ArgumentNullException(nameof(location)); + ArgumentNullException.ThrowIfNull(location); try { diff --git a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs index 0614a192fdd1..9c0c2d6677ca 100644 --- a/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs +++ b/src/Files.App/Utils/Storage/StorageItems/ZipStorageFolder.cs @@ -47,10 +47,7 @@ public ZipStorageFolder(string path, string containerPath, ArchiveFileInfo entry => DateCreated = entry.CreationTime == DateTime.MinValue ? DateTimeOffset.MinValue : entry.CreationTime; public ZipStorageFolder(BaseStorageFile backingFile) { - if (string.IsNullOrEmpty(backingFile.Path)) - { - throw new ArgumentException("Backing file Path cannot be null"); - } + ArgumentException.ThrowIfNullOrEmpty(backingFile.Path); Name = IO.Path.GetFileName(backingFile.Path.TrimEnd('\\', '/')); Path = backingFile.Path; this.containerPath = backingFile.Path; diff --git a/src/Files.Shared/Extensions/StringExtensions.cs b/src/Files.Shared/Extensions/StringExtensions.cs index d123b0241f54..38829885fd73 100644 --- a/src/Files.Shared/Extensions/StringExtensions.cs +++ b/src/Files.Shared/Extensions/StringExtensions.cs @@ -13,14 +13,8 @@ public static class StringExtensions /// The substring. public static string Left(this string value, int length) { - if (value is null) - { - throw new ArgumentNullException(nameof(value)); - } - if (length < 0) - { - throw new ArgumentOutOfRangeException(nameof(length), length, "Length is less than zero"); - } + ArgumentNullException.ThrowIfNull(value); + ArgumentOutOfRangeException.ThrowIfLessThan(length, 0); return length > value.Length ? value : value.Substring(0, length); } @@ -31,16 +25,10 @@ public static string Left(this string value, int length) /// The substring. public static string Right(this string value, int length) { - if (value is null) - { - throw new ArgumentNullException(nameof(value)); - } - if (length < 0) - { - throw new ArgumentOutOfRangeException(nameof(length), length, "Length is less than zero"); - } + ArgumentNullException.ThrowIfNull(value); + ArgumentOutOfRangeException.ThrowIfLessThan(length, 0); - return length > value.Length ? value : value.Substring(value.Length - length); + return length > value.Length ? value : value[^length..]; } } } From 4ee893b473ba7fa39708a7f4d2f0e6b2d954d35f Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:31:17 -0400 Subject: [PATCH 041/107] Code Quality: Unlock search mode --- src/Files.App.Controls/Omnibar/Omnibar.xaml | 1 - src/Files.App/UserControls/NavigationToolbar.xaml | 1 - src/Files.App/UserControls/NavigationToolbar.xaml.cs | 2 ++ .../ViewModels/UserControls/NavigationToolbarViewModel.cs | 3 +-- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.xaml b/src/Files.App.Controls/Omnibar/Omnibar.xaml index daf0c4330200..dc84422b9673 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.xaml +++ b/src/Files.App.Controls/Omnibar/Omnibar.xaml @@ -131,7 +131,6 @@ Width="{StaticResource OmnibarModeDefaultClickAreaWidth}" Height="{StaticResource OmnibarModeDefaultHeight}" Margin="1" - VerticalAlignment="Stretch" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0" diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 8a34b82c85c0..7ee4dddc798c 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -462,7 +462,6 @@ IconOnActive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Search}, IsFilled=True}" IconOnInactive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Search}, IconType=Outline}" IsAutoFocusEnabled="True" - IsEnabled="False" ItemsSource="{x:Bind ViewModel.OmnibarSearchModeSuggestionItems, Mode=OneWay}" ModeName="{x:Bind Commands.Search.LabelWithHotKey, Mode=OneWay}" PlaceholderText="{helpers:ResourceString Name=OmnibarSearchModeTextPlaceholder}" diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index b63b0a989138..2e1aa40899e1 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -507,6 +507,8 @@ private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) BreadcrumbBar.Focus(FocusState.Keyboard); else if (currentSelectedMode == OmnibarCommandPaletteMode) OmnibarCommandPaletteMode.Focus(FocusState.Keyboard); + else if (currentSelectedMode == OmnibarSearchMode) + OmnibarSearchMode.Focus(FocusState.Keyboard); } } diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 3ea5ec82beed..6d854326ebda 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -765,8 +765,7 @@ public void SwitchToSearchMode() { if (EnableOmnibar) { - // TODO enable when implemented - // OmnibarCurrentSelectedModeName = OmnibarSearchModeName; + OmnibarCurrentSelectedModeName = OmnibarSearchModeName; } else { From 157f7bfb6215b8a4ac6393de654060ed7423d9da Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 10 Jul 2025 11:36:33 -0400 Subject: [PATCH 042/107] Code Quality: Enabled entering searches --- src/Files.App/UserControls/NavigationToolbar.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 2e1aa40899e1..d26e4705af52 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -316,6 +316,7 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes // Search mode else if (mode == OmnibarSearchMode) { + ContentPageContext.ShellPage?.SubmitSearch(args.Text); } } From d1df7b962ccec1c6eeded7e1a3e3fde65af9ab6c Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 10 Jul 2025 16:08:44 -0400 Subject: [PATCH 043/107] Feature: Removed setting for displaying the home button --- .../Data/Contracts/IAppearanceSettingsService.cs | 5 ----- .../Services/Settings/AppearanceSettingsService.cs | 7 ------- src/Files.App/Strings/en-US/Resources.resw | 3 --- src/Files.App/UserControls/NavigationToolbar.xaml | 12 ------------ .../UserControls/NavigationToolbar.xaml.cs | 2 +- .../ViewModels/Settings/AppearanceViewModel.cs | 14 -------------- .../UserControls/NavigationToolbarViewModel.cs | 4 ---- src/Files.App/Views/Settings/AppearancePage.xaml | 8 -------- 8 files changed, 1 insertion(+), 54 deletions(-) diff --git a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs index dc684c0e7226..1324463a973b 100644 --- a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs +++ b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs @@ -107,11 +107,6 @@ public interface IAppearanceSettingsService : IBaseSettingsService, INotifyPrope /// bool ShowTabActions { get; set; } - /// - /// Gets or sets a value whether the home button should be displayed. - /// - bool ShowHomeButton { get; set; } - /// /// Gets or sets a value whether the shelf pane toggle button should be displayed. /// diff --git a/src/Files.App/Services/Settings/AppearanceSettingsService.cs b/src/Files.App/Services/Settings/AppearanceSettingsService.cs index 5d53b29eccd7..cd56efe4b0f1 100644 --- a/src/Files.App/Services/Settings/AppearanceSettingsService.cs +++ b/src/Files.App/Services/Settings/AppearanceSettingsService.cs @@ -145,13 +145,6 @@ public bool ShowTabActions set => Set(value); } - /// - public bool ShowHomeButton - { - get => Get(false); - set => Set(value); - } - /// public bool ShowShelfPaneToggleButton { diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index c0ba4fad97f7..9089acfcd316 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4078,9 +4078,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 7ee4dddc798c..697ae5df3c36 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -215,18 +215,6 @@ ToolTipService.ToolTip="{x:Bind Commands.RefreshItems.LabelWithHotKey, Mode=OneWay}"> - - diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index d26e4705af52..1a382b1029d1 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -253,7 +253,7 @@ private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs return; var previousControl = args.OldFocusedElement as FrameworkElement; - if (previousControl?.Name == nameof(HomeButton) || previousControl?.Name == nameof(Refresh)) + if (previousControl?.Name == nameof(Refresh)) ViewModel.IsEditModeEnabled = true; } diff --git a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs index ef273de6af22..5ed3f94c0958 100644 --- a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs @@ -309,20 +309,6 @@ public bool ShowTabActions } } - public bool ShowHomeButton - { - get => UserSettingsService.AppearanceSettingsService.ShowHomeButton; - set - { - if (value != UserSettingsService.AppearanceSettingsService.ShowHomeButton) - { - UserSettingsService.AppearanceSettingsService.ShowHomeButton = value; - - OnPropertyChanged(); - } - } - } - public bool ShowShelfPaneToggleButton { get => UserSettingsService.AppearanceSettingsService.ShowShelfPaneToggleButton; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 6d854326ebda..aec32b8bc425 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -84,7 +84,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool SearchHasFocus { get; private set; } - public bool ShowHomeButton => AppearanceSettingsService.ShowHomeButton; public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; public bool ShowStatusCenterButton => AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.Always || @@ -349,9 +348,6 @@ public NavigationToolbarViewModel() { switch (e.PropertyName) { - case nameof(AppearanceSettingsService.ShowHomeButton): - OnPropertyChanged(nameof(ShowHomeButton)); - break; case nameof(AppearanceSettingsService.StatusCenterVisibility): OnPropertyChanged(nameof(ShowStatusCenterButton)); break; diff --git a/src/Files.App/Views/Settings/AppearancePage.xaml b/src/Files.App/Views/Settings/AppearancePage.xaml index 64af3aa0e41a..31e248aea649 100644 --- a/src/Files.App/Views/Settings/AppearancePage.xaml +++ b/src/Files.App/Views/Settings/AppearancePage.xaml @@ -250,14 +250,6 @@ - - - - - Date: Sun, 13 Jul 2025 23:44:14 -0400 Subject: [PATCH 044/107] Code Quality: Fixed selecting Omnibar suggestions via keyboard (#17260) --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index f92dd51189da..3fb625cd3d24 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -131,14 +131,12 @@ private void AutoSuggestBox_TextChanged(object sender, TextChangedEventArgs e) // UpdateSuggestionListView(); - if (_textChangeReason is not OmnibarTextChangeReason.SuggestionChosen and - not OmnibarTextChangeReason.ProgrammaticChange) + if (_textChangeReason is OmnibarTextChangeReason.ProgrammaticChange) + _textBox.SelectAll(); + else { - _textChangeReason = OmnibarTextChangeReason.UserInput; _userInput = _textBox.Text; } - else if (_textChangeReason is OmnibarTextChangeReason.ProgrammaticChange) - _textBox.SelectAll(); TextChanged?.Invoke(this, new(CurrentSelectedMode, _textChangeReason)); From 91e7e7aa16017a2435081ee61a30e8e3de5eca26 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Mon, 14 Jul 2025 23:42:49 +0900 Subject: [PATCH 045/107] Code Quality: Fixed an issue where suggestions in Path mode don't update when switching tabs (#17263) --- src/Files.App.Controls/Omnibar/Omnibar.cs | 6 ++++++ src/Files.App.Controls/Omnibar/OmnibarMode.cs | 8 ++++++- .../UserControls/NavigationToolbar.xaml | 21 +++++++++++-------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index 80d310061eb5..131ca89f4ef5 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -219,6 +219,12 @@ internal protected bool TryToggleIsSuggestionsPopupOpen(bool wantToOpen) return false; } + if (CurrentSelectedMode is not null) + { + _textBoxSuggestionsListView.ItemTemplate = CurrentSelectedMode.ItemTemplate; + _textBoxSuggestionsListView.ItemsSource = CurrentSelectedMode.ItemsSource; + } + _textBoxSuggestionsPopup.IsOpen = wantToOpen; GlobalHelper.WriteDebugStringForOmnibar("The suggestions pop-up is open."); diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.cs index e91e05abe24b..c81216c25a08 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.cs @@ -35,7 +35,13 @@ protected override void OnApplyTemplate() _modeButton = GetTemplateChild(TemplatePartName_ModeButton) as Button ?? throw new MissingFieldException($"Could not find {TemplatePartName_ModeButton} in the given {nameof(OmnibarMode)}'s style."); - + + RegisterPropertyChangedCallback(ItemsSourceProperty, (d, dp) => + { + if (_ownerRef is not null && _ownerRef.TryGetTarget(out var owner)) + owner.TryToggleIsSuggestionsPopupOpen(true); + }); + Loaded += OmnibarMode_Loaded; _modeButton.PointerEntered += ModeButton_PointerEntered; _modeButton.PointerPressed += ModeButton_PointerPressed; diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 697ae5df3c36..a9fa7e44ff6a 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -407,26 +407,29 @@ - + - + + HotKeys="{x:Bind HotKeys, Mode=OneWay}" /> From 691ecdc3d1a68391f61d3eddf73b8e3c4d9cb2cb Mon Sep 17 00:00:00 2001 From: Saravanan Ganapathi Date: Tue, 15 Jul 2025 01:31:16 +0530 Subject: [PATCH 046/107] Feature: Add support for OX Drive integration (#17267) --- src/Files.App/Utils/Cloud/CloudProviders.cs | 4 +- .../Utils/Cloud/Detector/CloudDetector.cs | 1 + .../Cloud/Detector/OXDriveCloudDetector.cs | 80 +++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs diff --git a/src/Files.App/Utils/Cloud/CloudProviders.cs b/src/Files.App/Utils/Cloud/CloudProviders.cs index 89526ec02aaa..e708103929e0 100644 --- a/src/Files.App/Utils/Cloud/CloudProviders.cs +++ b/src/Files.App/Utils/Cloud/CloudProviders.cs @@ -49,6 +49,8 @@ public enum CloudProviders SyncDrive, - MagentaCloud + MagentaCloud, + + OXDrive } } diff --git a/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs index 940eedcf61d7..ccb376c556f5 100644 --- a/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs @@ -33,6 +33,7 @@ private static IEnumerable EnumerateDetectors() yield return new BoxCloudDetector(); yield return new GenericCloudDetector(); yield return new SynologyDriveCloudDetector(); + yield return new OXDriveCloudDetector(); } } } diff --git a/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs new file mode 100644 index 000000000000..b53fdfb15623 --- /dev/null +++ b/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs @@ -0,0 +1,80 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Files.App.Utils.Cloud; +using Microsoft.Win32; +using System.IO; +using System.Text.Json; +using Windows.Storage; +using static Vanara.PInvoke.Gdi32; + +namespace Files.App.Utils.Cloud +{ + /// + /// Provides an utility for OX Drive Cloud detection. + /// + public sealed class OXDriveCloudDetector : AbstractCloudDetector + { + protected override async IAsyncEnumerable GetProviders() + { + var syncFolder = await GetOXDriveSyncFolder(); + if (!string.IsNullOrEmpty(syncFolder)) + { + var iconFile = GetOXDriveIconFile(); + yield return new CloudProvider(CloudProviders.OXDrive) + { + Name = "OX Drive", + SyncFolder = syncFolder, + IconData = iconFile?.IconData + }; + } + } + public static async Task GetOXDriveSyncFolder() + { + var jsonPath = Path.Combine(UserDataPaths.GetDefault().LocalAppData, "Open-Xchange", "OXDrive", "userConfig.json"); + if (!File.Exists(jsonPath)) + return null; + + var configFile = await StorageFile.GetFileFromPathAsync(jsonPath); + using var jsonDoc = JsonDocument.Parse(await FileIO.ReadTextAsync(configFile)); + var jsonElem = jsonDoc.RootElement; + + string? syncFolderPath = null; + + if (jsonElem.TryGetProperty("Accounts", out var accounts) && accounts.GetArrayLength() > 0) + { + var account = accounts[0]; + + if (account.TryGetProperty("MainFolderPath", out var folderPathElem)) + syncFolderPath = folderPathElem.GetString(); + } + + return syncFolderPath; + } + + private static IconFileInfo? GetOXDriveIconFile() + { + var installPath = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Open-Xchange\OXDrive", "InstallDir", null) as string; + + // Fallback to default known path if not found in the registry. + if (string.IsNullOrEmpty(installPath)) + { + var pfX86 = Environment.GetEnvironmentVariable("ProgramFiles(x86)"); + if (string.IsNullOrEmpty(pfX86)) + return null; + + installPath = Path.Combine(pfX86, "Open-Xchange", "OXDrive"); + } + + var oxDriveFilePath = Path.Combine(installPath, "OXDrive.exe"); + if (!File.Exists(oxDriveFilePath)) + { + return null; + } + + // Extract the icon from the OXDrive executable (though it is executable, it contains icons) + var icons = Win32Helper.ExtractSelectedIconsFromDLL(oxDriveFilePath, new List { 0 }, 32); + return icons.FirstOrDefault(); + } + } +} From 68d16a2412022bf81712500c91962f917092d303 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 15 Jul 2025 17:06:24 -0400 Subject: [PATCH 047/107] Feature: Added a filter header (#17268) Signed-off-by: Yair <39923744+yaira2@users.noreply.github.com> Co-authored-by: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> --- .../Actions/Show/ToggleFilterHeaderAction.cs | 50 +++++++++++++++++ .../Data/Commands/Manager/CommandCodes.cs | 1 + .../Data/Commands/Manager/CommandManager.cs | 2 + .../Data/Commands/Manager/ICommandManager.cs | 1 + .../Data/Contracts/IGeneralSettingsService.cs | 10 ++++ .../Settings/GeneralSettingsService.cs | 12 ++++ .../Services/Settings/UserSettingsService.cs | 1 + src/Files.App/Strings/en-US/Resources.resw | 12 ++++ .../UserControls/NavigationToolbar.xaml | 4 ++ .../UserControls/NavigationToolbar.xaml.cs | 25 ++++++++- src/Files.App/UserControls/Toolbar.xaml | 15 +++++ src/Files.App/ViewModels/ShellViewModel.cs | 42 ++++++++++++-- .../NavigationToolbarViewModel.cs | 55 +++++++++++++++++++ .../Views/Shells/ModernShellPage.xaml | 39 +++++++++++++ .../Views/Shells/ModernShellPage.xaml.cs | 28 +++++++++- 15 files changed, 288 insertions(+), 9 deletions(-) create mode 100644 src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs diff --git a/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs b/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs new file mode 100644 index 000000000000..0121a267dd6a --- /dev/null +++ b/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs @@ -0,0 +1,50 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using CommunityToolkit.WinUI; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; + +namespace Files.App.Actions +{ + internal sealed partial class ToggleFilterHeaderAction : ObservableObject, IToggleAction + { + private readonly IGeneralSettingsService generalSettingsService = Ioc.Default.GetRequiredService(); + + public string Label + => Strings.ToggleFilterHeader.GetLocalizedResource(); + + public string Description + => Strings.ToggleFilterHeaderDescription.GetLocalizedResource(); + + public RichGlyph Glyph + => new(themedIconStyle: "App.ThemedIcons.Filter"); + + public bool IsOn + => generalSettingsService.ShowFilterHeader; + + public ToggleFilterHeaderAction() + { + generalSettingsService.PropertyChanged += GeneralSettingsService_PropertyChanged; + } + + public Task ExecuteAsync(object? parameter = null) + { + generalSettingsService.ShowFilterHeader = !IsOn; + + if (IsOn) + { + var filterTextBox = (MainWindow.Instance.Content as Frame)?.FindDescendant("FilterTextBox") as AutoSuggestBox; + filterTextBox?.Focus(FocusState.Programmatic); + } + + return Task.CompletedTask; + } + + private void GeneralSettingsService_PropertyChanged(object? sender, PropertyChangedEventArgs e) + { + if (e.PropertyName is nameof(GeneralSettingsService.ShowFilterHeader)) + OnPropertyChanged(nameof(IsOn)); + } + } +} diff --git a/src/Files.App/Data/Commands/Manager/CommandCodes.cs b/src/Files.App/Data/Commands/Manager/CommandCodes.cs index edaa553cba0e..3d89d1ecc476 100644 --- a/src/Files.App/Data/Commands/Manager/CommandCodes.cs +++ b/src/Files.App/Data/Commands/Manager/CommandCodes.cs @@ -27,6 +27,7 @@ public enum CommandCodes ToggleInfoPane, ToggleToolbar, ToggleShelfPane, + ToggleFilterHeader, // File System CopyItem, diff --git a/src/Files.App/Data/Commands/Manager/CommandManager.cs b/src/Files.App/Data/Commands/Manager/CommandManager.cs index a0aa75e55b31..29f8a9f25c1c 100644 --- a/src/Files.App/Data/Commands/Manager/CommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/CommandManager.cs @@ -58,6 +58,7 @@ public IRichCommand this[HotKey hotKey] public IRichCommand ToggleInfoPane => commands[CommandCodes.ToggleInfoPane]; public IRichCommand ToggleToolbar => commands[CommandCodes.ToggleToolbar]; public IRichCommand ToggleShelfPane => commands[CommandCodes.ToggleShelfPane]; + public IRichCommand ToggleFilterHeader => commands[CommandCodes.ToggleFilterHeader]; public IRichCommand SelectAll => commands[CommandCodes.SelectAll]; public IRichCommand InvertSelection => commands[CommandCodes.InvertSelection]; public IRichCommand ClearSelection => commands[CommandCodes.ClearSelection]; @@ -264,6 +265,7 @@ public IEnumerator GetEnumerator() => [CommandCodes.ToggleInfoPane] = new ToggleInfoPaneAction(), [CommandCodes.ToggleToolbar] = new ToggleToolbarAction(), [CommandCodes.ToggleShelfPane] = new ToggleShelfPaneAction(), + [CommandCodes.ToggleFilterHeader] = new ToggleFilterHeaderAction(), [CommandCodes.SelectAll] = new SelectAllAction(), [CommandCodes.InvertSelection] = new InvertSelectionAction(), [CommandCodes.ClearSelection] = new ClearSelectionAction(), diff --git a/src/Files.App/Data/Commands/Manager/ICommandManager.cs b/src/Files.App/Data/Commands/Manager/ICommandManager.cs index d0ceb7699628..1a891037c5f7 100644 --- a/src/Files.App/Data/Commands/Manager/ICommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/ICommandManager.cs @@ -32,6 +32,7 @@ public interface ICommandManager : IEnumerable IRichCommand ToggleInfoPane { get; } IRichCommand ToggleToolbar { get; } IRichCommand ToggleShelfPane { get; } + IRichCommand ToggleFilterHeader { get; } IRichCommand CopyItem { get; } IRichCommand CopyItemPath { get; } diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index b53fb24b756a..adc5d71eb66e 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -50,6 +50,11 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// List PathHistoryList { get; set; } + /// + /// A list containing previous search queries. + /// + List PreviousSearchQueriesList { get; set; } + /// /// Gets or sets a value indicating which date and time format to use. /// @@ -295,6 +300,11 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// bool ShowShelfPane { get; set; } + /// + /// Gets or sets a value whether the filter header should be displayed. + /// + bool ShowFilterHeader { get; set; } + /// /// Gets or sets a value indicating whether or not to enable the Omnibar. /// diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index 0cf219d65a5e..f1eb5b985944 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -65,6 +65,12 @@ public List PathHistoryList set => Set(value); } + public List PreviousSearchQueriesList + { + get => Get>(null); + set => Set(value); + } + public DateTimeFormats DateTimeFormat { get => Get(DateTimeFormats.Application); @@ -363,6 +369,12 @@ public bool ShowShelfPane set => Set(value); } + public bool ShowFilterHeader + { + get => Get(false); + set => Set(value); + } + public bool EnableOmnibar { get => Get(false); diff --git a/src/Files.App/Services/Settings/UserSettingsService.cs b/src/Files.App/Services/Settings/UserSettingsService.cs index d6c82bd8b36c..8af8a85a37db 100644 --- a/src/Files.App/Services/Settings/UserSettingsService.cs +++ b/src/Files.App/Services/Settings/UserSettingsService.cs @@ -74,6 +74,7 @@ public override object ExportSettings() export.Remove(nameof(GeneralSettingsService.LastSessionTabList)); export.Remove(nameof(GeneralSettingsService.LastCrashedTabList)); export.Remove(nameof(GeneralSettingsService.PathHistoryList)); + export.Remove(nameof(GeneralSettingsService.PreviousSearchQueriesList)); return JsonSettingsSerializer.SerializeToJson(export); } diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 9089acfcd316..d1eb58490662 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4261,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index a9fa7e44ff6a..b44a3064260f 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -30,6 +30,10 @@ + diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 1a382b1029d1..291e4ee96223 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -316,7 +316,22 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes // Search mode else if (mode == OmnibarSearchMode) { - ContentPageContext.ShellPage?.SubmitSearch(args.Text); + var shellPage = ContentPageContext.ShellPage; + + if (args.Item is SuggestionModel item && !string.IsNullOrWhiteSpace(item.ItemPath) && shellPage is not null) + await NavigationHelpers.OpenPath(item.ItemPath, shellPage); + else + { + var searchQuery = args.Item is SuggestionModel x && !string.IsNullOrWhiteSpace(x.Name) + ? x.Name + : args.Text; + + shellPage?.SubmitSearch(searchQuery); // use the resolved shellPage for consistency + ViewModel.SaveSearchQueryToList(searchQuery); + } + + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); + return; } } @@ -338,6 +353,7 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); } } @@ -456,7 +472,12 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => } else if (e.NewMode == OmnibarSearchMode) { + if (!ViewModel.InstanceViewModel.IsPageTypeSearchResults) + ViewModel.OmnibarSearchModeText = string.Empty; + else + ViewModel.OmnibarSearchModeText = ViewModel.InstanceViewModel.CurrentSearchQuery; + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); } } @@ -486,7 +507,7 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - + await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); } } } diff --git a/src/Files.App/UserControls/Toolbar.xaml b/src/Files.App/UserControls/Toolbar.xaml index a167218e65e0..45181870f195 100644 --- a/src/Files.App/UserControls/Toolbar.xaml +++ b/src/Files.App/UserControls/Toolbar.xaml @@ -500,6 +500,21 @@ Grid.Column="1" DefaultLabelPosition="Right"> + + + + + SetProperty(ref _FolderBackgroundImageHorizontalAlignment, value); } + private ImageSource? _FolderThumbnailImageSource; + public ImageSource? FolderThumbnailImageSource + { + get => _FolderThumbnailImageSource; + private set => SetProperty(ref _FolderThumbnailImageSource, value); + } + + public bool ShowFilterHeader => + UserSettingsService.GeneralSettingsService.ShowFilterHeader && + WorkingDirectory != "Home" && + WorkingDirectory != "ReleaseNotes" && + WorkingDirectory != "Settings"; + private GitProperties _EnabledGitProperties; public GitProperties EnabledGitProperties { @@ -213,7 +226,10 @@ public async Task SetWorkingDirectoryAsync(string? value) GitDirectory = GitHelpers.GetGitRepositoryPath(WorkingDirectory, pathRoot); IsValidGitDirectory = !string.IsNullOrEmpty((await GitHelpers.GetRepositoryHead(GitDirectory))?.Name); + _ = UpdateFolderThumbnailImageSource(); + OnPropertyChanged(nameof(WorkingDirectory)); + OnPropertyChanged(nameof(ShowFilterHeader)); } public async Task> GetFolderFromPathAsync(string value, CancellationToken cancellationToken = default) @@ -275,6 +291,11 @@ public EmptyTextType EmptyTextType set => SetProperty(ref emptyTextType, value); } + public async Task UpdateFolderThumbnailImageSource() + { + FolderThumbnailImageSource = await NavigationHelpers.GetIconForPathAsync(WorkingDirectory); + } + public async Task UpdateSortOptionStatusAsync() { OnPropertyChanged(nameof(IsSortedByName)); @@ -676,6 +697,9 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() => await OrderFilesAndFoldersAsync(); await ApplyFilesAndFoldersChangesAsync(); break; + case nameof(UserSettingsService.GeneralSettingsService.ShowFilterHeader): + OnPropertyChanged(nameof(ShowFilterHeader)); + break; } } @@ -715,7 +739,13 @@ public void UpdateEmptyTextType() EmptyTextType = FilesAndFolders.Count == 0 ? (IsSearchResults ? EmptyTextType.NoSearchResultsFound : EmptyTextType.FolderEmpty) : EmptyTextType.None; } - public string? FilesAndFoldersFilter { get; set; } + private string? _filesAndFoldersFilter; + public string? FilesAndFoldersFilter + { + get => _filesAndFoldersFilter; + set => SetProperty(ref _filesAndFoldersFilter, value); + } + // Apply changes immediately after manipulating on filesAndFolders completed public async Task ApplyFilesAndFoldersChangesAsync() @@ -1339,7 +1369,7 @@ public Task UpdateItemsTags(Dictionary newTags) return dispatcherQueue.EnqueueOrInvokeAsync(() => { int count = newTags.Count; - foreach(var item in FilesAndFolders) + foreach (var item in FilesAndFolders) { if (newTags.TryGetValue(item.ItemPath, out var tags)) { @@ -1635,7 +1665,7 @@ private async Task EnumerateItemsFromStandardFolderAsync(string path, Cance !isShellFolder && !isWslDistro; bool isNetdisk = false; - + try { // Special handling for network drives @@ -1643,7 +1673,7 @@ private async Task EnumerateItemsFromStandardFolderAsync(string path, Cance isNetdisk = (new DriveInfo(path).DriveType == System.IO.DriveType.Network); } catch { } - + bool isFtp = FtpHelpers.IsFtpPath(path); bool enumFromStorageFolder = isBoxFolder || isFtp; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index aec32b8bc425..5a156a255218 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -1035,6 +1035,18 @@ private void SavePathToHistory(string path) UserSettingsService.GeneralSettingsService.PathHistoryList = pathHistoryList; } + public void SaveSearchQueryToList(string searchQuery) + { + var previousSearchQueriesList = UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList?.ToList() ?? []; + previousSearchQueriesList.Remove(searchQuery); + previousSearchQueriesList.Insert(0, searchQuery); + + if (previousSearchQueriesList.Count > MaxSuggestionsCount) + UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList = previousSearchQueriesList.RemoveFrom(MaxSuggestionsCount + 1); + else + UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList = previousSearchQueriesList; + } + private static async Task LaunchApplicationFromPath(string currentInput, string workingDir) { var args = CommandLineParser.SplitArguments(currentInput); @@ -1243,6 +1255,49 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() } } + public async Task PopulateOmnibarSuggestionsForSearchMode() + { + if (ContentPageContext.ShellPage is null) + return; + + List newSuggestions = []; + + if (string.IsNullOrWhiteSpace(OmnibarSearchModeText)) + { + var previousSearchQueries = UserSettingsService.GeneralSettingsService.PreviousSearchQueriesList; + if (previousSearchQueries is not null) + newSuggestions.AddRange(previousSearchQueries.Select(query => new SuggestionModel(query, true))); + } + else + { + var search = new FolderSearch + { + Query = OmnibarSearchModeText, + Folder = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory, + MaxItemCount = 10, + }; + + var results = await search.SearchAsync(); + newSuggestions.AddRange(results.Select(result => new SuggestionModel(result))); + } + + // Remove outdated suggestions + var toRemove = OmnibarSearchModeSuggestionItems + .Where(existing => !newSuggestions.Any(newItem => newItem.ItemPath == existing.ItemPath)) + .ToList(); + + foreach (var item in toRemove) + OmnibarSearchModeSuggestionItems.Remove(item); + + // Add new suggestions + var toAdd = newSuggestions + .Where(newItem => !OmnibarSearchModeSuggestionItems.Any(existing => existing.Name == newItem.Name)); + + foreach (var item in toAdd) + OmnibarSearchModeSuggestionItems.Add(item); + } + + [Obsolete("Remove once Omnibar goes out of experimental.")] public async Task SetAddressBarSuggestionsAsync(AutoSuggestBox sender, IShellPage shellpage) { diff --git a/src/Files.App/Views/Shells/ModernShellPage.xaml b/src/Files.App/Views/Shells/ModernShellPage.xaml index 2fb8d79fc7c3..dd55215cda6d 100644 --- a/src/Files.App/Views/Shells/ModernShellPage.xaml +++ b/src/Files.App/Views/Shells/ModernShellPage.xaml @@ -4,6 +4,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:helpers="using:Files.App.Helpers" xmlns:local="using:Files.App.Views.Shells" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wct="using:CommunityToolkit.WinUI" @@ -49,8 +50,13 @@ + + + + + + + + + + + + + diff --git a/src/Files.App/Views/Shells/ModernShellPage.xaml.cs b/src/Files.App/Views/Shells/ModernShellPage.xaml.cs index f876feec5dcf..a5c363549e45 100644 --- a/src/Files.App/Views/Shells/ModernShellPage.xaml.cs +++ b/src/Files.App/Views/Shells/ModernShellPage.xaml.cs @@ -44,6 +44,7 @@ public ModernShellPage() : base(new CurrentInstanceViewModel()) ShellViewModel.PageTypeUpdated += FilesystemViewModel_PageTypeUpdated; ShellViewModel.OnSelectionRequestedEvent += FilesystemViewModel_OnSelectionRequestedEvent; ShellViewModel.GitDirectoryUpdated += FilesystemViewModel_GitDirectoryUpdated; + ShellViewModel.DirectoryInfoUpdated += ShellViewModel_DirectoryInfoUpdated; ToolbarViewModel.PathControlDisplayText = Strings.Home.GetLocalizedResource(); ToolbarViewModel.RefreshWidgetsRequested += ModernShellPage_RefreshWidgetsRequested; @@ -52,6 +53,13 @@ public ModernShellPage() : base(new CurrentInstanceViewModel()) _navigationInteractionTracker.NavigationRequested += OverscrollNavigationRequested; } + private void ShellViewModel_DirectoryInfoUpdated(object sender, EventArgs e) + { + // Regular binding causes issues when refreshing the directory so we set the text manually + if (FilterTextBox?.IsLoaded ?? false) + FilterTextBox.Text = ShellViewModel.FilesAndFoldersFilter ?? string.Empty; + } + private void ModernShellPage_RefreshWidgetsRequested(object sender, EventArgs e) { if (ItemDisplayFrame?.Content is HomePage currentPage) @@ -166,6 +174,7 @@ private async void ItemDisplayFrame_Navigated(object sender, NavigationEventArgs if (parameters.IsLayoutSwitch) FilesystemViewModel_DirectoryInfoUpdated(sender, EventArgs.Empty); + _navigationInteractionTracker.CanNavigateBackward = CanNavigateBackward; _navigationInteractionTracker.CanNavigateForward = CanNavigateForward; } @@ -288,7 +297,7 @@ public override void NavigateHome() }, new SuppressNavigationTransitionInfo()); } - + public override void NavigateToReleaseNotes() { ItemDisplayFrame.Navigate( @@ -347,5 +356,22 @@ public override void NavigateToPath(string? navigationPath, Type? sourcePageType ToolbarViewModel.PathControlDisplayText = ShellViewModel.WorkingDirectory; } + + private async void FilterTextBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) + { + if (args.Reason is AutoSuggestionBoxTextChangeReason.UserInput) + { + ShellViewModel.FilesAndFoldersFilter = sender.Text; + await ShellViewModel.ApplyFilesAndFoldersChangesAsync(); + } + + } + + private void FilterTextBox_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + { + if (e.Key is VirtualKey.Escape && + SlimContentPage is BaseGroupableLayoutPage { IsLoaded: true } svb) + SlimContentPage.ItemManipulationModel.FocusFileList(); + } } } From 9c2e48b49854aec414d98d5100aa72024eeafeaf Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:46:29 -0400 Subject: [PATCH 048/107] Code Quality: Implement IOmnibarTextMemberPathProvider in SuggestionModel --- src/Files.App/Data/Models/SuggestionModel.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Data/Models/SuggestionModel.cs b/src/Files.App/Data/Models/SuggestionModel.cs index c147a8c1eab1..df498be22afb 100644 --- a/src/Files.App/Data/Models/SuggestionModel.cs +++ b/src/Files.App/Data/Models/SuggestionModel.cs @@ -1,11 +1,12 @@ // Copyright (c) Files Community // Licensed under the MIT License. +using Files.App.Controls; using Microsoft.UI.Xaml.Media.Imaging; namespace Files.App.Data.Models { - public sealed partial class SuggestionModel : ObservableObject + public sealed partial class SuggestionModel : ObservableObject, IOmnibarTextMemberPathProvider { public bool IsRecentSearch { get; set; } = false; @@ -76,5 +77,10 @@ public SuggestionModel(string itemName, bool isRecentSearch) IsRecentSearch = isRecentSearch; Name = itemName; } + + public string GetTextMemberPath(string textMemberPath) + { + return Name; + } } } From f995c73e4088160d459021d4eef284254017385e Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 16 Jul 2025 22:48:57 -0400 Subject: [PATCH 049/107] Code Quality: Focus tab content when switching tabs --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 3 --- src/Files.App/Actions/Navigation/NextTabAction.cs | 2 +- src/Files.App/Actions/Navigation/PreviousTabAction.cs | 2 +- .../Data/Contexts/Multitasking/MultitaskingContext.cs | 6 ++++++ src/Files.App/UserControls/NavigationToolbar.xaml.cs | 4 ++++ src/Files.App/ViewModels/MainPageViewModel.cs | 2 +- 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 3fb625cd3d24..0c9c46ca386c 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -56,9 +56,6 @@ private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e) IsFocused = false; IsFocusedChanged?.Invoke(this, new(IsFocused)); - - // Reset to the default mode when Omnibar loses focus - CurrentSelectedMode = Modes?.FirstOrDefault(); } private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) diff --git a/src/Files.App/Actions/Navigation/NextTabAction.cs b/src/Files.App/Actions/Navigation/NextTabAction.cs index b80a9dc724c5..9a34d91a7ddf 100644 --- a/src/Files.App/Actions/Navigation/NextTabAction.cs +++ b/src/Files.App/Actions/Navigation/NextTabAction.cs @@ -36,7 +36,7 @@ public async Task ExecuteAsync(object? parameter = null) // Small delay for the UI to load await Task.Delay(500); - // Refocus on the file list + // Focus the content of the selected tab item (needed for keyboard navigation) (multitaskingContext.CurrentTabItem.TabItemContent as Control)?.Focus(FocusState.Programmatic); } diff --git a/src/Files.App/Actions/Navigation/PreviousTabAction.cs b/src/Files.App/Actions/Navigation/PreviousTabAction.cs index c75104b5ecee..c393ae86055b 100644 --- a/src/Files.App/Actions/Navigation/PreviousTabAction.cs +++ b/src/Files.App/Actions/Navigation/PreviousTabAction.cs @@ -39,7 +39,7 @@ public async Task ExecuteAsync(object? parameter = null) // Small delay for the UI to load await Task.Delay(500); - // Refocus on the file list + // Focus the content of the selected tab item (needed for keyboard navigation) (multitaskingContext.CurrentTabItem.TabItemContent as Control)?.Focus(FocusState.Programmatic); } diff --git a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs index e1ae0e50760e..be9e55cde60c 100644 --- a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs +++ b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using System.Collections.Specialized; @@ -9,6 +10,8 @@ namespace Files.App.Data.Contexts { internal sealed partial class MultitaskingContext : ObservableObject, IMultitaskingContext { + private readonly MainPageViewModel MainPageViewModel = Ioc.Default.GetRequiredService(); + private bool isPopupOpen = false; private ITabBar? control; @@ -69,6 +72,9 @@ private void FocusManager_GotFocus(object? sender, FocusManagerGotFocusEventArgs { int newSelectedIndex = MainPageViewModel.AppInstances.IndexOf(tabItem); UpdateSelectedTabIndex(newSelectedIndex); + + // Focus the content of the selected tab item (needed for pointer navigation) + (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } } diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 291e4ee96223..6ba3d42fb85e 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -510,6 +510,10 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); } } + else + { + Omnibar.CurrentSelectedMode = OmnibarPathMode; + } } private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index de2098cfcd79..666157454b0d 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -390,7 +390,7 @@ private async void ExecuteNavigateToNumberedTabKeyboardAcceleratorCommand(Keyboa // Small delay for the UI to load await Task.Delay(500); - // Refocus on the file list + // Focus the content of the selected tab item (needed for keyboard navigation) (SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } From 160775ff43af7e8244c4594924215fc6b8c3d00d Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 16 Jul 2025 22:53:56 -0400 Subject: [PATCH 050/107] Code Quality: Fixed issue with focusing the filter header --- src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs b/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs index 0121a267dd6a..be1f909b74de 100644 --- a/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs +++ b/src/Files.App/Actions/Show/ToggleFilterHeaderAction.cs @@ -28,17 +28,17 @@ public ToggleFilterHeaderAction() generalSettingsService.PropertyChanged += GeneralSettingsService_PropertyChanged; } - public Task ExecuteAsync(object? parameter = null) + public async Task ExecuteAsync(object? parameter = null) { generalSettingsService.ShowFilterHeader = !IsOn; if (IsOn) { + // Delay to ensure the UI updates before focusing + await Task.Delay(100); var filterTextBox = (MainWindow.Instance.Content as Frame)?.FindDescendant("FilterTextBox") as AutoSuggestBox; filterTextBox?.Focus(FocusState.Programmatic); } - - return Task.CompletedTask; } private void GeneralSettingsService_PropertyChanged(object? sender, PropertyChangedEventArgs e) From 20e6c6c62491693aed8c08d8f57df0d87f8ca499 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 17 Jul 2025 11:54:58 +0900 Subject: [PATCH 051/107] Code Quality: Use UI thread when populating suggestions (#17274) --- .../UserControls/NavigationToolbar.xaml.cs | 43 +++++------ src/Files.App/UserControls/SearchBox.xaml.cs | 1 + .../NavigationToolbarViewModel.cs | 74 ++++++++++++------- .../UserControls/SearchBoxViewModel.cs | 1 + 4 files changed, 68 insertions(+), 51 deletions(-) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 6ba3d42fb85e..7e5a335082e7 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -59,6 +59,7 @@ private void NavToolbar_Loading(FrameworkElement _, object e) OngoingTasksViewModel.NewItemAdded += OngoingTasksActions_ProgressBannerPosted; } + [Obsolete("Superseded by Omnibar.")] private void VisiblePath_Loaded(object _, RoutedEventArgs e) { // AutoSuggestBox won't receive focus unless it's fully loaded @@ -73,6 +74,7 @@ private void VisiblePath_Loaded(object _, RoutedEventArgs e) } } + [Obsolete("Superseded by Omnibar.")] private void ManualPathEntryItem_Click(object _, PointerRoutedEventArgs e) { if (e.Pointer.PointerDeviceType is PointerDeviceType.Mouse) @@ -84,6 +86,7 @@ private void ManualPathEntryItem_Click(object _, PointerRoutedEventArgs e) ViewModel.IsEditModeEnabled = true; } + [Obsolete("Superseded by Omnibar.")] private async void VisiblePath_KeyDown(object _, KeyRoutedEventArgs e) { if (e.Key is VirtualKey.Escape) @@ -97,6 +100,7 @@ private async void VisiblePath_KeyDown(object _, KeyRoutedEventArgs e) ClickablePath.Focus(FocusState.Keyboard); } } + [Obsolete("Superseded by Omnibar.")] private void VisiblePath_LostFocus(object _, RoutedEventArgs e) { if (App.AppModel.IsMainWindowClosed) @@ -119,8 +123,11 @@ private void VisiblePath_LostFocus(object _, RoutedEventArgs e) VisiblePath.Focus(FocusState.Programmatic); } + [Obsolete("Superseded by Omnibar.")] private void SearchRegion_OnGotFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_GotFocus(sender, e); + [Obsolete("Superseded by Omnibar.")] private void SearchRegion_LostFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_LostFocus(sender, e); + [Obsolete("Superseded by Omnibar.")] private void SearchRegion_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args) { // Suppress access key invocation if any dialog is open @@ -129,7 +136,7 @@ private void SearchRegion_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEve else sender.Focus(FocusState.Keyboard); } - + [Obsolete("Superseded by Omnibar.")] private void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) => ViewModel.VisiblePath_QuerySubmitted(sender, args); @@ -247,6 +254,7 @@ void HistoryItemClicked(ToolbarHistoryItemModel? itemModel) } } + [Obsolete("Superseded by Omnibar.")] private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs args) { if (args.InputDevice != FocusInputDeviceKind.Keyboard) @@ -342,18 +350,15 @@ private async void Omnibar_TextChanged(Omnibar sender, OmnibarTextChangedEventAr if (Omnibar.CurrentSelectedMode == OmnibarPathMode) { - await ViewModel.PopulateOmnibarSuggestionsForPathMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForPathMode); } else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) { - await DispatcherQueue.EnqueueOrInvokeAsync(() => - { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); - }); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode); } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForSearchMode); } } @@ -456,19 +461,13 @@ private async void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArg ? Constants.UserEnvironmentPaths.HomePath : ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; - await DispatcherQueue.EnqueueOrInvokeAsync(async () => - { - await ViewModel.PopulateOmnibarSuggestionsForPathMode(); - }); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForPathMode); } else if (e.NewMode == OmnibarCommandPaletteMode) { ViewModel.OmnibarCommandPaletteModeText = string.Empty; - await DispatcherQueue.EnqueueOrInvokeAsync(() => - { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); - }); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode); } else if (e.NewMode == OmnibarSearchMode) { @@ -477,7 +476,7 @@ await DispatcherQueue.EnqueueOrInvokeAsync(() => else ViewModel.OmnibarSearchModeText = ViewModel.InstanceViewModel.CurrentSearchQuery; - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForSearchMode); } } @@ -491,23 +490,17 @@ private async void Omnibar_IsFocusedChanged(Omnibar sender, OmnibarIsFocusedChan ? Constants.UserEnvironmentPaths.HomePath : ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; - await DispatcherQueue.EnqueueOrInvokeAsync(async () => - { - await ViewModel.PopulateOmnibarSuggestionsForPathMode(); - }); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForPathMode); } else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) { ViewModel.OmnibarCommandPaletteModeText = string.Empty; - await DispatcherQueue.EnqueueOrInvokeAsync(() => - { - ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode(); - }); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode); } else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode) { - await ViewModel.PopulateOmnibarSuggestionsForSearchMode(); + await DispatcherQueue.EnqueueOrInvokeAsync(ViewModel.PopulateOmnibarSuggestionsForSearchMode); } } else diff --git a/src/Files.App/UserControls/SearchBox.xaml.cs b/src/Files.App/UserControls/SearchBox.xaml.cs index ff31b9899cd1..43fb5c13656d 100644 --- a/src/Files.App/UserControls/SearchBox.xaml.cs +++ b/src/Files.App/UserControls/SearchBox.xaml.cs @@ -8,6 +8,7 @@ namespace Files.App.UserControls { + [Obsolete("Superseded by Omnibar.")] public sealed partial class SearchBox : UserControl { public static readonly DependencyProperty SearchBoxViewModelProperty = diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 5a156a255218..645b2a861d13 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -82,6 +82,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool IsSingleItemOverride { get; set; } + [Obsolete("Superseded by Omnibar.")] public bool SearchHasFocus { get; private set; } public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; @@ -93,6 +94,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private NavigationToolbar? AddressToolbar => (MainWindow.Instance.Content as Frame)?.FindDescendant(); + [Obsolete("Superseded by Omnibar.")] public SearchBoxViewModel SearchBoxViewModel => (SearchBoxViewModel)SearchBox; public bool HasAdditionalAction => @@ -186,15 +188,19 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool CanRefresh { get => _CanRefresh; set => SetProperty(ref _CanRefresh, value); } private string _SearchButtonGlyph = "\uE721"; + [Obsolete("Superseded by Omnibar.")] public string SearchButtonGlyph { get => _SearchButtonGlyph; set => SetProperty(ref _SearchButtonGlyph, value); } private bool _ManualEntryBoxLoaded; + [Obsolete("Superseded by Omnibar.")] public bool ManualEntryBoxLoaded { get => _ManualEntryBoxLoaded; set => SetProperty(ref _ManualEntryBoxLoaded, value); } private bool _ClickablePathLoaded = true; + [Obsolete("Superseded by Omnibar.")] public bool ClickablePathLoaded { get => _ClickablePathLoaded; set => SetProperty(ref _ClickablePathLoaded, value); } private string _PathControlDisplayText; + [Obsolete("Superseded by Omnibar.")] public string PathControlDisplayText { get => _PathControlDisplayText; set => SetProperty(ref _PathControlDisplayText, value); } private bool _HasItem = false; @@ -207,6 +213,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public ISearchBoxViewModel SearchBox { get => _SearchBox; set => SetProperty(ref _SearchBox, value); } private bool _IsSearchBoxVisible; + [Obsolete("Superseded by Omnibar.")] public bool IsSearchBoxVisible { get => _IsSearchBoxVisible; @@ -236,11 +243,7 @@ public string? PathText public string? OmnibarSearchModeText { get => _OmnibarSearchModeText; set => SetProperty(ref _OmnibarSearchModeText, value); } private string _OmnibarCurrentSelectedModeName = OmnibarPathModeName; - public string OmnibarCurrentSelectedModeName - { - get => _OmnibarCurrentSelectedModeName; - set => SetProperty(ref _OmnibarCurrentSelectedModeName, value); - } + public string OmnibarCurrentSelectedModeName { get => _OmnibarCurrentSelectedModeName; set => SetProperty(ref _OmnibarCurrentSelectedModeName, value); } private CurrentInstanceViewModel _InstanceViewModel; public CurrentInstanceViewModel InstanceViewModel @@ -259,7 +262,7 @@ public CurrentInstanceViewModel InstanceViewModel } } - [Obsolete("Remove once Omnibar goes out of experimental.")] + [Obsolete("Superseded by Omnibar.")] public bool IsEditModeEnabled { get => ManualEntryBoxLoaded; @@ -411,6 +414,7 @@ private void UserSettingsService_OnSettingChangedEvent(object? sender, SettingCh } } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItem_DragLeave(object sender, DragEventArgs e) { if (((FrameworkElement)sender).DataContext is not PathBoxItem pathBoxItem || @@ -426,6 +430,7 @@ public void PathBoxItem_DragLeave(object sender, DragEventArgs e) _dragOverPath = null; } + [Obsolete("Superseded by Omnibar.")] public async Task PathBoxItem_Drop(object sender, DragEventArgs e) { if (_lockFlag) @@ -464,6 +469,7 @@ public async Task PathBoxItem_Drop(object sender, DragEventArgs e) _lockFlag = false; } + [Obsolete("Superseded by Omnibar.")] public async Task PathBoxItem_DragOver(object sender, DragEventArgs e) { if (IsSingleItemOverride || @@ -540,6 +546,7 @@ x.Item is ZipStorageFile || deferral.Complete(); } + [Obsolete("Superseded by Omnibar.")] public void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) { var pathSeparatorIcon = sender as FontIcon; @@ -553,28 +560,33 @@ public void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataCo }); } + [Obsolete("Superseded by Omnibar.")] public void PathboxItemFlyout_Opening(object sender, object e) { ToolbarFlyoutOpening?.Invoke(this, new ToolbarFlyoutOpeningEventArgs((MenuFlyout)sender)); } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItemFlyout_Closed(object sender, object e) { ((MenuFlyout)sender).Items.Clear(); } + [Obsolete("Superseded by Omnibar.")] public void CurrentPathSetTextBox_TextChanged(object sender, TextChangedEventArgs args) { if (sender is TextBox textBox) PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = textBox.Text }); } + [Obsolete("Superseded by Omnibar.")] public void VisiblePath_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) AddressBarTextEntered?.Invoke(this, new AddressBarTextEnteredEventArgs() { AddressBarTextField = sender }); } + [Obsolete("Superseded by Omnibar.")] public void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) { PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = args.QueryText }); @@ -582,6 +594,7 @@ public void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuer (this as IAddressToolbarViewModel).IsEditModeEnabled = false; } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItem_PointerPressed(object sender, PointerRoutedEventArgs e) { if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Mouse) @@ -710,6 +723,7 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidItemDialogTitle.GetLoca PathControlDisplayText = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; } + [Obsolete("Superseded by Omnibar.")] public void PathBoxItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { switch (e.Key) @@ -794,6 +808,7 @@ public void UpdateAdditionalActions() OnPropertyChanged(nameof(HasAdditionalAction)); } + [Obsolete("Superseded by Omnibar.")] private void CloseSearchBox(bool doFocus = false) { if (_SearchBox.WasQuerySubmitted) @@ -818,11 +833,13 @@ private void CloseSearchBox(bool doFocus = false) } } + [Obsolete("Superseded by Omnibar.")] public void SearchRegion_GotFocus(object sender, RoutedEventArgs e) { SearchHasFocus = true; } + [Obsolete("Superseded by Omnibar.")] public void SearchRegion_LostFocus(object sender, RoutedEventArgs e) { var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(); @@ -833,6 +850,7 @@ public void SearchRegion_LostFocus(object sender, RoutedEventArgs e) CloseSearchBox(); } + [Obsolete("Superseded by Omnibar.")] private void SearchRegion_Escaped(object? sender, ISearchBoxViewModel _SearchBox) => CloseSearchBox(true); @@ -912,7 +930,7 @@ private static string NormalizePathInput(string currentInput, bool isFtp) return currentInput; } - [Obsolete("Remove once Omnibar goes out of experimental.")] + [Obsolete("Superseded by Omnibar.")] public async Task CheckPathInputAsync(string currentInput, string currentSelectedPath, IShellPage shellPage) { if (currentInput.StartsWith('>')) @@ -1153,7 +1171,7 @@ void AddNoResultsItem() } } - public void PopulateOmnibarSuggestionsForCommandPaletteMode() + public async Task PopulateOmnibarSuggestionsForCommandPaletteMode() { var newSuggestions = new List(); @@ -1194,22 +1212,27 @@ public void PopulateOmnibarSuggestionsForCommandPaletteMode() } } - var suggestionItems = Commands - .Where(command => command.IsExecutable - && command.IsAccessibleGlobally - && (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) - || command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) - .Select(command => new NavigationBarSuggestionItem - { - ThemedIconStyle = command.Glyph.ToThemedIconStyle(), - Glyph = command.Glyph.BaseGlyph, - Text = command.Description, - PrimaryDisplay = command.Description, - HotKeys = command.HotKeys, - SearchText = OmnibarCommandPaletteModeText, - }) - .Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString() - && item.Text != Commands.EditPath.Description.ToString()); + IEnumerable suggestionItems = null!; + + await Task.Run(() => + { + suggestionItems = Commands + .Where(command => command.IsExecutable + && command.IsAccessibleGlobally + && (command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) + || command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase))) + .Select(command => new NavigationBarSuggestionItem + { + ThemedIconStyle = command.Glyph.ToThemedIconStyle(), + Glyph = command.Glyph.BaseGlyph, + Text = command.Description, + PrimaryDisplay = command.Description, + HotKeys = command.HotKeys, + SearchText = OmnibarCommandPaletteModeText, + }) + .Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString() + && item.Text != Commands.EditPath.Description.ToString()); + }); newSuggestions.AddRange(suggestionItems); @@ -1297,8 +1320,7 @@ public async Task PopulateOmnibarSuggestionsForSearchMode() OmnibarSearchModeSuggestionItems.Add(item); } - - [Obsolete("Remove once Omnibar goes out of experimental.")] + [Obsolete("Superseded by Omnibar.")] public async Task SetAddressBarSuggestionsAsync(AutoSuggestBox sender, IShellPage shellpage) { if (sender.Text is not null && shellpage.ShellViewModel is not null) diff --git a/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs b/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs index a2cadcb3dd72..00d679b291c2 100644 --- a/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs @@ -9,6 +9,7 @@ namespace Files.App.ViewModels.UserControls { + [Obsolete("Superseded by Omnibar.")] public sealed partial class SearchBoxViewModel : ObservableObject, ISearchBoxViewModel { private string query; From 089c9c3c9d6ba0307b9c845229d703e3322679aa Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Fri, 18 Jul 2025 09:56:03 -0400 Subject: [PATCH 052/107] Feature: Enabled Omnibar --- src/Files.App/Actions/Global/EditPathAction.cs | 2 +- .../Data/Contracts/IGeneralSettingsService.cs | 2 +- .../Services/Settings/GeneralSettingsService.cs | 4 ++-- src/Files.App/UserControls/NavigationToolbar.xaml | 4 ++-- src/Files.App/ViewModels/Settings/AdvancedViewModel.cs | 8 ++++---- .../UserControls/NavigationToolbarViewModel.cs | 10 +++++----- src/Files.App/Views/Settings/AdvancedPage.xaml | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Files.App/Actions/Global/EditPathAction.cs b/src/Files.App/Actions/Global/EditPathAction.cs index 61e90f7070ca..f9ca51490d5e 100644 --- a/src/Files.App/Actions/Global/EditPathAction.cs +++ b/src/Files.App/Actions/Global/EditPathAction.cs @@ -32,7 +32,7 @@ public Task ExecuteAsync(object? parameter = null) { if (context.ShellPage is not null) { - if (GeneralSettingsService.EnableOmnibar) + if (GeneralSettingsService.EnableOmnibarDesign) context.ShellPage!.ToolbarViewModel.SwitchToPathMode(); else context.ShellPage.ToolbarViewModel.IsEditModeEnabled = true; diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index adc5d71eb66e..7b12ba1bbd0e 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -308,6 +308,6 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// /// Gets or sets a value indicating whether or not to enable the Omnibar. /// - bool EnableOmnibar { get; set; } + bool EnableOmnibarDesign { get; set; } } } diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index f1eb5b985944..889ac71779bb 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -375,9 +375,9 @@ public bool ShowFilterHeader set => Set(value); } - public bool EnableOmnibar + public bool EnableOmnibarDesign { - get => Get(false); + get => Get(true); set => Set(value); } diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index b44a3064260f..bb76747dc890 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -225,7 +225,7 @@ @@ -340,7 +340,7 @@ UserSettingsService.GeneralSettingsService.EnableOmnibar; + get => UserSettingsService.GeneralSettingsService.EnableOmnibarDesign; set { - if (value == UserSettingsService.GeneralSettingsService.EnableOmnibar) + if (value == UserSettingsService.GeneralSettingsService.EnableOmnibarDesign) return; - UserSettingsService.GeneralSettingsService.EnableOmnibar = value; + UserSettingsService.GeneralSettingsService.EnableOmnibarDesign = value; OnPropertyChanged(); } } diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 645b2a861d13..bc245cee978d 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -85,7 +85,7 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr [Obsolete("Superseded by Omnibar.")] public bool SearchHasFocus { get; private set; } - public bool EnableOmnibar => GeneralSettingsService.EnableOmnibar; + public bool EnableOmnibarDesign => GeneralSettingsService.EnableOmnibarDesign; public bool ShowStatusCenterButton => AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.Always || (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringOngoingFileOperations && OngoingTasksViewModel.HasAnyItem); @@ -363,8 +363,8 @@ public NavigationToolbarViewModel() { switch (e.PropertyName) { - case nameof(GeneralSettingsService.EnableOmnibar): - OnPropertyChanged(nameof(EnableOmnibar)); + case nameof(GeneralSettingsService.EnableOmnibarDesign): + OnPropertyChanged(nameof(EnableOmnibarDesign)); break; } }; @@ -755,7 +755,7 @@ public void PathBoxItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) public void SwitchToCommandPaletteMode() { - if (EnableOmnibar) + if (EnableOmnibarDesign) { OmnibarCurrentSelectedModeName = OmnibarPaletteModeName; } @@ -773,7 +773,7 @@ public void SwitchToCommandPaletteMode() public void SwitchToSearchMode() { - if (EnableOmnibar) + if (EnableOmnibarDesign) { OmnibarCurrentSelectedModeName = OmnibarSearchModeName; } diff --git a/src/Files.App/Views/Settings/AdvancedPage.xaml b/src/Files.App/Views/Settings/AdvancedPage.xaml index f7a5826224b8..21e688925155 100644 --- a/src/Files.App/Views/Settings/AdvancedPage.xaml +++ b/src/Files.App/Views/Settings/AdvancedPage.xaml @@ -170,11 +170,11 @@ - + - + From ab1db76e1111cc542037b7c799b6a53b94d618b6 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:01:55 -0400 Subject: [PATCH 053/107] Code Quality: Updated translations (#17276) --- src/Files.App/Strings/af/Resources.resw | 15 +- src/Files.App/Strings/ar/Resources.resw | 15 +- src/Files.App/Strings/be-BY/Resources.resw | 15 +- src/Files.App/Strings/bg/Resources.resw | 15 +- src/Files.App/Strings/ca/Resources.resw | 15 +- src/Files.App/Strings/cs-CZ/Resources.resw | 15 +- src/Files.App/Strings/da/Resources.resw | 15 +- src/Files.App/Strings/de-DE/Resources.resw | 15 +- src/Files.App/Strings/el/Resources.resw | 15 +- src/Files.App/Strings/en-GB/Resources.resw | 15 +- src/Files.App/Strings/es-419/Resources.resw | 21 ++- src/Files.App/Strings/es-ES/Resources.resw | 21 ++- src/Files.App/Strings/fa-IR/Resources.resw | 15 +- src/Files.App/Strings/fi-FI/Resources.resw | 15 +- src/Files.App/Strings/fil-PH/Resources.resw | 15 +- src/Files.App/Strings/fr-FR/Resources.resw | 51 ++++--- src/Files.App/Strings/he-IL/Resources.resw | 15 +- src/Files.App/Strings/hi-IN/Resources.resw | 15 +- src/Files.App/Strings/hr-HR/Resources.resw | 15 +- src/Files.App/Strings/hu-HU/Resources.resw | 19 ++- src/Files.App/Strings/hy-AM/Resources.resw | 15 +- src/Files.App/Strings/id-ID/Resources.resw | 15 +- src/Files.App/Strings/it-IT/Resources.resw | 15 +- src/Files.App/Strings/ja-JP/Resources.resw | 15 +- src/Files.App/Strings/ka/Resources.resw | 15 +- src/Files.App/Strings/km-KH/Resources.resw | 15 +- src/Files.App/Strings/ko-KR/Resources.resw | 15 +- src/Files.App/Strings/lt-LT/Resources.resw | 15 +- src/Files.App/Strings/lv-LV/Resources.resw | 15 +- src/Files.App/Strings/ms-MY/Resources.resw | 15 +- src/Files.App/Strings/nb-NO/Resources.resw | 15 +- src/Files.App/Strings/nl-NL/Resources.resw | 15 +- src/Files.App/Strings/pl-PL/Resources.resw | 15 +- src/Files.App/Strings/pt-BR/Resources.resw | 15 +- src/Files.App/Strings/pt-PT/Resources.resw | 15 +- src/Files.App/Strings/ro-RO/Resources.resw | 17 ++- src/Files.App/Strings/ru-RU/Resources.resw | 137 ++++++++++--------- src/Files.App/Strings/sk-SK/Resources.resw | 15 +- src/Files.App/Strings/sq-AL/Resources.resw | 15 +- src/Files.App/Strings/sr-Cyrl/Resources.resw | 15 +- src/Files.App/Strings/sv-SE/Resources.resw | 15 +- src/Files.App/Strings/ta/Resources.resw | 15 +- src/Files.App/Strings/th-TH/Resources.resw | 15 +- src/Files.App/Strings/tr-TR/Resources.resw | 21 ++- src/Files.App/Strings/uk-UA/Resources.resw | 15 +- src/Files.App/Strings/vi/Resources.resw | 19 ++- src/Files.App/Strings/zh-Hans/Resources.resw | 19 ++- src/Files.App/Strings/zh-Hant/Resources.resw | 15 +- 48 files changed, 671 insertions(+), 239 deletions(-) diff --git a/src/Files.App/Strings/af/Resources.resw b/src/Files.App/Strings/af/Resources.resw index 851800413d80..de531f032872 100644 --- a/src/Files.App/Strings/af/Resources.resw +++ b/src/Files.App/Strings/af/Resources.resw @@ -1098,6 +1098,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Geen voorskou beskikbaar nie @@ -4079,9 +4085,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4265,4 +4268,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ar/Resources.resw b/src/Files.App/Strings/ar/Resources.resw index 16276c1f52f6..6b2b64552a1c 100644 --- a/src/Files.App/Strings/ar/Resources.resw +++ b/src/Files.App/Strings/ar/Resources.resw @@ -1097,6 +1097,12 @@ عرض / إخفاء شريط الأدوات + + Toggle filter header + + + Toggle visibility of the filter header + المعاينة غير متوفرة @@ -4079,9 +4085,6 @@ انتقل إلى الصفحة الرئيسية - - إظهار زر الصفحة الرئيسية في شريط العنوان - شريط الأدوات @@ -4265,4 +4268,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/be-BY/Resources.resw b/src/Files.App/Strings/be-BY/Resources.resw index a9d829a4af27..604717ee0191 100644 --- a/src/Files.App/Strings/be-BY/Resources.resw +++ b/src/Files.App/Strings/be-BY/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/bg/Resources.resw b/src/Files.App/Strings/bg/Resources.resw index 9ceaf5a814e8..7b9cd9d7605b 100644 --- a/src/Files.App/Strings/bg/Resources.resw +++ b/src/Files.App/Strings/bg/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Няма налична визуализация @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ca/Resources.resw b/src/Files.App/Strings/ca/Resources.resw index 1f8dd77ae612..d314b91da035 100644 --- a/src/Files.App/Strings/ca/Resources.resw +++ b/src/Files.App/Strings/ca/Resources.resw @@ -1097,6 +1097,12 @@ Commuta la visibilitat de la barra d'eines + + Commuta la capçalera del filtre + + + Commuta la visibilitat de la capçalera del filtre + Cap visualització prèvia disponible @@ -4078,9 +4084,6 @@ Aneu a la pàgina d'inici - - Mostra el botó d'inici a la barra d'adreces - Barra d'eines @@ -4264,4 +4267,10 @@ Mostra'n més + + Filtra per + + + Nom del fitxer + diff --git a/src/Files.App/Strings/cs-CZ/Resources.resw b/src/Files.App/Strings/cs-CZ/Resources.resw index c34a05feaf34..93eac4c51b96 100644 --- a/src/Files.App/Strings/cs-CZ/Resources.resw +++ b/src/Files.App/Strings/cs-CZ/Resources.resw @@ -1097,6 +1097,12 @@ Přepnout viditelnost panelu nástrojů + + Toggle filter header + + + Toggle visibility of the filter header + Není dostupný žádný náhled @@ -4078,9 +4084,6 @@ Přejít na domovskou stránku - - Zobrazit tlačítko Domů v adresním řádku - Panel nástrojů @@ -4264,4 +4267,10 @@ Zobrazit více + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/da/Resources.resw b/src/Files.App/Strings/da/Resources.resw index 1847be1c7661..ee5b5296a118 100644 --- a/src/Files.App/Strings/da/Resources.resw +++ b/src/Files.App/Strings/da/Resources.resw @@ -1097,6 +1097,12 @@ Slå synligheden af værktøjslinjen til/fra + + Toggle filter header + + + Toggle visibility of the filter header + Ingen forhåndsvisning tilgængelig @@ -4078,9 +4084,6 @@ Gå til startsiden - - Vis Hjem-knap på adressebjælken - Værktøjsbjælker @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/de-DE/Resources.resw b/src/Files.App/Strings/de-DE/Resources.resw index 4a107a0c4d4b..83ee640f6869 100644 --- a/src/Files.App/Strings/de-DE/Resources.resw +++ b/src/Files.App/Strings/de-DE/Resources.resw @@ -1097,6 +1097,12 @@ Sichtbarkeit der Symbolleiste umschalten + + Filter-Header umschalten + + + Sichtbarkeit des Filter-Headers umschalten + Keine Vorschau verfügbar @@ -4078,9 +4084,6 @@ Zur Startseite navigieren - - Startbutton in Adressleiste anzeigen - Werkzeugleisten @@ -4264,4 +4267,10 @@ Mehr anzeigen + + Filtern nach + + + Dateiname + diff --git a/src/Files.App/Strings/el/Resources.resw b/src/Files.App/Strings/el/Resources.resw index a6eb2f974d1d..d1490c2bee16 100644 --- a/src/Files.App/Strings/el/Resources.resw +++ b/src/Files.App/Strings/el/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Δεν υπάρχει διαθέσιμη προεπισκόπηση @@ -4078,9 +4084,6 @@ Μετάβαση στην αρχική σελίδα - - Εμφάνιση κουμπιού αρχικής οθόνης στη γραμμή διευθύνσεων - Γραμμές εργαλείων @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/en-GB/Resources.resw b/src/Files.App/Strings/en-GB/Resources.resw index fdf48a5da267..83bedff28922 100644 --- a/src/Files.App/Strings/en-GB/Resources.resw +++ b/src/Files.App/Strings/en-GB/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/es-419/Resources.resw b/src/Files.App/Strings/es-419/Resources.resw index 8ca55c6916f4..a0a4c09c646b 100644 --- a/src/Files.App/Strings/es-419/Resources.resw +++ b/src/Files.App/Strings/es-419/Resources.resw @@ -1097,6 +1097,12 @@ Cambiar la visibilidad de la barra de herramientas + + Toggle filter header + + + Toggle visibility of the filter header + No hay vista previa disponible @@ -2013,16 +2019,16 @@ Comportamiento - Hello! + ¡Hola! ¿Disfrutando de Files? Por favor, considere hacer una reseña en Microsoft Store. - Enjoying Files? Please consider supporting the project on GitHub. + ¿Qué le parece Files? Considere la posibilidad de apoyar el proyecto en GitHub. - Sponsor + Patrocinador Valórenos @@ -4078,9 +4084,6 @@ Ir a la página de inicio - - Mostrar el botón de inicio en la barra de direcciones - Barras de herramientas @@ -4264,4 +4267,10 @@ Ver más + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/es-ES/Resources.resw b/src/Files.App/Strings/es-ES/Resources.resw index 867287fb5754..52cc2aab7b47 100644 --- a/src/Files.App/Strings/es-ES/Resources.resw +++ b/src/Files.App/Strings/es-ES/Resources.resw @@ -1097,6 +1097,12 @@ Cambiar la visibilidad de la barra de herramientas + + Toggle filter header + + + Toggle visibility of the filter header + No hay vista previa disponible @@ -2013,16 +2019,16 @@ Comportamiento - Hello! + ¡Hola! ¿Disfrutando de Files? Por favor, considere hacer una reseña en Microsoft Store. - Enjoying Files? Please consider supporting the project on GitHub. + ¿Qué le parece Files? Considere la posibilidad de apoyar el proyecto en GitHub. - Sponsor + Patrocinador Valórenos @@ -4078,9 +4084,6 @@ Ir a la página de inicio - - Mostrar el botón de inicio en la barra de direcciones - Barra de herramientas @@ -4264,4 +4267,10 @@ Ver más + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/fa-IR/Resources.resw b/src/Files.App/Strings/fa-IR/Resources.resw index d2fff15506cf..04769aa453ae 100644 --- a/src/Files.App/Strings/fa-IR/Resources.resw +++ b/src/Files.App/Strings/fa-IR/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + پیش نمایشی در دسترس نیست @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/fi-FI/Resources.resw b/src/Files.App/Strings/fi-FI/Resources.resw index 71117a207583..286ff114c4ec 100644 --- a/src/Files.App/Strings/fi-FI/Resources.resw +++ b/src/Files.App/Strings/fi-FI/Resources.resw @@ -1097,6 +1097,12 @@ Näytä tai piilota työkalupalkki + + Toggle filter header + + + Toggle visibility of the filter header + Esikatselua ei ole saatavilla @@ -4078,9 +4084,6 @@ Siirry kotisivulle - - Näytä kotipainike osoitepalkissa - Työkalupalkit @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/fil-PH/Resources.resw b/src/Files.App/Strings/fil-PH/Resources.resw index 2509d6a29616..9ec0370bb012 100644 --- a/src/Files.App/Strings/fil-PH/Resources.resw +++ b/src/Files.App/Strings/fil-PH/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Walang available na preview @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/fr-FR/Resources.resw b/src/Files.App/Strings/fr-FR/Resources.resw index 6217f2328659..9cd5f5c2eb6a 100644 --- a/src/Files.App/Strings/fr-FR/Resources.resw +++ b/src/Files.App/Strings/fr-FR/Resources.resw @@ -1097,6 +1097,12 @@ Activer/Désactiver la visibilité de la barre d'outils + + Activer/Désactiver l'en-tête du filtre + + + Activer/Désactiver la visibilité de l'en-tête du filtre + Pas d'aperçu disponible @@ -2091,7 +2097,7 @@ Restaurer tous les éléments - Veux-tu restaurer {0, plural, one {l’élément sélectionné} other {{0} éléments sélectionnés}} ? + Veux-tu restaurer {0, plural, one {l'élément sélectionné} other {{0} éléments sélectionnés}} ? Restaurer la sélection @@ -2427,13 +2433,13 @@ Activer/Désactiver la visibilité des extensions de fichiers - Afficher/Masquer le volet d’aperçu pour afficher les aperçus des fichiers + Afficher/Masquer le volet d'aperçu pour afficher les aperçus des fichiers Afficher/Masquer la barre latérale - Copier {0, plural, one {l’élément sélectionné} other {les éléments sélectionnés}} + Copier {0, plural, one {l'élément sélectionné} other {les éléments sélectionnés}} Copier le chemin du dossier actuel @@ -2448,7 +2454,7 @@ Copier le chemin du dossier actuel avec des guillemets - Couper {0, plural, one {l’élément sélectionné} other {les éléments sélectionnés}} + Couper {0, plural, one {l'élément sélectionné} other {les éléments sélectionnés}} Coller les éléments dans le dossier actuel @@ -2469,7 +2475,7 @@ Créer un nouveau dossier - Créer {0, plural, one {un raccourci} other {des raccourcis}} vers {0, plural, one {l’élément sélectionné} other {les éléments sélectionnés}} + Créer {0, plural, one {un raccourci} other {des raccourcis}} vers {0, plural, one {l'élément sélectionné} other {les éléments sélectionnés}} Créer un nouveau raccourci vers n'importe quel élément @@ -2481,16 +2487,16 @@ Ouvrir le menu "Formater le lecteur" pour l'élément sélectionné - Restaurer {0, plural, one {l’élément sélectionné} other {les éléments sélectionnés}} depuis la corbeille + Restaurer {0, plural, one {l'élément sélectionné} other {les éléments sélectionnés}} depuis la corbeille Restaurer tous les éléments de la corbeille - Ouvrir {0, plural, one {l’élément} other {les éléments}} + Ouvrir {0, plural, one {l'élément} other {les éléments}} - Ouvrir {0, plural, one {l’élément} other {les éléments}} avec l’application sélectionnée + Ouvrir {0, plural, one {l'élément} other {les éléments}} avec l'application sélectionnée Ouvrir le dossier parent de l'élément recherché @@ -2553,7 +2559,7 @@ Installer {0, plural, one {la police sélectionnée} other {les polices sélectionnées}} - Installer {0, plural, one {le pilote} other {les pilotes}} à l’aide {0, plural, one {du fichier INF sélectionné} other {des fichiers INF sélectionnés}} + Installer {0, plural, one {le pilote} other {les pilotes}} à l'aide {0, plural, one {du fichier INF sélectionné} other {des fichiers INF sélectionnés}} Installer {0, plural, one {le certificat sélectionné} other {les certificats sélectionnés}} @@ -2562,7 +2568,7 @@ Exécuter l'application sélectionnée en tant qu'administrateur - Exécuter l’application sélectionnée en tant qu’autre utilisateur + Exécuter l'application sélectionnée en tant qu'autre utilisateur Exécuter le script PowerShell sélectionné @@ -2601,7 +2607,7 @@ Ouvrir le dossier dans le terminal - Ouvrir le dossier dans le terminal en tant qu’administrateur + Ouvrir le dossier dans le terminal en tant qu'administrateur Réduire la taille des éléments dans la vue actuelle @@ -2730,10 +2736,10 @@ Dupliquer l'onglet sélectionné - Fermer les onglets à gauche de l’onglet actuel + Fermer les onglets à gauche de l'onglet actuel - Fermer les onglets à gauche de l’onglet sélectionné + Fermer les onglets à gauche de l'onglet sélectionné Fermer les onglets à droite de l'onglet actuel @@ -3157,7 +3163,7 @@ Ouvrir la fenêtre des propriétés - Ouvrir la fenêtre des propriétés de l’Explorateur de fichiers + Ouvrir la fenêtre des propriétés de l'Explorateur de fichiers Locaux @@ -3731,7 +3737,7 @@ Échec de la définition du fond d'écran - Échec de l’ouverture du fichier de paramètres + Échec de l'ouverture du fichier de paramètres Supprimer la branche Git @@ -4003,7 +4009,7 @@ Réseau - Il n’y a pas d'emplacement réseau. Si vous n’en utilisez pas, vous pouvez désactiver le widget. + Il n'y a pas d'emplacement réseau. Si vous n'en utilisez pas, vous pouvez désactiver le widget. Désactiver @@ -4078,9 +4084,6 @@ Aller à la page d'accueil - - Afficher le bouton d'accueil dans la barre d'adresse - Barre d'outils @@ -4106,7 +4109,7 @@ Entrez le nom du flux de données - Une erreur s’est produite lors de la création du flux de données alternatif + Une erreur s'est produite lors de la création du flux de données alternatif Veuillez noter que les flux de données alternatifs ne fonctionnent que sur les lecteurs formatés en NTFS. @@ -4253,7 +4256,7 @@ This is the friendly name for a variety of different icon files. - Afficher le fil d’Ariane du chemin réduit + Afficher le fil d'Ariane du chemin réduit Afficher les sous-dossiers @@ -4264,4 +4267,10 @@ Voir plus + + Filtering for + + + Nom du fichier + diff --git a/src/Files.App/Strings/he-IL/Resources.resw b/src/Files.App/Strings/he-IL/Resources.resw index e580613e3117..28bdef9330c6 100644 --- a/src/Files.App/Strings/he-IL/Resources.resw +++ b/src/Files.App/Strings/he-IL/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + אין תצוגה מקדימה זמינה @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/hi-IN/Resources.resw b/src/Files.App/Strings/hi-IN/Resources.resw index 917051a9c873..8f5b5f4fa386 100644 --- a/src/Files.App/Strings/hi-IN/Resources.resw +++ b/src/Files.App/Strings/hi-IN/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + कोई पूर्वावलोकन उपलब्ध नहीं @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/hr-HR/Resources.resw b/src/Files.App/Strings/hr-HR/Resources.resw index e3b75774b678..2bc719d579aa 100644 --- a/src/Files.App/Strings/hr-HR/Resources.resw +++ b/src/Files.App/Strings/hr-HR/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Pregled nedostupan @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/hu-HU/Resources.resw b/src/Files.App/Strings/hu-HU/Resources.resw index 80cabdee66ea..0f8e8c78a048 100644 --- a/src/Files.App/Strings/hu-HU/Resources.resw +++ b/src/Files.App/Strings/hu-HU/Resources.resw @@ -166,7 +166,7 @@ Kihagyás - Select all + Összes kijelölése Kijelölés megfordítása @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Nincs elérhető előnézet @@ -2307,7 +2313,7 @@ Helyi menü elemek - File extensions + Fájlkiterjesztések Formázás @@ -4078,9 +4084,6 @@ Navigálás a kezdőlapra - - Kezdőlap gomb megjelenítése a címsorban - Eszköztárak @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/hy-AM/Resources.resw b/src/Files.App/Strings/hy-AM/Resources.resw index cf0cbd229a64..f563899b21f8 100644 --- a/src/Files.App/Strings/hy-AM/Resources.resw +++ b/src/Files.App/Strings/hy-AM/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Նախադիտումը հասանելի չէ @@ -4078,9 +4084,6 @@ Նավարկել դեպի տնէջ - - Show home button in address bar - Գործիքագոտիներ @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/id-ID/Resources.resw b/src/Files.App/Strings/id-ID/Resources.resw index 9e1653a6d7ea..effca47a2c37 100644 --- a/src/Files.App/Strings/id-ID/Resources.resw +++ b/src/Files.App/Strings/id-ID/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Pratinjau tidak tersedia @@ -4078,9 +4084,6 @@ Kembali ke beranda - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/it-IT/Resources.resw b/src/Files.App/Strings/it-IT/Resources.resw index 5272b06c98ee..7d22cdc048e7 100644 --- a/src/Files.App/Strings/it-IT/Resources.resw +++ b/src/Files.App/Strings/it-IT/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Attiva/Disattiva intestazione filtro + + + Attiva/Disattiva visibilità dell'intestazione del filtro + Anteprima non disponibile @@ -4078,9 +4084,6 @@ Vai alla pagina iniziale - - Mostra il pulsante Home nella barra degli strumenti - Barre degli strumenti @@ -4264,4 +4267,10 @@ Mostra altro + + Filtra per + + + Nome file + diff --git a/src/Files.App/Strings/ja-JP/Resources.resw b/src/Files.App/Strings/ja-JP/Resources.resw index dbe6c882cd1f..d14a402f3cc6 100644 --- a/src/Files.App/Strings/ja-JP/Resources.resw +++ b/src/Files.App/Strings/ja-JP/Resources.resw @@ -1097,6 +1097,12 @@ ツールバーの表示/非表示 + + Toggle filter header + + + Toggle visibility of the filter header + プレビューを利用できません @@ -4078,9 +4084,6 @@ ホーム ページに移動する - - アドレス バーにホーム ボタンを表示する - ツールバー @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ka/Resources.resw b/src/Files.App/Strings/ka/Resources.resw index e9070bae675b..15867b7c5f4f 100644 --- a/src/Files.App/Strings/ka/Resources.resw +++ b/src/Files.App/Strings/ka/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + გადახედვა არ არის შესაძლებელი @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/km-KH/Resources.resw b/src/Files.App/Strings/km-KH/Resources.resw index cb1757a98bfb..cee1dd492f4f 100644 --- a/src/Files.App/Strings/km-KH/Resources.resw +++ b/src/Files.App/Strings/km-KH/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + មិនមានការមើលជាមុនទេ @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ko-KR/Resources.resw b/src/Files.App/Strings/ko-KR/Resources.resw index 0d0a943db59d..e32929da6961 100644 --- a/src/Files.App/Strings/ko-KR/Resources.resw +++ b/src/Files.App/Strings/ko-KR/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + 확인 가능한 미리 보기가 없습니다 @@ -4078,9 +4084,6 @@ 홈 페이지로 이동 - - 주소 창에 홈 버튼 표시 - 도구 모음 @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/lt-LT/Resources.resw b/src/Files.App/Strings/lt-LT/Resources.resw index c1a7338ab330..d757d68a6865 100644 --- a/src/Files.App/Strings/lt-LT/Resources.resw +++ b/src/Files.App/Strings/lt-LT/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ Žiūrėti daugiau + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/lv-LV/Resources.resw b/src/Files.App/Strings/lv-LV/Resources.resw index 39aa7e811315..7c7f7930305e 100644 --- a/src/Files.App/Strings/lv-LV/Resources.resw +++ b/src/Files.App/Strings/lv-LV/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Priekšskatījums nav pieejams @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ms-MY/Resources.resw b/src/Files.App/Strings/ms-MY/Resources.resw index 5bcd7a671037..152f99cb6d5a 100644 --- a/src/Files.App/Strings/ms-MY/Resources.resw +++ b/src/Files.App/Strings/ms-MY/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/nb-NO/Resources.resw b/src/Files.App/Strings/nb-NO/Resources.resw index cccddc2acdc0..d5dc6eb1c634 100644 --- a/src/Files.App/Strings/nb-NO/Resources.resw +++ b/src/Files.App/Strings/nb-NO/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Forhåndsvisning ikke tilgjengelig @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/nl-NL/Resources.resw b/src/Files.App/Strings/nl-NL/Resources.resw index 454a3caf1601..dbcd294bd712 100644 --- a/src/Files.App/Strings/nl-NL/Resources.resw +++ b/src/Files.App/Strings/nl-NL/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Geen voorbeeld beschikbaar @@ -4078,9 +4084,6 @@ Navigeer naar de homepage - - Home knop weergeven in adresbalk - Werkbalken @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/pl-PL/Resources.resw b/src/Files.App/Strings/pl-PL/Resources.resw index 4dbbd9f974b1..96b94b3f5341 100644 --- a/src/Files.App/Strings/pl-PL/Resources.resw +++ b/src/Files.App/Strings/pl-PL/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Podgląd niedostępny @@ -4078,9 +4084,6 @@ Przejdź do strony głównej - - Pokaż przycisk strony głównej na pasku adresu - Paski narzędzi @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/pt-BR/Resources.resw b/src/Files.App/Strings/pt-BR/Resources.resw index 6321f88d3537..78472da7d263 100644 --- a/src/Files.App/Strings/pt-BR/Resources.resw +++ b/src/Files.App/Strings/pt-BR/Resources.resw @@ -1097,6 +1097,12 @@ Alternar a visibilidade da barra de ferramentas + + Alternar cabeçalho do filtro + + + Alternar a visibilidade do cabeçalho do filtro + Nenhuma visualização disponível @@ -4078,9 +4084,6 @@ Navegar para a página inicial - - Mostrar botão de início na barra de endereços - Barras de ferramentas @@ -4264,4 +4267,10 @@ Ver mais + + Filtrar por + + + Nome do arquivo + diff --git a/src/Files.App/Strings/pt-PT/Resources.resw b/src/Files.App/Strings/pt-PT/Resources.resw index e3dcaa04f22f..69a988d9fc7c 100644 --- a/src/Files.App/Strings/pt-PT/Resources.resw +++ b/src/Files.App/Strings/pt-PT/Resources.resw @@ -1097,6 +1097,12 @@ Mostra/oculta a exibição da barra de ferramentas + + Comutar cabeçalho "Filtro" + + + Comutar exibição do cabeçalho "Filtro" + Pré-visualização indisponível @@ -4078,9 +4084,6 @@ Ir para a página inicial - - Mostrar botão Início na barra de endereços - Barras de ferramentas @@ -4264,4 +4267,10 @@ Ver mais + + Filtrar por + + + Nome do ficheiro + diff --git a/src/Files.App/Strings/ro-RO/Resources.resw b/src/Files.App/Strings/ro-RO/Resources.resw index 16ffa306fab9..868ec5165b2c 100644 --- a/src/Files.App/Strings/ro-RO/Resources.resw +++ b/src/Files.App/Strings/ro-RO/Resources.resw @@ -1059,7 +1059,7 @@ Deschideți într-un panou nou - Fișiere și foldere + Fișiere & foldere Detalii (Ctrl+Shift+1) @@ -1097,6 +1097,12 @@ Comută vizibilitatea barei de instrumente + + Toggle filter header + + + Toggle visibility of the filter header + Nicio previzualizare disponibilă @@ -4078,9 +4084,6 @@ Navigați spre pagina principală - - Afișați butonul Pornire în bara de adresă - Bare de Instrumente @@ -4264,4 +4267,10 @@ Vedeți mai multe + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ru-RU/Resources.resw b/src/Files.App/Strings/ru-RU/Resources.resw index 7ae6f857fdef..b3d78b3e1445 100644 --- a/src/Files.App/Strings/ru-RU/Resources.resw +++ b/src/Files.App/Strings/ru-RU/Resources.resw @@ -124,7 +124,7 @@ Скопировать путь - Copy item path + Копировать путь элемента Скопировать путь с кавычками @@ -166,13 +166,13 @@ Пропустить - Select all + Выбрать всё Инвертировать выделение - Очистить выделение + Убрать выделение Изменено: @@ -217,7 +217,7 @@ Показывать скрытые файлы и папки - Show dot files + Показать dot-файлы Внешний вид @@ -1092,10 +1092,16 @@ Toggle visibility of the detail/preview panes - Toggle toolbar + Показать/скрыть панель инструментов - Toggle visibility of the toolbar + Переключить видимость панели инструментов + + + Toggle filter header + + + Toggle visibility of the filter header Предпросмотр недоступен @@ -1398,7 +1404,7 @@ {0} элементов - Reopen tab + Восстановить закрытую вкладку Переименовать @@ -1605,7 +1611,7 @@ Заменить все записи разрешений дочернего объекта наследуемыми записями разрешений от этого объекта - Close pane + Закрыть pane Войти в компактный режим @@ -2013,19 +2019,19 @@ Поведение - Hello! + Привет! - Enjoying Files? Please consider reviewing in the Microsoft Store. + Нравится Files? Пожалуйста, оцените приложение в Microsoft Store. Enjoying Files? Please consider supporting the project on GitHub. - Sponsor + Спонсор - Rate us + Оцените нас Dismiss @@ -2307,7 +2313,7 @@ Настройки контекстного меню - File extensions + Расширения файлов Форматировать @@ -2316,13 +2322,13 @@ Помощь - Full screen + Полноэкранный режим Вы уверены, что хотите удалить эту метку? - Play + Воспроизвести Высота @@ -2382,7 +2388,7 @@ Увеличить размер - Sort direction + Направление сортировки Некорректное имя @@ -2394,37 +2400,37 @@ Видео - Preview popup + Запустить предпросмотр во всплывающем окне Включить компактный режим - Open the online help page in your browser + Открыть справку в браузере - Toggle full screen mode + Включить полноэкранный режим - Enter compact overlay mode + Войти в компактный режим - Exit compact overlay mode + Выйти из компактного режима - Toggle compact overlay mode + Включить компактный режим - Start search in the OmniBar + Начать поиск в OmniBar - Toggle visibility of hidden items + Включить видимость скрытых элементов - Toggle visibility of dot files + Включить видимость dot-файлов - Toggle visibility of file extensions + Включить видимость расширений файлов Переключить панель предпросмотра для просмотра превью файла @@ -2436,31 +2442,31 @@ Copy selected {0, plural, one {item} other {items}} - Copy path of the current directory + Скопировать путь текущей папки - Copy path of selected items + Скопировать путь выбранных элементов - Copy path of selected items with quotes + Скопировать путь выбранных элементов (с ковычками) - Copy path of the current directory with quotes + Скопировать путь текущей папки (с ковычками) Cut selected {0, plural, one {item} other {items}} - Paste items to the current folder + Вставить элементы в текущую папку - Paste items to the current folder as shortcuts + Вставить элементы в текущую папку как ярлыки - Paste items to the selected folder + Вставить элементы в выбранную папку - Paste to selected folder + Вставить в выбранную папку Delete selected {0, plural, one {item} other {items}} @@ -2475,7 +2481,7 @@ Создать ярлык для любого элемента - Empty the contents of Recycle Bin + Очистить содержимое Корзины Открыть меню «Форматирование диска» @@ -2505,10 +2511,10 @@ Выбрать все - Invert selected items + Инвертировать выделение - Clear selected items + Убрать выделение Переключить выбор элемента @@ -2541,13 +2547,13 @@ Установить выбранное изображение в качестве фона приложения - Install font + Установить шрифт - Install driver + Установить драйвер - Install certificate + Установить сертификат Install selected {0, plural, one {font} other {fonts}} @@ -2715,10 +2721,10 @@ Открыть новую вкладку - Navigate backward + Вернуться назад - Navigate forward + Вернуться вперёд Перейти на одну папку назад @@ -2751,7 +2757,7 @@ Закрыть все вкладки включая текущую вкладку - Reopen recently closed tab + Восстановить закрытую вкладку Переход на предыдущую вкладку @@ -2763,13 +2769,13 @@ Закрыть текущую вкладку - Close the active pane + Закрыть текущий pane Фокус на другую вкладку - Switch focus to the other pane + Переключить фокус на другой pane Переключить панель @@ -2977,13 +2983,13 @@ Без меток - Previous tab + Предыдущая вкладка - Next tab + Следующая вкладка - Close tab + Закрыть вкладку Изменить путь @@ -3013,7 +3019,7 @@ Отображать чекбоксы при выборе элементов - Edit path in the OmniBar + Изменить путь в OmniBar Создать новый элемент @@ -3293,7 +3299,7 @@ Инициализировать репозиторий - Initialize current folder as a git repository + Сделать текущую папку git-репозиторием Убрать Имя Репозитория @@ -3308,13 +3314,13 @@ Сортировка элементов по пути - Open selected directory in a new pane + Открыть выбранную папку в новом pane - Open selected directory in a new tab + Открыть выбранную папку в новой вкладке - Open selected directory in a new window + Открыть выбранную папку в новом окне Открыть все @@ -3339,10 +3345,10 @@ Команда '{0}' не готова к выполнению. - Command Palette + Командны в OmniBar - Открыть командную палитру в OmniBar + Открыть командны в OmniBar Начало через: @@ -3767,7 +3773,7 @@ Сортировать файлы и папки вместе - Sort files and folders in the same list + Сортировать файлы и папки вместе Сортировать файлы сначала @@ -4028,16 +4034,16 @@ Меню действий вкладки - Vertical pane + Pane по вертикали - Add vertical pane + Добавить pane по горизонтали - Horizontal pane + Pane по горизонтали - Add horizontal pane + Добавить pane по вертикали Расположить вертикально @@ -4078,9 +4084,6 @@ Перейти на главную страницу - - Показать кнопку "Домой" в адресной строке - Панели инструментов @@ -4256,7 +4259,7 @@ Show collapsed path breadcrumbs - Show child folders + Показать дочерние папки There are no commands containing {0} @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/sk-SK/Resources.resw b/src/Files.App/Strings/sk-SK/Resources.resw index 8b0991805064..6ac9078a5a94 100644 --- a/src/Files.App/Strings/sk-SK/Resources.resw +++ b/src/Files.App/Strings/sk-SK/Resources.resw @@ -1099,6 +1099,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Žiaden náhľad k dispozícii @@ -4080,9 +4086,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4266,4 +4269,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/sq-AL/Resources.resw b/src/Files.App/Strings/sq-AL/Resources.resw index f6dfa193fed6..1ffc5fb60856 100644 --- a/src/Files.App/Strings/sq-AL/Resources.resw +++ b/src/Files.App/Strings/sq-AL/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/sr-Cyrl/Resources.resw b/src/Files.App/Strings/sr-Cyrl/Resources.resw index a44ccd83482c..9a328b0c7839 100644 --- a/src/Files.App/Strings/sr-Cyrl/Resources.resw +++ b/src/Files.App/Strings/sr-Cyrl/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Брзи преглед датотеке није доступан @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/sv-SE/Resources.resw b/src/Files.App/Strings/sv-SE/Resources.resw index 5bafdae83e39..dd8296274f15 100644 --- a/src/Files.App/Strings/sv-SE/Resources.resw +++ b/src/Files.App/Strings/sv-SE/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + Ingen förhandsgranskning är tillgänglig @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Verktygsfält @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/ta/Resources.resw b/src/Files.App/Strings/ta/Resources.resw index 81c84e50a7e0..85cacd573329 100644 --- a/src/Files.App/Strings/ta/Resources.resw +++ b/src/Files.App/Strings/ta/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + No preview available @@ -4078,9 +4084,6 @@ ஹோம் பேஜ்கு போ - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/th-TH/Resources.resw b/src/Files.App/Strings/th-TH/Resources.resw index 5d34c1612b58..e33cc03e4160 100644 --- a/src/Files.App/Strings/th-TH/Resources.resw +++ b/src/Files.App/Strings/th-TH/Resources.resw @@ -1097,6 +1097,12 @@ Toggle visibility of the toolbar + + Toggle filter header + + + Toggle visibility of the filter header + ไม่มีตัวอย่างให้ดู @@ -4078,9 +4084,6 @@ Navigate to the home page - - Show home button in address bar - Toolbars @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/tr-TR/Resources.resw b/src/Files.App/Strings/tr-TR/Resources.resw index 57e1c8f95656..9b313fff2184 100644 --- a/src/Files.App/Strings/tr-TR/Resources.resw +++ b/src/Files.App/Strings/tr-TR/Resources.resw @@ -1097,6 +1097,12 @@ Araç çubuğu görünürlüğünü değiştir + + Toggle filter header + + + Toggle visibility of the filter header + Ön izleme yok @@ -2013,7 +2019,7 @@ Davranışlar - Hello! + Merhaba! Enjoying Files? Please consider reviewing in the Microsoft Store. @@ -2022,7 +2028,7 @@ Enjoying Files? Please consider supporting the project on GitHub. - Sponsor + Destekle Rate us @@ -2436,7 +2442,7 @@ Copy selected {0, plural, one {item} other {items}} - Copy path of the current directory + Geçerli dizin yolunu kopyala Copy path of selected items @@ -4078,9 +4084,6 @@ Ev sayfasına gidin - - Adres çubuğunda ana sayfa düğmesini göster - Araç çubukları @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + diff --git a/src/Files.App/Strings/uk-UA/Resources.resw b/src/Files.App/Strings/uk-UA/Resources.resw index 7d58ebb0862a..5997dacc7118 100644 --- a/src/Files.App/Strings/uk-UA/Resources.resw +++ b/src/Files.App/Strings/uk-UA/Resources.resw @@ -1097,6 +1097,12 @@ Сховати / Приховати видимість панелі інструментів + + Увімк. / Вимк. заголовок фільтра + + + Увімк. / Вимк. видимість заголовка фільтра + Попередній перегляд недоступний @@ -4078,9 +4084,6 @@ Перейти до головної сторінки - - Показувати кнопку «Головна» в адресному рядку - Панелі інструментів @@ -4264,4 +4267,10 @@ Показати більше + + Фільтрувати за + + + Назва файлу + diff --git a/src/Files.App/Strings/vi/Resources.resw b/src/Files.App/Strings/vi/Resources.resw index 22f1b057c2e1..a1d153ad16fe 100644 --- a/src/Files.App/Strings/vi/Resources.resw +++ b/src/Files.App/Strings/vi/Resources.resw @@ -1097,6 +1097,12 @@ Ẩn hoặc hiện thanh công cụ + + Bật/Tắt phần lọc + + + Ẩn hoặc hiện phần lọc + Không có bản xem trước @@ -1986,7 +1992,7 @@ Thao tác di chuyển không được hỗ trợ trong ngữ cảnh này. Thay vào đó, bạn có muốn sao chép khoản mục không? - Mục bị ẩn + Khoản mục bị ẩn Tùy chỉnh @@ -4078,9 +4084,6 @@ Điều hướng về trang chủ - - Hiện nút trang chủ trên thanh địa chỉ - Thanh công cụ @@ -4115,7 +4118,7 @@ Luồng dữ liệu phụ hiện đang ẩn - Bạn có muốn hiển thị luồng dữ liệu phụ không? Để sửa đổi cài đặt này, hãy mở phần Tệp & thư mục trong Cài đặt ứng dụng. + Bạn có muốn hiển thị luồng dữ liệu phụ không? Để sửa đổi cài đặt này, hãy mở phần Tệp & thư mục trong giao diện cài đặt. Quản lý nhãn @@ -4264,4 +4267,10 @@ Xem thêm + + Lọc theo + + + Filename + diff --git a/src/Files.App/Strings/zh-Hans/Resources.resw b/src/Files.App/Strings/zh-Hans/Resources.resw index 73931783e2bf..b126fc06b0c4 100644 --- a/src/Files.App/Strings/zh-Hans/Resources.resw +++ b/src/Files.App/Strings/zh-Hans/Resources.resw @@ -1097,6 +1097,12 @@ 切换工具栏的可见性 + + Toggle filter header + + + Toggle visibility of the filter header + 没有预览 @@ -2013,7 +2019,7 @@ 行为 - Hello! + 您好! Enjoying Files? Please consider reviewing in the Microsoft Store. @@ -4078,9 +4084,6 @@ 返回主页 - - 在地址栏中显示主页按钮 - 工具栏 @@ -4262,6 +4265,12 @@ 没有包含 {0} 的命令 - See more + 查看更多 + + + Filtering for + + + Filename diff --git a/src/Files.App/Strings/zh-Hant/Resources.resw b/src/Files.App/Strings/zh-Hant/Resources.resw index 7a9fc056e9db..45f05c875cf7 100644 --- a/src/Files.App/Strings/zh-Hant/Resources.resw +++ b/src/Files.App/Strings/zh-Hant/Resources.resw @@ -1097,6 +1097,12 @@ 顯示或隱藏工具列 + + Toggle filter header + + + Toggle visibility of the filter header + 無法預覽 @@ -4078,9 +4084,6 @@ 前往首頁 - - 在路徑列中顯示首頁鍵 - 工具列 @@ -4264,4 +4267,10 @@ See more + + Filtering for + + + Filename + From 1c5ca4aed84600419242a2bd1204e33a2b4620dd Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Sun, 20 Jul 2025 10:46:37 -0400 Subject: [PATCH 054/107] Build: v3.9.12 Signed-off-by: Yair <39923744+yaira2@users.noreply.github.com> --- src/Files.App (Package)/Package.appxmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App (Package)/Package.appxmanifest b/src/Files.App (Package)/Package.appxmanifest index d41dbeaed33a..61e9b1536324 100644 --- a/src/Files.App (Package)/Package.appxmanifest +++ b/src/Files.App (Package)/Package.appxmanifest @@ -16,7 +16,7 @@ + Version="3.9.12.0" /> Files - Dev From f36a19df70640b94824f306ad93de3f6c8274093 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Mon, 21 Jul 2025 00:37:16 +0900 Subject: [PATCH 055/107] Code Quality: Improved WindowsStorables (#17191) --- src/Files.App.CsWin32/ComPtr`1.cs | 25 --- src/Files.App.CsWin32/ManualGuid.cs | 30 +++ src/Files.App.CsWin32/NativeMethods.txt | 11 + .../Storables/HomeFolder/HomeFolder.cs | 50 ++--- .../WindowsStorage/ContextMenuItem.cs | 19 ++ .../WindowsStorage/ContextMenuType.cs | 18 ++ .../WindowsStorage/IFolderSettings.cs | 12 + .../Storables/WindowsStorage/IWindowsFile.cs | 9 + .../WindowsStorage/IWindowsFolder.cs | 15 ++ .../WindowsStorage/IWindowsStorable.cs | 7 +- .../WindowsStorage/JumpListDestinationType.cs | 17 ++ .../WindowsStorage/JumpListManager.cs | 74 +------ .../Storables/WindowsStorage/STATask.cs | 47 ++-- .../WindowsStorage/SystemTrayManager.cs | 154 +++++++++++++ .../WindowsStorage/WindowsBulkOperations.cs | 48 ++-- .../Storables/WindowsStorage/WindowsFile.cs | 6 +- .../Storables/WindowsStorage/WindowsFolder.cs | 82 ++++--- .../WindowsStorage/WindowsStorable.cs | 72 +++--- .../WindowsStorableHelpers.Icon.cs | 6 +- .../WindowsStorableHelpers.Process.cs | 28 +++ .../WindowsStorableHelpers.Shell.cs | 205 ++++++++++++++++-- .../WindowsStorableHelpers.Storage.cs | 7 + .../Helpers/Win32/Win32Helper.Process.cs | 40 ---- src/Files.App/ViewModels/ShellViewModel.cs | 4 +- .../Widgets/QuickAccessWidgetViewModel.cs | 16 +- 25 files changed, 674 insertions(+), 328 deletions(-) create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs create mode 100644 src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs diff --git a/src/Files.App.CsWin32/ComPtr`1.cs b/src/Files.App.CsWin32/ComPtr`1.cs index aafa936de894..6ceb19067cf8 100644 --- a/src/Files.App.CsWin32/ComPtr`1.cs +++ b/src/Files.App.CsWin32/ComPtr`1.cs @@ -64,15 +64,6 @@ public void Attach(T* other) return (T**)Unsafe.AsPointer(ref Unsafe.AsRef(in this)); } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - [Obsolete("Use `HRESULT As(U** other)` instead.")] - public readonly ComPtr As() where U : unmanaged, IComIID - { - ComPtr ptr = default; - ((IUnknown*)_ptr)->QueryInterface((Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in U.Guid)), (void**)ptr.GetAddressOf()); - return ptr; - } - [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly HRESULT As(U** other) where U : unmanaged, IComIID { @@ -91,22 +82,6 @@ public readonly HRESULT CoCreateInstance(Guid* rclsid, IUnknown* pUnkOuter = nul return PInvoke.CoCreateInstance(rclsid, pUnkOuter, dwClsContext, (Guid*)Unsafe.AsPointer(ref Unsafe.AsRef(in T.Guid)), (void**)this.GetAddressOf()); } - // Conversion operators - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator ComPtr(T* other) - { - ComPtr ptr = default; - ptr.Attach(other); - return ptr; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static implicit operator T*(ComPtr other) - { - return other._ptr; - } - // Disposer [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/Files.App.CsWin32/ManualGuid.cs b/src/Files.App.CsWin32/ManualGuid.cs index 8ab59f21ee7f..f95973c45048 100644 --- a/src/Files.App.CsWin32/ManualGuid.cs +++ b/src/Files.App.CsWin32/ManualGuid.cs @@ -41,6 +41,27 @@ public static Guid* IID_IStorageProviderStatusUISourceFactory [GuidRVAGen.Guid("00021500-0000-0000-C000-000000000046")] public static partial Guid* IID_IQueryInfo { get; } + + [GuidRVAGen.Guid("BCC18B79-BA16-442F-80C4-8A59C30C463B")] + public static partial Guid* IID_IShellItemImageFactory { get; } + + [GuidRVAGen.Guid("000214F9-0000-0000-C000-000000000046")] + public static partial Guid* IID_IShellLinkW { get; } + + [GuidRVAGen.Guid("B63EA76D-1F85-456F-A19C-48159EFA858B")] + public static partial Guid* IID_IShellItemArray { get; } + + [GuidRVAGen.Guid("7F9185B0-CB92-43C5-80A9-92277A4F7B54")] + public static partial Guid* IID_IExecuteCommand { get; } + + [GuidRVAGen.Guid("1C9CD5BB-98E9-4491-A60F-31AACC72B83C")] + public static partial Guid* IID_IObjectWithSelection { get; } + + [GuidRVAGen.Guid("000214E8-0000-0000-C000-000000000046")] + public static partial Guid* IID_IShellExtInit { get; } + + [GuidRVAGen.Guid("000214F4-0000-0000-C000-000000000046")] + public static partial Guid* IID_IContextMenu2 { get; } } public static unsafe partial class CLSID @@ -59,6 +80,15 @@ public static unsafe partial class CLSID [GuidRVAGen.Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] public static partial Guid* CLSID_ApplicationActivationManager { get; } + + [GuidRVAGen.Guid("B455F46E-E4AF-4035-B0A4-CF18D2F6F28E")] + public static partial Guid* CLSID_PinToFrequentExecute { get; } + + [GuidRVAGen.Guid("EE20EEBA-DF64-4A4E-B7BB-2D1C6B2DFCC1")] + public static partial Guid* CLSID_UnPinFromFrequentExecute { get; } + + [GuidRVAGen.Guid("D969A300-E7FF-11d0-A93B-00A0C90F2719")] + public static partial Guid* CLSID_NewMenu { get; } } public static unsafe partial class BHID diff --git a/src/Files.App.CsWin32/NativeMethods.txt b/src/Files.App.CsWin32/NativeMethods.txt index ce5524f6885e..294dcf68ab36 100644 --- a/src/Files.App.CsWin32/NativeMethods.txt +++ b/src/Files.App.CsWin32/NativeMethods.txt @@ -225,3 +225,14 @@ QITIPF_FLAGS GetKeyboardState MapVirtualKey GetKeyboardLayout +S_FALSE +IExecuteCommand +IObjectWithSelection +SHCreateShellItemArrayFromShellItem +IShellExtInit +IContextMenu2 +GetSubMenu +GetMenuItemCount +GetMenuItemInfo +IsWow64Process2 +GetCurrentProcess diff --git a/src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs b/src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs index 790cbc17c13e..ae976667d582 100644 --- a/src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs +++ b/src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs @@ -7,7 +7,7 @@ namespace Files.App.Storage.Storables { - public partial class HomeFolder : IHomeFolder + public unsafe partial class HomeFolder : IHomeFolder { public string Id => "Home"; // Will be "files://Home" in the future. @@ -48,38 +48,36 @@ public IAsyncEnumerable GetQuickAccessFolderAsync(CancellationTo /// public IAsyncEnumerable GetLogicalDrivesAsync(CancellationToken cancellationToken = default) { - return GetLogicalDrives().ToAsyncEnumerable(); + var availableDrives = PInvoke.GetLogicalDrives(); + if (availableDrives is 0) + return Enumerable.Empty().ToAsyncEnumerable(); - IEnumerable GetLogicalDrives() - { - var availableDrives = PInvoke.GetLogicalDrives(); - if (availableDrives is 0) - yield break; - - int count = BitOperations.PopCount(availableDrives); - var driveLetters = new char[count]; + int count = BitOperations.PopCount(availableDrives); + var driveLetters = new char[count]; - count = 0; - char driveLetter = 'A'; - while (availableDrives is not 0) - { - if ((availableDrives & 1) is not 0) - driveLetters[count++] = driveLetter; + count = 0; + char driveLetter = 'A'; + while (availableDrives is not 0) + { + if ((availableDrives & 1) is not 0) + driveLetters[count++] = driveLetter; - availableDrives >>= 1; - driveLetter++; - } + availableDrives >>= 1; + driveLetter++; + } - foreach (char letter in driveLetters) - { - cancellationToken.ThrowIfCancellationRequested(); + List driveItems = []; + foreach (char letter in driveLetters) + { + cancellationToken.ThrowIfCancellationRequested(); - if (WindowsStorable.TryParse($"{letter}:\\") is not IWindowsStorable driveRoot) - throw new InvalidOperationException(); + if (WindowsStorable.TryParse($"{letter}:\\") is not IWindowsStorable driveRoot) + throw new InvalidOperationException(); - yield return new WindowsFolder(driveRoot.ThisPtr); - } + driveItems.Add(new WindowsFolder(driveRoot.ThisPtr)); } + + return driveItems.ToAsyncEnumerable(); } /// diff --git a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs b/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs new file mode 100644 index 000000000000..179f6d83b75a --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs @@ -0,0 +1,19 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +namespace Files.App.Storage +{ + /// + /// Represents a Windows Shell ContextMenu item. + /// + public partial class ContextMenuItem + { + public ContextMenuType Type { get; set; } + + public uint Id { get; set; } + + public byte[]? Icon { get; set; } + + public string? Name { get; set; } + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs b/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs new file mode 100644 index 000000000000..31e3b939a30f --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs @@ -0,0 +1,18 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +namespace Files.App.Storage +{ + public enum ContextMenuType + { + Normal = 0x00000000, + + Disabled = 0x00000003, + + Checked = 0x00000008, + + Highlighted = 0x00000080, + + Default = 0x00001000, + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs b/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs new file mode 100644 index 000000000000..2fd4cfbcafa8 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Files.App.Storage +{ + public interface IFolderSettings + { + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs new file mode 100644 index 000000000000..43f30155f907 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs @@ -0,0 +1,9 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +namespace Files.App.Storage +{ + public interface IWindowsFile : IWindowsStorable, IChildFile + { + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs new file mode 100644 index 000000000000..92160da97f48 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs @@ -0,0 +1,15 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Windows.Win32.UI.Shell; + +namespace Files.App.Storage +{ + public unsafe interface IWindowsFolder : IWindowsStorable, IChildFolder + { + /// + /// Gets or sets the cached for the ShellNew context menu. + /// + public IContextMenu* ShellNewMenu { get; set; } + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs index 421d7a68dddd..c79ef3ba66cb 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs @@ -1,13 +1,14 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Windows.Win32; using Windows.Win32.UI.Shell; namespace Files.App.Storage { - public interface IWindowsStorable : IDisposable + public unsafe interface IWindowsStorable : IStorableChild, IEquatable, IDisposable { - ComPtr ThisPtr { get; } + IShellItem* ThisPtr { get; set; } + + IContextMenu* ContextMenu { get; set; } } } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs b/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs new file mode 100644 index 000000000000..e176cc787ea2 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Files.App.Storage +{ + public enum JumpListDestinationType + { + Pinned, + + Recent, + + Frequent, + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs b/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs index 3cb1dcf27e73..1f239a8ea144 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs @@ -12,83 +12,29 @@ namespace Files.App.Storage { public unsafe class JumpListManager : IDisposable { - private ComPtr pCustomDestinationList = default; + public string AppId { get; } - private static string? AppId + public JumpListManager(string appId) { - get - { - PWSTR pszAppId = default; - HRESULT hr = PInvoke.GetCurrentProcessExplicitAppUserModelID(&pszAppId); - if (hr == HRESULT.E_FAIL) - hr = HRESULT.S_OK; + if (string.IsNullOrEmpty(appId)) + throw new ArgumentException("App ID cannot be null or empty.", nameof(appId)); - hr.ThrowIfFailedOnDebug(); - - return pszAppId.ToString(); - } + AppId = appId; + //_jumpList = new ConcurrentDictionary(); } - public ConcurrentBag JumpListItems { get; private set; } = []; - - public ConcurrentBag RemovedItems { get; private set; } = []; - - public ConcurrentBag RejectedItems { get; private set; } = []; - - // A special "Frequent" category managed by Windows - public bool ShowFrequentCategory { get; set; } - - // A special "Recent" category managed by Windows - public bool ShowRecentCategory { get; set; } - - private static JumpListManager? _Default = null; - public static JumpListManager Default { get; } = _Default ??= new JumpListManager(); - - public JumpListManager() + public IEnumerable GetAutomaticDestinations() { - Guid CLSID_CustomDestinationList = typeof(DestinationList).GUID; - Guid IID_ICustomDestinationList = ICustomDestinationList.IID_Guid; - HRESULT hr = PInvoke.CoCreateInstance( - &CLSID_CustomDestinationList, - null, - CLSCTX.CLSCTX_INPROC_SERVER, - &IID_ICustomDestinationList, - (void**)pCustomDestinationList.GetAddressOf()); - - // Should not happen but as a sanity check at an early stage - hr.ThrowOnFailure(); + return []; } - public HRESULT Save() + public IEnumerable GetCustomDestinations() { - Debug.Assert(Thread.CurrentThread.GetApartmentState() is ApartmentState.STA); - - HRESULT hr = pCustomDestinationList.Get()->SetAppID(AppId); - - uint cMinSlots = 0; - ComPtr pDeletedItemsObjectArray = default; - Guid IID_IObjectArray = IObjectArray.IID_Guid; - - hr = pCustomDestinationList.Get()->BeginList(&cMinSlots, &IID_IObjectArray, (void**)pDeletedItemsObjectArray.GetAddressOf()); - - // TODO: Validate items - - // TODO: Group them as categories - - // TODO: Append a custom category or to the Tasks - - if (ShowFrequentCategory) - pCustomDestinationList.Get()->AppendKnownCategory(KNOWNDESTCATEGORY.KDC_FREQUENT); - - if (ShowRecentCategory) - pCustomDestinationList.Get()->AppendKnownCategory(KNOWNDESTCATEGORY.KDC_RECENT); - - return HRESULT.S_OK; + return []; } public void Dispose() { - pCustomDestinationList.Dispose(); } } } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/STATask.cs b/src/Files.App.Storage/Storables/WindowsStorage/STATask.cs index 29a4a6819e61..742e856e3a84 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/STATask.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/STATask.cs @@ -1,16 +1,17 @@ // Copyright (c) Files Community // Licensed under the MIT License. +using Microsoft.Extensions.Logging; using Windows.Win32; namespace Files.App.Storage { /// - /// Represents an asynchronous operation on STA. + /// Represents a synchronous/asynchronous operation on STA. /// public partial class STATask { - public static Task Run(Action action) + public static Task Run(Action action, ILogger? logger = null) { var tcs = new TaskCompletionSource(); @@ -26,25 +27,24 @@ public static Task Run(Action action) } catch (Exception ex) { + tcs.SetResult(); + logger?.LogWarning(ex, "An exception was occurred during the execution within STA."); tcs.SetException(ex); } finally { PInvoke.OleUninitialize(); } - }) - { - IsBackground = true, - Priority = ThreadPriority.Normal - }; + }); + thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); return tcs.Task; } - public static Task Run(Func func) + public static Task Run(Func func, ILogger? logger = null) { var tcs = new TaskCompletionSource(); @@ -59,25 +59,24 @@ public static Task Run(Func func) } catch (Exception ex) { + tcs.SetResult(default!); + logger?.LogWarning(ex, "An exception was occurred during the execution within STA."); tcs.SetException(ex); } finally { PInvoke.OleUninitialize(); } - }) - { - IsBackground = true, - Priority = ThreadPriority.Normal - }; + }); + thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); return tcs.Task; } - public static Task Run(Func func) + public static Task Run(Func func, ILogger? logger = null) { var tcs = new TaskCompletionSource(); @@ -93,25 +92,24 @@ public static Task Run(Func func) } catch (Exception ex) { + tcs.SetResult(); + logger?.LogWarning(ex, "An exception was occurred during the execution within STA."); tcs.SetException(ex); } finally { PInvoke.OleUninitialize(); } - }) - { - IsBackground = true, - Priority = ThreadPriority.Normal - }; + }); + thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); return tcs.Task; } - public static Task Run(Func> func) + public static Task Run(Func> func, ILogger? logger = null) { var tcs = new TaskCompletionSource(); @@ -126,18 +124,17 @@ public static Task Run(Func func) } catch (Exception ex) { + tcs.SetResult(default); + logger?.LogWarning(ex, "An exception was occurred during the execution within STA."); tcs.SetException(ex); } finally { PInvoke.OleUninitialize(); } - }) - { - IsBackground = true, - Priority = ThreadPriority.Normal - }; + }); + thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); diff --git a/src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs b/src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs new file mode 100644 index 000000000000..6c861a097f74 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs @@ -0,0 +1,154 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using System.Runtime.InteropServices; +using Windows.Win32; +using Windows.Win32.Foundation; +using Windows.Win32.UI.Shell; +using Windows.Win32.UI.WindowsAndMessaging; + +namespace Files.App.Storage +{ + /// + /// Exposes a manager to create or delete an system tray icon you provide. + /// + public unsafe partial class SystemTrayManager : IDisposable + { + string _szWndClassName = null!; + string _szToolTip = null!; + HICON _hIcon = default; + private Guid _id; + private uint _dwCallbackMsgId; + Action _callback = null!; + + private HWND _hWnd = default; + private WNDPROC? _wndProc; + private uint _dwTaskbarRestartMsgId; + private bool _isShown; + + public static SystemTrayManager CreateIcon(string szWndClassName, string szToolTip, HICON hIcon, Guid id, uint dwCallbackMsgId, Action callback) + { + return new() + { + _szWndClassName = szWndClassName, + _szToolTip = szToolTip, + _hIcon = hIcon, + _id = id, + _dwCallbackMsgId = dwCallbackMsgId, + _callback = callback, + }; + } + + private bool CreateIcon() + { + if (_hWnd.IsNull) + _hWnd = CreateIconWindow(_szWndClassName); + + NOTIFYICONDATAW data = default; + data.cbSize = (uint)sizeof(NOTIFYICONDATAW); + data.hWnd = _hWnd; + data.uCallbackMessage = _dwCallbackMsgId; + data.guidItem = _id; + data.hIcon = _hIcon; + data.uFlags = NOTIFY_ICON_DATA_FLAGS.NIF_MESSAGE | NOTIFY_ICON_DATA_FLAGS.NIF_ICON | NOTIFY_ICON_DATA_FLAGS.NIF_TIP | NOTIFY_ICON_DATA_FLAGS.NIF_GUID | NOTIFY_ICON_DATA_FLAGS.NIF_SHOWTIP; + data.szTip = _szToolTip; + data.Anonymous.uVersion = 4u; + + if (_isShown) + { + return PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_DELETE, &data); + } + else + { + bool fRes = PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_DELETE, &data); + if (!fRes) return false; + + fRes = PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_ADD, &data); + if (!fRes) return false; + + fRes = PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_SETVERSION, &data); + if (!fRes) return false; + + _isShown = true; + + return true; + } + } + + public bool DeleteIcon() + { + if (_isShown) + { + NOTIFYICONDATAW data = default; + data.cbSize = (uint)sizeof(NOTIFYICONDATAW); + data.hWnd = _hWnd; + data.guidItem = _id; + data.uFlags = NOTIFY_ICON_DATA_FLAGS.NIF_GUID; + data.Anonymous.uVersion = 4u; + + return PInvoke.Shell_NotifyIcon(NOTIFY_ICON_MESSAGE.NIM_DELETE, &data); + } + + return true; + } + + private HWND CreateIconWindow(string szWndClassName) + { + fixed (char* pszWndClassName = szWndClassName) + { + _wndProc ??= new(WndProc); + + WNDCLASSEXW wndClass = default; + + wndClass.cbSize = (uint)sizeof(WNDCLASSEXW); + wndClass.style = WNDCLASS_STYLES.CS_DBLCLKS; + wndClass.hInstance = PInvoke.GetModuleHandle(default(PCWSTR)); + wndClass.lpszClassName = pszWndClassName; + wndClass.lpfnWndProc = (delegate* unmanaged[Stdcall]) + Marshal.GetFunctionPointerForDelegate(_wndProc); + + PInvoke.RegisterClassEx(&wndClass); + + _dwTaskbarRestartMsgId = PInvoke.RegisterWindowMessage("TaskbarCreated"); + + return PInvoke.CreateWindowEx( + WINDOW_EX_STYLE.WS_EX_LEFT, pszWndClassName, default, + WINDOW_STYLE.WS_OVERLAPPED, 0, 0, 1, 1, HWND.Null, HMENU.Null, HINSTANCE.Null, null); + } + } + + private LRESULT WndProc(HWND hWnd, uint uMsg, WPARAM wParam, LPARAM lParam) + { + if (uMsg == _dwCallbackMsgId) + { + _callback((uint)(lParam.Value & 0xFFFF)); + + return default; + } + else if (uMsg is PInvoke.WM_DESTROY) + { + DeleteIcon(); + + return default; + } + else if (uMsg == _dwTaskbarRestartMsgId) + { + DeleteIcon(); + CreateIcon(); + } + + return PInvoke.DefWindowProc(hWnd, uMsg, wParam, lParam); + } + + public void Dispose() + { + if (!_hWnd.IsNull) + PInvoke.DestroyWindow(_hWnd); + + if (!_hIcon.IsNull) + PInvoke.DestroyIcon(_hIcon); + + _wndProc = null; + } + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs index a6393243246f..d995d20ea71b 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs @@ -12,12 +12,12 @@ namespace Files.App.Storage /// /// Handles bulk file operations in Windows, such as copy, move, delete, create, and rename, supporting progress tracking and event notifications. /// - public sealed partial class WindowsBulkOperations : IDisposable + public unsafe partial class WindowsBulkOperations : IDisposable { // Fields - private readonly ComPtr _pFileOperation; - private readonly ComPtr _pProgressSink; + private readonly IFileOperation* _pFileOperation; + private readonly IFileOperationProgressSink* _pProgressSink; private readonly uint _progressSinkCookie; // Events @@ -70,24 +70,20 @@ public sealed partial class WindowsBulkOperations : IDisposable /// Defines the behavior of the file operation, such as allowing undo and suppressing directory confirmation. public unsafe WindowsBulkOperations(HWND ownerHWnd = default, FILEOPERATION_FLAGS flags = FILEOPERATION_FLAGS.FOF_ALLOWUNDO | FILEOPERATION_FLAGS.FOF_NOCONFIRMMKDIR) { - var clsid = typeof(FileOperation).GUID; - var iid = typeof(IFileOperation).GUID; + IFileOperation* pFileOperation = null; - HRESULT hr = PInvoke.CoCreateInstance( - &clsid, - null, - CLSCTX.CLSCTX_LOCAL_SERVER, - &iid, - (void**)_pFileOperation.GetAddressOf()) - .ThrowIfFailedOnDebug(); + HRESULT hr = PInvoke.CoCreateInstance(CLSID.CLSID_FileOperation, null, CLSCTX.CLSCTX_LOCAL_SERVER, IID.IID_IFileOperation, (void**)&pFileOperation); + hr.ThrowIfFailedOnDebug(); + + _pFileOperation = pFileOperation; if (ownerHWnd != default) - hr = _pFileOperation.Get()->SetOwnerWindow(ownerHWnd).ThrowIfFailedOnDebug(); + hr = _pFileOperation->SetOwnerWindow(ownerHWnd).ThrowIfFailedOnDebug(); - hr = _pFileOperation.Get()->SetOperationFlags(flags).ThrowIfFailedOnDebug(); + hr = _pFileOperation->SetOperationFlags(flags).ThrowIfFailedOnDebug(); - _pProgressSink.Attach((IFileOperationProgressSink*)WindowsBulkOperationsSink.Create(this)); - hr = _pFileOperation.Get()->Advise(_pProgressSink.Get(), out var progressSinkCookie).ThrowIfFailedOnDebug(); + _pProgressSink = (IFileOperationProgressSink*)WindowsBulkOperationsSink.Create(this); + hr = _pFileOperation->Advise(_pProgressSink, out var progressSinkCookie).ThrowIfFailedOnDebug(); _progressSinkCookie = progressSinkCookie; } @@ -101,7 +97,7 @@ public unsafe WindowsBulkOperations(HWND ownerHWnd = default, FILEOPERATION_FLAG public unsafe HRESULT QueueCopyOperation(WindowsStorable targetItem, WindowsFolder destinationFolder, string? copyName) { fixed (char* pszCopyName = copyName) - return _pFileOperation.Get()->CopyItem(targetItem.ThisPtr.Get(), destinationFolder.ThisPtr.Get(), pszCopyName, _pProgressSink.Get()); + return _pFileOperation->CopyItem(targetItem.ThisPtr, destinationFolder.ThisPtr, pszCopyName, _pProgressSink); } /// @@ -111,7 +107,7 @@ public unsafe HRESULT QueueCopyOperation(WindowsStorable targetItem, WindowsFold /// If this method succeeds, it returns . Otherwise, it returns an error code. public unsafe HRESULT QueueDeleteOperation(WindowsStorable targetItem) { - return _pFileOperation.Get()->DeleteItem(targetItem.ThisPtr.Get(), _pProgressSink.Get()); + return _pFileOperation->DeleteItem(targetItem.ThisPtr, _pProgressSink); } /// @@ -124,7 +120,7 @@ public unsafe HRESULT QueueDeleteOperation(WindowsStorable targetItem) public unsafe HRESULT QueueMoveOperation(WindowsStorable targetItem, WindowsFolder destinationFolder, string? newName) { fixed (char* pszNewName = newName) - return _pFileOperation.Get()->MoveItem(targetItem.ThisPtr.Get(), destinationFolder.ThisPtr.Get(), pszNewName, null); + return _pFileOperation->MoveItem(targetItem.ThisPtr, destinationFolder.ThisPtr, pszNewName, null); } /// @@ -138,7 +134,7 @@ public unsafe HRESULT QueueMoveOperation(WindowsStorable targetItem, WindowsFold public unsafe HRESULT QueueCreateOperation(WindowsFolder destinationFolder, FILE_FLAGS_AND_ATTRIBUTES fileAttributes, string name, string? templateName) { fixed (char* pszName = name, pszTemplateName = templateName) - return _pFileOperation.Get()->NewItem(destinationFolder.ThisPtr.Get(), (uint)fileAttributes, pszName, pszTemplateName, _pProgressSink.Get()); + return _pFileOperation->NewItem(destinationFolder.ThisPtr, (uint)fileAttributes, pszName, pszTemplateName, _pProgressSink); } /// @@ -150,7 +146,7 @@ public unsafe HRESULT QueueCreateOperation(WindowsFolder destinationFolder, FILE public unsafe HRESULT QueueRenameOperation(WindowsStorable targetItem, string newName) { fixed (char* pszNewName = newName) - return _pFileOperation.Get()->RenameItem(targetItem.ThisPtr.Get(), pszNewName, _pProgressSink.Get()); + return _pFileOperation->RenameItem(targetItem.ThisPtr, pszNewName, _pProgressSink); } /// @@ -159,7 +155,7 @@ public unsafe HRESULT QueueRenameOperation(WindowsStorable targetItem, string ne /// If this method succeeds, it returns . Otherwise, it returns an error code. public unsafe HRESULT PerformAllOperations() { - return _pFileOperation.Get()->PerformOperations(); + return _pFileOperation->PerformOperations(); } // Disposer @@ -167,11 +163,11 @@ public unsafe HRESULT PerformAllOperations() /// public unsafe void Dispose() { - if (!_pProgressSink.IsNull) - _pFileOperation.Get()->Unadvise(_progressSinkCookie); + if (_pProgressSink is not null) + _pFileOperation->Unadvise(_progressSinkCookie); - _pFileOperation.Dispose(); - _pProgressSink.Dispose(); + _pFileOperation->Release(); + _pProgressSink->Release(); } } } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs index 3ce56f786c2f..93362f26a7e9 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs @@ -8,11 +8,11 @@ namespace Files.App.Storage { [DebuggerDisplay("{" + nameof(ToString) + "()}")] - public sealed class WindowsFile : WindowsStorable, IChildFile + public unsafe class WindowsFile : WindowsStorable, IWindowsFile { - public WindowsFile(ComPtr nativeObject) + public WindowsFile(IShellItem* ptr) { - ThisPtr = nativeObject; + ThisPtr = ptr; } public Task OpenStreamAsync(FileAccess accessMode, CancellationToken cancellationToken = default) diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs index f4105687184f..510300fa5f6d 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs @@ -10,80 +10,76 @@ namespace Files.App.Storage { [DebuggerDisplay("{" + nameof(ToString) + "()}")] - public sealed class WindowsFolder : WindowsStorable, IChildFolder + public unsafe class WindowsFolder : WindowsStorable, IWindowsFolder { - public WindowsFolder(ComPtr nativeObject) + /// + public IContextMenu* ShellNewMenu { - ThisPtr = nativeObject; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set; } - public unsafe WindowsFolder(IShellItem* nativeObject) + public WindowsFolder(IShellItem* ptr) { - ComPtr ptr = default; - ptr.Attach(nativeObject); ThisPtr = ptr; } - public unsafe WindowsFolder(Guid folderId) + public WindowsFolder(Guid folderId) { - ComPtr pItem = default; + IShellItem* pShellItem = default; - HRESULT hr = PInvoke.SHGetKnownFolderItem(&folderId, KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, HANDLE.Null, IID.IID_IShellItem, (void**)pItem.GetAddressOf()); + HRESULT hr = PInvoke.SHGetKnownFolderItem(&folderId, KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, HANDLE.Null, IID.IID_IShellItem, (void**)&pShellItem); if (hr.Failed) { fixed (char* pszShellPath = $"Shell:::{folderId:B}") - hr = PInvoke.SHCreateItemFromParsingName(pszShellPath, null, IID.IID_IShellItem, (void**)pItem.GetAddressOf()); + hr = PInvoke.SHCreateItemFromParsingName(pszShellPath, null, IID.IID_IShellItem, (void**)&pShellItem); // Invalid FOLDERID; this should never happen. hr.ThrowOnFailure(); } - ThisPtr = pItem; + ThisPtr = pShellItem; } public IAsyncEnumerable GetItemsAsync(StorableType type = StorableType.All, CancellationToken cancellationToken = default) { - return GetItems().ToAsyncEnumerable(); + using ComPtr pEnumShellItems = default; - unsafe IEnumerable GetItems() - { - ComPtr pEnumShellItems = default; - GetEnumerator(); + HRESULT hr = ThisPtr->BindToHandler(null, BHID.BHID_EnumItems, IID.IID_IEnumShellItems, (void**)pEnumShellItems.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return Enumerable.Empty().ToAsyncEnumerable(); - ComPtr pShellItem = default; - while (GetNext() && !pShellItem.IsNull) - { - cancellationToken.ThrowIfCancellationRequested(); - var isFolder = pShellItem.HasShellAttributes(SFGAO_FLAGS.SFGAO_FOLDER); - - if (type is StorableType.File && !isFolder) - { - yield return new WindowsFile(pShellItem); - } - else if (type is StorableType.Folder && isFolder) - { - yield return new WindowsFolder(pShellItem); - } - else - { - continue; - } - } + List childItems = []; - yield break; + IShellItem* pChildShellItem = null; + while ((hr = pEnumShellItems.Get()->Next(1, &pChildShellItem)) == HRESULT.S_OK) + { + bool isFolder = pChildShellItem->GetAttributes(SFGAO_FLAGS.SFGAO_FOLDER, out var dwAttributes).Succeeded && dwAttributes is SFGAO_FLAGS.SFGAO_FOLDER; - unsafe void GetEnumerator() + if (type.HasFlag(StorableType.File) && !isFolder) { - HRESULT hr = ThisPtr.Get()->BindToHandler(null, BHID.BHID_EnumItems, IID.IID_IEnumShellItems, (void**)pEnumShellItems.GetAddressOf()); - hr.ThrowIfFailedOnDebug(); + childItems.Add(new WindowsFile(pChildShellItem)); } - - unsafe bool GetNext() + else if (type.HasFlag(StorableType.Folder) && isFolder) { - HRESULT hr = pEnumShellItems.Get()->Next(1, pShellItem.GetAddressOf()); - return hr.ThrowIfFailedOnDebug() == HRESULT.S_OK; + childItems.Add(new WindowsFolder(pChildShellItem)); } } + + if (hr.ThrowIfFailedOnDebug().Failed) + return Enumerable.Empty().ToAsyncEnumerable(); + + return childItems.ToAsyncEnumerable(); + } + + public override void Dispose() + { + base.Dispose(); + + if (ShellNewMenu is not null) ShellNewMenu->Release(); } } } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs index 3fdc51e33389..bde2995b6490 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs @@ -1,6 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. +using System.Runtime.CompilerServices; using Windows.Win32; using Windows.Win32.Foundation; using Windows.Win32.System.SystemServices; @@ -8,59 +9,59 @@ namespace Files.App.Storage { - public abstract class WindowsStorable : IWindowsStorable, IStorableChild, IEquatable + public unsafe abstract class WindowsStorable : IWindowsStorable { - public ComPtr ThisPtr { get; protected set; } + public IShellItem* ThisPtr + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set; + } + + public IContextMenu* ContextMenu + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set; + } public string Id => this.GetDisplayName(SIGDN.SIGDN_FILESYSPATH); public string Name => this.GetDisplayName(SIGDN.SIGDN_PARENTRELATIVEFORUI); - public static unsafe WindowsStorable? TryParse(string parsablePath) + public static WindowsStorable? TryParse(string szPath) { HRESULT hr = default; - ComPtr pShellItem = default; - var IID_IShellItem = typeof(IShellItem).GUID; - - fixed (char* pszParsablePath = parsablePath) - { - hr = PInvoke.SHCreateItemFromParsingName( - pszParsablePath, - null, - &IID_IShellItem, - (void**)pShellItem.GetAddressOf()); - } - - if (pShellItem.IsNull) + IShellItem* pShellItem = null; + + fixed (char* pszPath = szPath) + hr = PInvoke.SHCreateItemFromParsingName(pszPath, null, IID.IID_IShellItem, (void**)&pShellItem); + + if (pShellItem is null) return null; - return pShellItem.HasShellAttributes(SFGAO_FLAGS.SFGAO_FOLDER) - ? new WindowsFolder(pShellItem) - : new WindowsFile(pShellItem); + return TryParse(pShellItem); } - public static unsafe WindowsStorable? TryParse(IShellItem* ptr) + public static WindowsStorable? TryParse(IShellItem* pShellItem) { - ComPtr pShellItem = default; - pShellItem.Attach(ptr); + bool isFolder = pShellItem->GetAttributes(SFGAO_FLAGS.SFGAO_FOLDER, out var returnedAttributes).Succeeded && returnedAttributes is SFGAO_FLAGS.SFGAO_FOLDER; - return pShellItem.HasShellAttributes(SFGAO_FLAGS.SFGAO_FOLDER) - ? new WindowsFolder(pShellItem) - : new WindowsFile(pShellItem); + return isFolder ? new WindowsFolder(pShellItem) : new WindowsFile(pShellItem); } public unsafe Task GetParentAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - ComPtr pParentFolder = default; - HRESULT hr = ThisPtr.Get()->GetParent(pParentFolder.GetAddressOf()); - if (hr.Failed) - { - if (!pParentFolder.IsNull) pParentFolder.Dispose(); - + IShellItem* pParentFolder = default; + HRESULT hr = ThisPtr->GetParent(&pParentFolder); + if (hr.ThrowIfFailedOnDebug().Failed) return Task.FromResult(null); - } return Task.FromResult(new WindowsFolder(pParentFolder)); } @@ -77,9 +78,10 @@ public override int GetHashCode() } /// - public void Dispose() + public virtual void Dispose() { - ThisPtr.Dispose(); + if (ThisPtr is not null) ThisPtr->Release(); + if (ContextMenu is not null) ContextMenu->Release(); } /// @@ -94,7 +96,7 @@ public unsafe bool Equals(IWindowsStorable? other) if (other is null) return false; - return ThisPtr.Get()->Compare(other.ThisPtr.Get(), (uint)_SICHINTF.SICHINT_DISPLAY, out int order).Succeeded && order is 0; + return ThisPtr->Compare(other.ThisPtr, (uint)_SICHINTF.SICHINT_DISPLAY, out int order).Succeeded && order is 0; } public static bool operator ==(WindowsStorable left, WindowsStorable right) diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs index 9b1fd95a31a5..f50de4bbad35 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs @@ -45,7 +45,7 @@ public unsafe static HRESULT TryGetThumbnail(this IWindowsStorable storable, int thumbnailData = null; using ComPtr pShellItemImageFactory = default; - storable.ThisPtr.As(pShellItemImageFactory.GetAddressOf()); + storable.ThisPtr->QueryInterface(IID.IID_IShellItemImageFactory, (void**)pShellItemImageFactory.GetAddressOf()); if (pShellItemImageFactory.IsNull) return HRESULT.E_NOINTERFACE; @@ -267,10 +267,8 @@ public unsafe static HRESULT TrySetShortcutIcon(this IWindowsStorable storable, return HRESULT.E_INVALIDARG; using ComPtr pShellLink = default; - Guid IID_IShellLink = IShellLinkW.IID_Guid; - Guid BHID_SFUIObject = PInvoke.BHID_SFUIObject; - HRESULT hr = storable.ThisPtr.Get()->BindToHandler(null, &BHID_SFUIObject, &IID_IShellLink, (void**)pShellLink.GetAddressOf()); + HRESULT hr = storable.ThisPtr->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IShellLinkW, (void**)pShellLink.GetAddressOf()); if (hr.ThrowIfFailedOnDebug().Failed) return hr; diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs new file mode 100644 index 000000000000..724434b5f082 --- /dev/null +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs @@ -0,0 +1,28 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Windows.Win32; +using Windows.Win32.Foundation; +using Windows.Win32.System.SystemInformation; + +namespace Files.App.Storage +{ + public unsafe static partial class WindowsStorableHelpers + { + public static bool IsOnArmProcessor() + { + IMAGE_FILE_MACHINE dwMachineType = default; + + // Assumes the current process token has "PROCESS_QUERY_INFORMATION" or "PROCESS_QUERY_LIMITED_INFORMATION" access right + bool fResult = PInvoke.IsWow64Process2(PInvoke.GetCurrentProcess(), null, &dwMachineType); + if (!fResult) + Debug.WriteLine($"{nameof(PInvoke.IsWow64Process2)} has failed."); + + return dwMachineType is + IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_THUMB or + IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_ARMNT or + IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_ARM64 or + IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_ARM; + } + } +} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs index c09b2fc0d103..f63a2502009b 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs @@ -2,22 +2,25 @@ // Licensed under the MIT License. using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using System.Text; using Windows.Win32; using Windows.Win32.Foundation; +using Windows.Win32.System.Com; using Windows.Win32.System.SystemServices; using Windows.Win32.UI.Shell; +using Windows.Win32.UI.Shell.Common; using Windows.Win32.UI.Shell.PropertiesSystem; using Windows.Win32.UI.WindowsAndMessaging; namespace Files.App.Storage { - public static partial class WindowsStorableHelpers + public unsafe static partial class WindowsStorableHelpers { - public unsafe static HRESULT GetPropertyValue(this IWindowsStorable storable, string propKey, out TValue value) + public static HRESULT GetPropertyValue(this IWindowsStorable storable, string propKey, out TValue value) { using ComPtr pShellItem2 = default; - HRESULT hr = storable.ThisPtr.Get()->QueryInterface(IID.IID_IShellItem2, (void**)pShellItem2.GetAddressOf()); + HRESULT hr = storable.ThisPtr->QueryInterface(IID.IID_IShellItem2, (void**)pShellItem2.GetAddressOf()); PROPERTYKEY propertyKey = default; fixed (char* pszPropertyKey = propKey) @@ -33,10 +36,9 @@ public unsafe static HRESULT GetPropertyValue(this IWindowsStorable stor } if (typeof(TValue) == typeof(bool)) { - bool propertyValue = false; - hr = pShellItem2.Get()->GetBool(propertyKey, out var fPropertyValue); - propertyValue = fPropertyValue; - value = Unsafe.As(ref propertyValue); + bool fPropertyValue = false; + hr = pShellItem2.Get()->GetBool(&propertyKey, (BOOL*)&fPropertyValue); + value = Unsafe.As(ref fPropertyValue); return hr; } @@ -47,34 +49,27 @@ public unsafe static HRESULT GetPropertyValue(this IWindowsStorable stor } } - public unsafe static bool HasShellAttributes(this IWindowsStorable storable, SFGAO_FLAGS attributes) + public static bool HasShellAttributes(this IWindowsStorable storable, SFGAO_FLAGS attributes) { - return storable.ThisPtr.Get()->GetAttributes(SFGAO_FLAGS.SFGAO_FOLDER, out var returnedAttributes).Succeeded && - returnedAttributes == attributes; + return storable.ThisPtr->GetAttributes(attributes, out var dwRetAttributes).Succeeded && dwRetAttributes == attributes; } - public unsafe static bool HasShellAttributes(this ComPtr pShellItem, SFGAO_FLAGS attributes) - { - return pShellItem.Get()->GetAttributes(SFGAO_FLAGS.SFGAO_FOLDER, out var returnedAttributes).Succeeded && - returnedAttributes == attributes; - } - - public unsafe static string GetDisplayName(this IWindowsStorable storable, SIGDN options = SIGDN.SIGDN_FILESYSPATH) + public static string GetDisplayName(this IWindowsStorable storable, SIGDN options = SIGDN.SIGDN_FILESYSPATH) { using ComHeapPtr pszName = default; - HRESULT hr = storable.ThisPtr.Get()->GetDisplayName(options, (PWSTR*)pszName.GetAddressOf()); + HRESULT hr = storable.ThisPtr->GetDisplayName(options, (PWSTR*)pszName.GetAddressOf()); return hr.ThrowIfFailedOnDebug().Succeeded ? new string((char*)pszName.Get()) // this is safe as it gets memcpy'd internally : string.Empty; } - public unsafe static HRESULT TryInvokeContextMenuVerb(this IWindowsStorable storable, string verbName) + public static HRESULT TryInvokeContextMenuVerb(this IWindowsStorable storable, string verbName) { Debug.Assert(Thread.CurrentThread.GetApartmentState() is ApartmentState.STA); using ComPtr pContextMenu = default; - HRESULT hr = storable.ThisPtr.Get()->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IContextMenu, (void**)pContextMenu.GetAddressOf()); + HRESULT hr = storable.ThisPtr->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IContextMenu, (void**)pContextMenu.GetAddressOf()); HMENU hMenu = PInvoke.CreatePopupMenu(); hr = pContextMenu.Get()->QueryContextMenu(hMenu, 0, 1, 0x7FFF, PInvoke.CMF_OPTIMIZEFORINVOKE); @@ -94,12 +89,12 @@ public unsafe static HRESULT TryInvokeContextMenuVerb(this IWindowsStorable stor } } - public unsafe static HRESULT TryInvokeContextMenuVerbs(this IWindowsStorable storable, string[] verbNames, bool earlyReturnOnSuccess) + public static HRESULT TryInvokeContextMenuVerbs(this IWindowsStorable storable, string[] verbNames, bool earlyReturnOnSuccess) { Debug.Assert(Thread.CurrentThread.GetApartmentState() is ApartmentState.STA); using ComPtr pContextMenu = default; - HRESULT hr = storable.ThisPtr.Get()->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IContextMenu, (void**)pContextMenu.GetAddressOf()); + HRESULT hr = storable.ThisPtr->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IContextMenu, (void**)pContextMenu.GetAddressOf()); HMENU hMenu = PInvoke.CreatePopupMenu(); hr = pContextMenu.Get()->QueryContextMenu(hMenu, 0, 1, 0x7FFF, PInvoke.CMF_OPTIMIZEFORINVOKE); @@ -125,12 +120,12 @@ public unsafe static HRESULT TryInvokeContextMenuVerbs(this IWindowsStorable sto return hr; } - public unsafe static HRESULT TryGetShellTooltip(this IWindowsStorable storable, out string? tooltip) + public static HRESULT TryGetShellTooltip(this IWindowsStorable storable, out string? tooltip) { tooltip = null; using ComPtr pQueryInfo = default; - HRESULT hr = storable.ThisPtr.Get()->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IQueryInfo, (void**)pQueryInfo.GetAddressOf()); + HRESULT hr = storable.ThisPtr->BindToHandler(null, BHID.BHID_SFUIObject, IID.IID_IQueryInfo, (void**)pQueryInfo.GetAddressOf()); if (hr.ThrowIfFailedOnDebug().Failed) return hr; @@ -143,5 +138,167 @@ public unsafe static HRESULT TryGetShellTooltip(this IWindowsStorable storable, return HRESULT.S_OK; } + + public static HRESULT TryPinFolderToQuickAccess(this IWindowsFolder @this) + { + HRESULT hr = default; + + using ComPtr pExecuteCommand = default; + using ComPtr pObjectWithSelection = default; + + hr = PInvoke.CoCreateInstance(CLSID.CLSID_PinToFrequentExecute, null, CLSCTX.CLSCTX_INPROC_SERVER, IID.IID_IExecuteCommand, (void**)pExecuteCommand.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + using ComPtr pShellItemArray = default; + hr = PInvoke.SHCreateShellItemArrayFromShellItem(@this.ThisPtr, IID.IID_IShellItemArray, (void**)pShellItemArray.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pExecuteCommand.Get()->QueryInterface(IID.IID_IObjectWithSelection, (void**)pObjectWithSelection.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pObjectWithSelection.Get()->SetSelection(pShellItemArray.Get()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pExecuteCommand.Get()->Execute(); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + return HRESULT.S_OK; + } + + public static HRESULT TryUnpinFolderFromQuickAccess(this IWindowsFolder @this) + { + HRESULT hr = default; + + using ComPtr pExecuteCommand = default; + using ComPtr pObjectWithSelection = default; + + hr = PInvoke.CoCreateInstance(CLSID.CLSID_UnPinFromFrequentExecute, null, CLSCTX.CLSCTX_INPROC_SERVER, IID.IID_IExecuteCommand, (void**)pExecuteCommand.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + using ComPtr pShellItemArray = default; + hr = PInvoke.SHCreateShellItemArrayFromShellItem(@this.ThisPtr, IID.IID_IShellItemArray, (void**)pShellItemArray.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pExecuteCommand.Get()->QueryInterface(IID.IID_IObjectWithSelection, (void**)pObjectWithSelection.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pObjectWithSelection.Get()->SetSelection(pShellItemArray.Get()); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + hr = pExecuteCommand.Get()->Execute(); + if (hr.ThrowIfFailedOnDebug().Failed) + return hr; + + return HRESULT.S_OK; + } + + public static IEnumerable GetShellNewItems(this IWindowsFolder @this) + { + HRESULT hr = default; + + IContextMenu* pNewMenu = default; + using ComPtr pShellExtInit = default; + using ComPtr pContextMenu2 = default; + + hr = PInvoke.CoCreateInstance(CLSID.CLSID_NewMenu, null, CLSCTX.CLSCTX_INPROC_SERVER, IID.IID_IContextMenu, (void**)&pNewMenu); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + hr = pNewMenu->QueryInterface(IID.IID_IContextMenu2, (void**)pContextMenu2.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + hr = pNewMenu->QueryInterface(IID.IID_IShellExtInit, (void**)pShellExtInit.GetAddressOf()); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + @this.ShellNewMenu = pNewMenu; + + ITEMIDLIST* pFolderPidl = default; + hr = PInvoke.SHGetIDListFromObject((IUnknown*)@this.ThisPtr, &pFolderPidl); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + hr = pShellExtInit.Get()->Initialize(pFolderPidl, null, default); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + // Inserts "New (&W)" + HMENU hMenu = PInvoke.CreatePopupMenu(); + hr = pNewMenu->QueryContextMenu(hMenu, 0, 1, 256, 0); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + // Invokes CNewMenu::_InitMenuPopup(), which populates the hSubMenu + HMENU hSubMenu = PInvoke.GetSubMenu(hMenu, 0); + hr = pContextMenu2.Get()->HandleMenuMsg(PInvoke.WM_INITMENUPOPUP, (WPARAM)(nuint)hSubMenu.Value, 0); + if (hr.ThrowIfFailedOnDebug().Failed) + return []; + + uint dwCount = unchecked((uint)PInvoke.GetMenuItemCount(hSubMenu)); + if (dwCount is unchecked((uint)-1)) + return []; + + // Enumerates and populates the list + List shellNewItems = []; + for (uint dwIndex = 0; dwIndex < dwCount; dwIndex++) + { + MENUITEMINFOW mii = default; + mii.cbSize = (uint)sizeof(MENUITEMINFOW); + mii.fMask = MENU_ITEM_MASK.MIIM_STRING | MENU_ITEM_MASK.MIIM_ID | MENU_ITEM_MASK.MIIM_STATE; + mii.dwTypeData = (char*)NativeMemory.Alloc(256U); + mii.cch = 256; + + if (PInvoke.GetMenuItemInfo(hSubMenu, dwIndex, true, &mii)) + { + shellNewItems.Add(new() + { + Id = mii.wID, + Name = mii.dwTypeData.ToString(), + Type = (ContextMenuType)mii.fState, + }); + } + + NativeMemory.Free(mii.dwTypeData); + } + + return shellNewItems; + } + + public static bool InvokeShellNewItem(this IWindowsFolder @this, ContextMenuItem item) + { + HRESULT hr = default; + + if (@this.ShellNewMenu is null) + { + IContextMenu* pNewMenu = default; + + hr = PInvoke.CoCreateInstance(CLSID.CLSID_NewMenu, null, CLSCTX.CLSCTX_INPROC_SERVER, IID.IID_IContextMenu, (void**)&pNewMenu); + if (hr.ThrowIfFailedOnDebug().Failed) + return false; + + @this.ShellNewMenu = pNewMenu; + } + + CMINVOKECOMMANDINFO cmici = default; + cmici.cbSize = (uint)sizeof(CMINVOKECOMMANDINFO); + cmici.lpVerb = (PCSTR)(byte*)item.Id; + cmici.nShow = (int)SHOW_WINDOW_CMD.SW_SHOWNORMAL; + + hr = @this.ShellNewMenu->InvokeCommand(&cmici); + if (hr.ThrowIfFailedOnDebug().Failed) + return false; + + return false; + } } } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs index 151cad3fbf3c..d3ad8823351a 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs @@ -84,5 +84,12 @@ public static bool TryShowFormatDriveDialog(HWND hWnd, uint driveLetterIndex, SH var result = PInvoke.SHFormatDrive(hWnd, driveLetterIndex, id, options); return result is 0xFFFF; } + + public static bool TryRenameVolumeLabel(string path, string newLabel) + { + // TODO: Use shell32.dll!CMountPointRename (CLSID: 60173D16-A550-47f0-A14B-C6F9E4DA0831, IID: 92F8D886-AB61-4113-BD4F-2E894397386F) + + return false; + } } } diff --git a/src/Files.App/Helpers/Win32/Win32Helper.Process.cs b/src/Files.App/Helpers/Win32/Win32Helper.Process.cs index 1f73eeb9d795..d026f882be1d 100644 --- a/src/Files.App/Helpers/Win32/Win32Helper.Process.cs +++ b/src/Files.App/Helpers/Win32/Win32Helper.Process.cs @@ -12,33 +12,6 @@ namespace Files.App.Helpers /// public static partial class Win32Helper { - private static bool? isRunningOnArm = null; - public static bool IsRunningOnArm - { - get - { - // https://stackoverflow.com/questions/54456140/how-to-detect-were-running-under-the-arm64-version-of-windows-10-in-net - // https://learn.microsoft.com/windows/win32/sysinfo/image-file-machine-constants - if (isRunningOnArm is null) - { - isRunningOnArm = IsArmProcessor(); - App.Logger.LogInformation("Running on ARM: {0}", isRunningOnArm); - } - - return isRunningOnArm ?? false; - } - } - - private static bool? isHasThreadAccessPropertyPresent = null; - public static bool IsHasThreadAccessPropertyPresent - { - get - { - isHasThreadAccessPropertyPresent ??= ApiInformation.IsPropertyPresent(typeof(DispatcherQueue).FullName, "HasThreadAccess"); - return isHasThreadAccessPropertyPresent ?? false; - } - } - public static async Task InvokeWin32ComponentAsync(string applicationPath, IShellPage associatedInstance, string arguments = null, bool runAsAdmin = false, string workingDirectory = null) { return await InvokeWin32ComponentsAsync(applicationPath.CreateEnumerable(), associatedInstance, arguments, runAsAdmin, workingDirectory); @@ -158,19 +131,6 @@ public static List WhoIsLocking(string[] resources) return processes; } - private static bool IsArmProcessor() - { - var handle = Process.GetCurrentProcess().Handle; - if (!Win32PInvoke.IsWow64Process2(handle, out _, out var nativeMachine)) - return false; - - return - nativeMachine == 0xaa64 || - nativeMachine == 0x01c0 || - nativeMachine == 0x01c2 || - nativeMachine == 0x01c4; - } - public static Task GetFileAssociationAsync(string filePath) { return GetFileAssociationAsync(filePath, true); diff --git a/src/Files.App/ViewModels/ShellViewModel.cs b/src/Files.App/ViewModels/ShellViewModel.cs index b3f08c0c3729..06b5b3c5c9c4 100644 --- a/src/Files.App/ViewModels/ShellViewModel.cs +++ b/src/Files.App/ViewModels/ShellViewModel.cs @@ -761,7 +761,7 @@ void ClearDisplay() DirectoryInfoUpdated?.Invoke(this, EventArgs.Empty); } - if (Win32Helper.IsHasThreadAccessPropertyPresent && dispatcherQueue.HasThreadAccess) + if (dispatcherQueue.HasThreadAccess) ClearDisplay(); else await dispatcherQueue.EnqueueOrInvokeAsync(ClearDisplay); @@ -849,7 +849,7 @@ void OrderEntries() folderSettings.SortDirectoriesAlongsideFiles, folderSettings.SortFilesFirst)); } - if (Win32Helper.IsHasThreadAccessPropertyPresent && dispatcherQueue.HasThreadAccess) + if (dispatcherQueue.HasThreadAccess) return Task.Run(OrderEntries); OrderEntries(); diff --git a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs index 2739fb84162a..fc447eedbe95 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs @@ -198,7 +198,7 @@ public override async Task ExecutePinToSidebarCommand(WidgetCardItem? item) unsafe { - hr = PInvoke.RoGetAgileReference(AgileReferenceOptions.AGILEREFERENCE_DEFAULT, IID.IID_IShellItem, (IUnknown*)folderCardItem.Item.ThisPtr.Get(), pAgileReference.GetAddressOf()); + hr = PInvoke.RoGetAgileReference(AgileReferenceOptions.AGILEREFERENCE_DEFAULT, IID.IID_IShellItem, (IUnknown*)folderCardItem.Item.ThisPtr, pAgileReference.GetAddressOf()); } // Pin to Quick Access on Windows @@ -206,9 +206,9 @@ public override async Task ExecutePinToSidebarCommand(WidgetCardItem? item) { unsafe { - using ComPtr pShellItem = default; - hr = pAgileReference.Get()->Resolve(IID.IID_IShellItem, (void**)pShellItem.GetAddressOf()); - var windowsFile = new WindowsFile(pShellItem); + IShellItem* pShellItem = null; + hr = pAgileReference.Get()->Resolve(IID.IID_IShellItem, (void**)&pShellItem); + using var windowsFile = new WindowsFile(pShellItem); // NOTE: "pintohome" is an undocumented verb, which calls an undocumented COM class, windows.storage.dll!CPinToFrequentExecute : public IExecuteCommand, ... return windowsFile.TryInvokeContextMenuVerb("pintohome"); @@ -234,7 +234,7 @@ public override async Task ExecuteUnpinFromSidebarCommand(WidgetCardItem? item) unsafe { - hr = PInvoke.RoGetAgileReference(AgileReferenceOptions.AGILEREFERENCE_DEFAULT, IID.IID_IShellItem, (IUnknown*)folderCardItem.Item.ThisPtr.Get(), pAgileReference.GetAddressOf()); + hr = PInvoke.RoGetAgileReference(AgileReferenceOptions.AGILEREFERENCE_DEFAULT, IID.IID_IShellItem, (IUnknown*)folderCardItem.Item.ThisPtr, pAgileReference.GetAddressOf()); } // Unpin from Quick Access on Windows @@ -242,9 +242,9 @@ public override async Task ExecuteUnpinFromSidebarCommand(WidgetCardItem? item) { unsafe { - using ComPtr pShellItem = default; - hr = pAgileReference.Get()->Resolve(IID.IID_IShellItem, (void**)pShellItem.GetAddressOf()); - var windowsFile = new WindowsFile(pShellItem); + IShellItem* pShellItem = null; + hr = pAgileReference.Get()->Resolve(IID.IID_IShellItem, (void**)&pShellItem); + using var windowsFile = new WindowsFile(pShellItem); // NOTE: "unpinfromhome" is an undocumented verb, which calls an undocumented COM class, windows.storage.dll!CRemoveFromFrequentPlacesExecute : public IExecuteCommand, ... // NOTE: "remove" is for some shell folders where the "unpinfromhome" may not work From d7e0e9d3cfc6e0199bf980ba48f39ed581e3e58d Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Mon, 21 Jul 2025 12:13:08 +0900 Subject: [PATCH 056/107] Code Quality: Improved Axe assertion message (#17283) --- .../Helper/AxeHelper.cs | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/tests/Files.InteractionTests/Helper/AxeHelper.cs b/tests/Files.InteractionTests/Helper/AxeHelper.cs index e65ccadbb385..39036c6ffdc0 100644 --- a/tests/Files.InteractionTests/Helper/AxeHelper.cs +++ b/tests/Files.InteractionTests/Helper/AxeHelper.cs @@ -3,8 +3,10 @@ using Axe.Windows.Automation; using Axe.Windows.Core.Enums; +using System; using System.Diagnostics; using System.Linq; +using System.Text; namespace Files.InteractionTests.Helper { @@ -25,11 +27,37 @@ internal static void InitializeAxe() public static void AssertNoAccessibilityErrors() { var testResult = AccessibilityScanner.Scan(null).WindowScanOutputs.SelectMany(output => output.Errors).Where(error => error.Rule.ID != RuleId.BoundingRectangleNotNull); - if (testResult.Count() != 0) + if (testResult.Any()) { - var mappedResult = testResult.Select(result => "Element " + result.Element.Properties["ControlType"] + " violated rule '" + result.Rule.Description + "'."); - Assert.Fail("Failed with the following accessibility errors \r\n" + string.Join("\r\n", mappedResult)); + StringBuilder sb = new(); + sb.AppendLine(); + sb.AppendLine("============================================================"); + sb.AppendJoin(Environment.NewLine, testResult.Select(BuildAssertMessage)); + sb.AppendLine(); + sb.AppendLine("============================================================"); + + Assert.Fail(sb.ToString()); + } + } + + private static string BuildAssertMessage(ScanResult result) + { + // e.g., "Element Button(50000) violated rule 'The Name property of a focusable element must not be null.'." + return $"Element {result.Element.Properties["ControlType"]} at ({ParseBoundingRectangle(result.Element.Properties["BoundingRectangle"])}) violated rule \"{result.Rule.Description}\"."; + } + + private static string ParseBoundingRectangle(string boundingRectangle) + { + // e.g., "[l=1617,t=120,r=1663,b=152]" to "x=1617,y=120,w=46,h=32" + var output = new ushort[4]; + var parts = boundingRectangle.Trim('[').Trim(']').Split(','); + for (int index = 0; index < 4; index++) + { + if (ushort.TryParse(parts[index][2..], out var res)) + output[index] = res; } + + return $"x={output[0]},y={output[1]},w={output[2] - output[0]},h={output[3] - output[1]}"; } } } \ No newline at end of file From 6b3b11270076cd38998029298db463fc5033acca Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Mon, 21 Jul 2025 12:02:58 -0400 Subject: [PATCH 057/107] Code Quality: Removed old address bar code (#17286) --- .../PreviewPopup/LaunchPreviewPopupAction.cs | 1 - .../Content/Selection/ClearSelectionAction.cs | 4 +- .../Selection/InvertSelectionAction.cs | 5 +- .../Content/Selection/SelectAllAction.cs | 4 +- .../Actions/Global/EditPathAction.cs | 7 +- src/Files.App/Actions/Global/SearchAction.cs | 15 - .../ContentPage/ContentPageContext.cs | 3 - .../ContentPage/IContentPageContext.cs | 2 - .../Multitasking/MultitaskingContext.cs | 5 - .../Contracts/IAddressToolbarViewModel.cs | 12 - .../Data/Contracts/IGeneralSettingsService.cs | 5 - .../Data/Contracts/ISearchBoxViewModel.cs | 26 -- .../AddressBarTextEnteredEventArgs.cs | 14 - .../ToolbarFlyoutOpeningEventArgs.cs | 17 - .../ToolbarPathItemLoadedEventArgs.cs | 16 - .../PathBreadcrumbItemSelector.cs | 35 -- .../Settings/GeneralSettingsService.cs | 6 - src/Files.App/Strings/en-US/Resources.resw | 3 - .../UserControls/NavigationToolbar.xaml | 149 +------ .../UserControls/NavigationToolbar.xaml.cs | 95 ----- .../UserControls/PathBreadcrumb.xaml | 173 -------- .../UserControls/PathBreadcrumb.xaml.cs | 74 ---- src/Files.App/UserControls/SearchBox.xaml | 110 ----- src/Files.App/UserControls/SearchBox.xaml.cs | 37 -- .../ViewModels/Settings/AdvancedViewModel.cs | 15 - .../NavigationToolbarViewModel.cs | 393 +----------------- .../UserControls/SearchBoxViewModel.cs | 140 ------- .../Views/Layouts/ColumnLayoutPage.xaml.cs | 9 +- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 5 +- .../Views/Layouts/GridLayoutPage.xaml.cs | 3 +- src/Files.App/Views/MainPage.xaml | 17 - src/Files.App/Views/MainPage.xaml.cs | 2 +- .../Views/Settings/AdvancedPage.xaml | 8 - src/Files.App/Views/Shells/BaseShellPage.cs | 74 ---- .../Views/Shells/ColumnShellPage.xaml | 8 - .../Views/Shells/ColumnShellPage.xaml.cs | 31 +- .../Views/Shells/ModernShellPage.xaml | 8 - .../Views/Shells/ModernShellPage.xaml.cs | 28 +- 38 files changed, 19 insertions(+), 1540 deletions(-) delete mode 100644 src/Files.App/Data/Contracts/ISearchBoxViewModel.cs delete mode 100644 src/Files.App/Data/EventArguments/AddressBarTextEnteredEventArgs.cs delete mode 100644 src/Files.App/Data/EventArguments/ToolbarFlyoutOpeningEventArgs.cs delete mode 100644 src/Files.App/Data/EventArguments/ToolbarPathItemLoadedEventArgs.cs delete mode 100644 src/Files.App/Data/TemplateSelectors/PathBreadcrumbItemSelector.cs delete mode 100644 src/Files.App/UserControls/PathBreadcrumb.xaml delete mode 100644 src/Files.App/UserControls/PathBreadcrumb.xaml.cs delete mode 100644 src/Files.App/UserControls/SearchBox.xaml delete mode 100644 src/Files.App/UserControls/SearchBox.xaml.cs delete mode 100644 src/Files.App/ViewModels/UserControls/SearchBoxViewModel.cs diff --git a/src/Files.App/Actions/Content/PreviewPopup/LaunchPreviewPopupAction.cs b/src/Files.App/Actions/Content/PreviewPopup/LaunchPreviewPopupAction.cs index fbf3b3407874..ece2f77c629f 100644 --- a/src/Files.App/Actions/Content/PreviewPopup/LaunchPreviewPopupAction.cs +++ b/src/Files.App/Actions/Content/PreviewPopup/LaunchPreviewPopupAction.cs @@ -20,7 +20,6 @@ public HotKey HotKey public bool IsExecutable => context.SelectedItems.Count == 1 && - (!context.ShellPage?.ToolbarViewModel?.IsEditModeEnabled ?? false) && (!context.ShellPage?.SlimContentPage?.IsRenamingItem ?? false); public LaunchPreviewPopupAction() diff --git a/src/Files.App/Actions/Content/Selection/ClearSelectionAction.cs b/src/Files.App/Actions/Content/Selection/ClearSelectionAction.cs index a7e44beb059c..30ad883f98f2 100644 --- a/src/Files.App/Actions/Content/Selection/ClearSelectionAction.cs +++ b/src/Files.App/Actions/Content/Selection/ClearSelectionAction.cs @@ -30,11 +30,9 @@ public bool IsExecutable if (page is null) return false; - bool isCommandPaletteOpen = page.ToolbarViewModel.IsCommandPaletteOpen; - bool isEditing = page.ToolbarViewModel.IsEditModeEnabled; bool isRenaming = page.SlimContentPage.IsRenamingItem; - return isCommandPaletteOpen || (!isEditing && !isRenaming); + return !isRenaming; } } diff --git a/src/Files.App/Actions/Content/Selection/InvertSelectionAction.cs b/src/Files.App/Actions/Content/Selection/InvertSelectionAction.cs index 8054e9d0450e..d3bd0c95bfd2 100644 --- a/src/Files.App/Actions/Content/Selection/InvertSelectionAction.cs +++ b/src/Files.App/Actions/Content/Selection/InvertSelectionAction.cs @@ -30,11 +30,8 @@ public bool IsExecutable if (page is null) return false; - bool isCommandPaletteOpen = page.ToolbarViewModel.IsCommandPaletteOpen; - bool isEditing = page.ToolbarViewModel.IsEditModeEnabled; bool isRenaming = page.SlimContentPage.IsRenamingItem; - - return isCommandPaletteOpen || (!isEditing && !isRenaming); + return !isRenaming; } } diff --git a/src/Files.App/Actions/Content/Selection/SelectAllAction.cs b/src/Files.App/Actions/Content/Selection/SelectAllAction.cs index 5f3aae630853..0dac1beab3ad 100644 --- a/src/Files.App/Actions/Content/Selection/SelectAllAction.cs +++ b/src/Files.App/Actions/Content/Selection/SelectAllAction.cs @@ -35,11 +35,9 @@ public bool IsExecutable if (itemCount == selectedItemCount) return false; - bool isCommandPaletteOpen = page.ToolbarViewModel.IsCommandPaletteOpen; - bool isEditing = page.ToolbarViewModel.IsEditModeEnabled; bool isRenaming = page.SlimContentPage?.IsRenamingItem ?? false; - return isCommandPaletteOpen || (!isEditing && !isRenaming); + return !isRenaming; } } diff --git a/src/Files.App/Actions/Global/EditPathAction.cs b/src/Files.App/Actions/Global/EditPathAction.cs index f9ca51490d5e..302c9d0f9b30 100644 --- a/src/Files.App/Actions/Global/EditPathAction.cs +++ b/src/Files.App/Actions/Global/EditPathAction.cs @@ -31,12 +31,7 @@ public EditPathAction() public Task ExecuteAsync(object? parameter = null) { if (context.ShellPage is not null) - { - if (GeneralSettingsService.EnableOmnibarDesign) - context.ShellPage!.ToolbarViewModel.SwitchToPathMode(); - else - context.ShellPage.ToolbarViewModel.IsEditModeEnabled = true; - } + context.ShellPage!.ToolbarViewModel.SwitchToPathMode(); return Task.CompletedTask; } diff --git a/src/Files.App/Actions/Global/SearchAction.cs b/src/Files.App/Actions/Global/SearchAction.cs index 6e4b63a3cdcc..446a301695a4 100644 --- a/src/Files.App/Actions/Global/SearchAction.cs +++ b/src/Files.App/Actions/Global/SearchAction.cs @@ -22,14 +22,9 @@ public HotKey SecondHotKey public RichGlyph Glyph => new(themedIconStyle: "App.ThemedIcons.Omnibar.Search"); - public bool IsExecutable - => !context.IsSearchBoxVisible; - public SearchAction() { context = Ioc.Default.GetRequiredService(); - - context.PropertyChanged += Context_PropertyChanged; } public Task ExecuteAsync(object? parameter = null) @@ -38,15 +33,5 @@ public Task ExecuteAsync(object? parameter = null) return Task.CompletedTask; } - - private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e) - { - switch (e.PropertyName) - { - case nameof(IContentPageContext.IsSearchBoxVisible): - OnPropertyChanged(nameof(IsExecutable)); - break; - } - } } } diff --git a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs index d51bb9cd8058..da3cf6dc0b81 100644 --- a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs +++ b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs @@ -39,8 +39,6 @@ internal sealed partial class ContentPageContext : ObservableObject, IContentPag public bool CanNavigateToParent => ShellPage is not null && ShellPage.ToolbarViewModel.CanNavigateToParent; - public bool IsSearchBoxVisible => ShellPage is not null && ShellPage.ToolbarViewModel.IsSearchBoxVisible; - public bool CanCreateItem => GetCanCreateItem(); public bool IsMultiPaneAvailable => ShellPage is not null && ShellPage.PaneHolder is not null && ShellPage.PaneHolder.IsMultiPaneAvailable; @@ -167,7 +165,6 @@ private void ToolbarViewModel_PropertyChanged(object? sender, PropertyChangedEve case nameof(NavigationToolbarViewModel.CanNavigateToParent): case nameof(NavigationToolbarViewModel.HasItem): case nameof(NavigationToolbarViewModel.CanRefresh): - case nameof(NavigationToolbarViewModel.IsSearchBoxVisible): OnPropertyChanged(e.PropertyName); break; case nameof(NavigationToolbarViewModel.SelectedItems): diff --git a/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs b/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs index f4a4a5c8a9aa..7a278b3a86b9 100644 --- a/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs +++ b/src/Files.App/Data/Contexts/ContentPage/IContentPageContext.cs @@ -23,8 +23,6 @@ public interface IContentPageContext : INotifyPropertyChanged bool CanGoForward { get; } bool CanNavigateToParent { get; } - bool IsSearchBoxVisible { get; } - bool CanCreateItem { get; } bool IsMultiPaneAvailable { get; } diff --git a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs index be9e55cde60c..8219ded4f7ef 100644 --- a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs +++ b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs @@ -10,8 +10,6 @@ namespace Files.App.Data.Contexts { internal sealed partial class MultitaskingContext : ObservableObject, IMultitaskingContext { - private readonly MainPageViewModel MainPageViewModel = Ioc.Default.GetRequiredService(); - private bool isPopupOpen = false; private ITabBar? control; @@ -72,9 +70,6 @@ private void FocusManager_GotFocus(object? sender, FocusManagerGotFocusEventArgs { int newSelectedIndex = MainPageViewModel.AppInstances.IndexOf(tabItem); UpdateSelectedTabIndex(newSelectedIndex); - - // Focus the content of the selected tab item (needed for pointer navigation) - (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } } diff --git a/src/Files.App/Data/Contracts/IAddressToolbarViewModel.cs b/src/Files.App/Data/Contracts/IAddressToolbarViewModel.cs index 42a5f0b7637c..f3345d435dc5 100644 --- a/src/Files.App/Data/Contracts/IAddressToolbarViewModel.cs +++ b/src/Files.App/Data/Contracts/IAddressToolbarViewModel.cs @@ -5,15 +5,6 @@ namespace Files.App.Data.Contracts { public interface IAddressToolbarViewModel { - public bool IsSearchBoxVisible { get; set; } - - public bool IsEditModeEnabled { get; set; } - - /// - /// Gets or sets the value that indicates whether the command palette is open. - /// - public bool IsCommandPaletteOpen { get; set; } - public bool CanRefresh { get; set; } public bool CanCopyPathInPage { get; set; } @@ -36,14 +27,11 @@ public interface IAddressToolbarViewModel public event ToolbarQuerySubmittedEventHandler PathBoxQuerySubmitted; - public event EventHandler EditModeEnabled; public event ItemDraggedOverPathItemEventHandler ItemDraggedOverPathItem; public event EventHandler RefreshWidgetsRequested; public void SwitchToSearchMode(); - - public ISearchBoxViewModel SearchBox { get; } } } diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index 7b12ba1bbd0e..e473508791fe 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -304,10 +304,5 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// Gets or sets a value whether the filter header should be displayed. /// bool ShowFilterHeader { get; set; } - - /// - /// Gets or sets a value indicating whether or not to enable the Omnibar. - /// - bool EnableOmnibarDesign { get; set; } } } diff --git a/src/Files.App/Data/Contracts/ISearchBoxViewModel.cs b/src/Files.App/Data/Contracts/ISearchBoxViewModel.cs deleted file mode 100644 index b04cc5ff18b0..000000000000 --- a/src/Files.App/Data/Contracts/ISearchBoxViewModel.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Windows.Foundation; - -namespace Files.App.Data.Contracts -{ - public interface ISearchBoxViewModel - { - event TypedEventHandler TextChanged; - - event TypedEventHandler QuerySubmitted; - - event EventHandler Escaped; - - bool WasQuerySubmitted { get; set; } - - string Query { get; set; } - - void ClearSuggestions(); - - void SetSuggestions(IEnumerable suggestions); - - void AddRecentQueries(); - } -} diff --git a/src/Files.App/Data/EventArguments/AddressBarTextEnteredEventArgs.cs b/src/Files.App/Data/EventArguments/AddressBarTextEnteredEventArgs.cs deleted file mode 100644 index eb0f07fbd446..000000000000 --- a/src/Files.App/Data/EventArguments/AddressBarTextEnteredEventArgs.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Files.App.Views; -using Microsoft.UI.Xaml.Controls; -using Windows.ApplicationModel.DataTransfer; - -namespace Files.App.Data.EventArguments -{ - public sealed class AddressBarTextEnteredEventArgs - { - public AutoSuggestBox AddressBarTextField { get; set; } - } -} diff --git a/src/Files.App/Data/EventArguments/ToolbarFlyoutOpeningEventArgs.cs b/src/Files.App/Data/EventArguments/ToolbarFlyoutOpeningEventArgs.cs deleted file mode 100644 index 7e3d0f32ccd4..000000000000 --- a/src/Files.App/Data/EventArguments/ToolbarFlyoutOpeningEventArgs.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Microsoft.UI.Xaml.Controls; - -namespace Files.App.Data.EventArguments -{ - public sealed class ToolbarFlyoutOpeningEventArgs - { - public MenuFlyout OpeningFlyout { get; } - - public ToolbarFlyoutOpeningEventArgs(MenuFlyout openingFlyout) - { - OpeningFlyout = openingFlyout; - } - } -} diff --git a/src/Files.App/Data/EventArguments/ToolbarPathItemLoadedEventArgs.cs b/src/Files.App/Data/EventArguments/ToolbarPathItemLoadedEventArgs.cs deleted file mode 100644 index 2d359dcbaead..000000000000 --- a/src/Files.App/Data/EventArguments/ToolbarPathItemLoadedEventArgs.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Files.App.Views; -using Microsoft.UI.Xaml.Controls; -using Windows.ApplicationModel.DataTransfer; - -namespace Files.App.Data.EventArguments -{ - public sealed class ToolbarPathItemLoadedEventArgs - { - public MenuFlyout OpenedFlyout { get; set; } - - public PathBoxItem Item { get; set; } - } -} diff --git a/src/Files.App/Data/TemplateSelectors/PathBreadcrumbItemSelector.cs b/src/Files.App/Data/TemplateSelectors/PathBreadcrumbItemSelector.cs deleted file mode 100644 index a63112ba2723..000000000000 --- a/src/Files.App/Data/TemplateSelectors/PathBreadcrumbItemSelector.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; - -namespace Files.App.Data.TemplateSelectors -{ - /// - /// Provides template selector for Path Breadcrumb template items. - /// - internal sealed partial class PathBreadcrumbItemSelector : DataTemplateSelector - { - public DataTemplate? ParentItems { get; set; } - - public DataTemplate? CurrentItem { get; set; } - - protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) - { - var itemsControl = ItemsControl.ItemsControlFromItemContainer(container); - - if (itemsControl.ItemsSource is ObservableCollection items) - { - return - itemsControl.IndexFromContainer(container) == items.Count - 1 - ? CurrentItem! - : ParentItems!; - } - else - { - throw new ArgumentException($"Type of {nameof(itemsControl.ItemsSource)} doesn't match ObservableCollection<{nameof(PathBoxItem)}>"); - } - } - } -} diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index 889ac71779bb..addc268ce18a 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -375,12 +375,6 @@ public bool ShowFilterHeader set => Set(value); } - public bool EnableOmnibarDesign - { - get => Get(true); - set => Set(value); - } - protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e) { base.RaiseOnSettingChangedEvent(sender, e); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index d1eb58490662..42ceb993838a 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index bb76747dc890..23a2969abf7b 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -221,126 +221,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 7e5a335082e7..1d9228f75b0e 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -37,9 +37,6 @@ public sealed partial class NavigationToolbar : UserControl [GeneratedDependencyProperty] public partial bool ShowSettingsButton { get; set; } - [GeneratedDependencyProperty] - public partial bool ShowSearchBox { get; set; } - [GeneratedDependencyProperty] public partial NavigationToolbarViewModel ViewModel { get; set; } @@ -59,87 +56,6 @@ private void NavToolbar_Loading(FrameworkElement _, object e) OngoingTasksViewModel.NewItemAdded += OngoingTasksActions_ProgressBannerPosted; } - [Obsolete("Superseded by Omnibar.")] - private void VisiblePath_Loaded(object _, RoutedEventArgs e) - { - // AutoSuggestBox won't receive focus unless it's fully loaded - VisiblePath.Focus(FocusState.Programmatic); - - if (DependencyObjectHelpers.FindChild(VisiblePath) is TextBox textBox) - { - if (textBox.Text.StartsWith(">")) - textBox.Select(1, textBox.Text.Length - 1); - else - textBox.SelectAll(); - } - } - - [Obsolete("Superseded by Omnibar.")] - private void ManualPathEntryItem_Click(object _, PointerRoutedEventArgs e) - { - if (e.Pointer.PointerDeviceType is PointerDeviceType.Mouse) - { - var ptrPt = e.GetCurrentPoint(NavToolbar); - if (ptrPt.Properties.IsMiddleButtonPressed) - return; - } - ViewModel.IsEditModeEnabled = true; - } - - [Obsolete("Superseded by Omnibar.")] - private async void VisiblePath_KeyDown(object _, KeyRoutedEventArgs e) - { - if (e.Key is VirtualKey.Escape) - ViewModel.IsEditModeEnabled = false; - - if (e.Key is VirtualKey.Tab) - { - ViewModel.IsEditModeEnabled = false; - // Delay to ensure clickable path is ready to be focused - await Task.Delay(10); - ClickablePath.Focus(FocusState.Keyboard); - } - } - [Obsolete("Superseded by Omnibar.")] - private void VisiblePath_LostFocus(object _, RoutedEventArgs e) - { - if (App.AppModel.IsMainWindowClosed) - return; - - var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(MainWindow.Instance.Content.XamlRoot); - if (element is FlyoutBase or AppBarButton or Popup) - return; - - if (element is not Control control) - { - if (ViewModel.IsEditModeEnabled) - ViewModel.IsEditModeEnabled = false; - return; - } - - if (control.FocusState is not FocusState.Programmatic and not FocusState.Keyboard) - ViewModel.IsEditModeEnabled = false; - else if (ViewModel.IsEditModeEnabled) - VisiblePath.Focus(FocusState.Programmatic); - } - - [Obsolete("Superseded by Omnibar.")] - private void SearchRegion_OnGotFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_GotFocus(sender, e); - [Obsolete("Superseded by Omnibar.")] - private void SearchRegion_LostFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_LostFocus(sender, e); - [Obsolete("Superseded by Omnibar.")] - private void SearchRegion_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args) - { - // Suppress access key invocation if any dialog is open - if (VisualTreeHelper.GetOpenPopupsForXamlRoot(MainWindow.Instance.Content.XamlRoot).Any()) - args.Handled = true; - else - sender.Focus(FocusState.Keyboard); - } - [Obsolete("Superseded by Omnibar.")] - private void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) - => ViewModel.VisiblePath_QuerySubmitted(sender, args); - private void OngoingTasksActions_ProgressBannerPosted(object? _, StatusCenterItem e) { if (OngoingTasksViewModel is not null) @@ -254,17 +170,6 @@ void HistoryItemClicked(ToolbarHistoryItemModel? itemModel) } } - [Obsolete("Superseded by Omnibar.")] - private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs args) - { - if (args.InputDevice != FocusInputDeviceKind.Keyboard) - return; - - var previousControl = args.OldFocusedElement as FrameworkElement; - if (previousControl?.Name == nameof(Refresh)) - ViewModel.IsEditModeEnabled = true; - } - private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedEventArgs args) { var mode = Omnibar.CurrentSelectedMode; diff --git a/src/Files.App/UserControls/PathBreadcrumb.xaml b/src/Files.App/UserControls/PathBreadcrumb.xaml deleted file mode 100644 index 9913d9ea4c5d..000000000000 --- a/src/Files.App/UserControls/PathBreadcrumb.xaml +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Files.App/UserControls/PathBreadcrumb.xaml.cs b/src/Files.App/UserControls/PathBreadcrumb.xaml.cs deleted file mode 100644 index 66726ee9e82b..000000000000 --- a/src/Files.App/UserControls/PathBreadcrumb.xaml.cs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using CommunityToolkit.WinUI; -using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Input; - -namespace Files.App.UserControls -{ - public sealed partial class PathBreadcrumb : UserControl - { - [GeneratedDependencyProperty] - public partial NavigationToolbarViewModel ViewModel { get; set; } - - public PathBreadcrumb() - { - InitializeComponent(); - } - - private void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) - { - ViewModel.PathItemSeparator_DataContextChanged(sender, args); - } - - private void PathBoxItemFlyout_Opening(object sender, object e) - { - ViewModel.PathboxItemFlyout_Opening(sender, e); - } - - private void PathBoxItemFlyout_Closed(object sender, object e) - { - ViewModel.PathBoxItemFlyout_Closed(sender, e) ; - } - - private void PathBoxItem_DragLeave(object sender, DragEventArgs e) - { - ViewModel.PathBoxItem_DragLeave(sender, e); - } - - private async void PathBoxItem_DragOver(object sender, DragEventArgs e) - { - await ViewModel.PathBoxItem_DragOver(sender, e); - } - - private async void PathBoxItem_Drop(object sender, DragEventArgs e) - { - await ViewModel.PathBoxItem_Drop(sender, e); - } - - private async void PathBoxItem_Tapped(object sender, TappedRoutedEventArgs e) - { - if (sender is not TextBlock textBlock || - textBlock.DataContext is not PathBoxItem item || - item.Path is not { } path) - return; - - // TODO: Implement middle click retrieving. - await ViewModel.HandleFolderNavigationAsync(path); - - e.Handled = true; - } - - private void PathBoxItem_PointerPressed(object sender, PointerRoutedEventArgs e) - { - ViewModel.PathBoxItem_PointerPressed(sender, e); - } - - private void PathBoxItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) - { - ViewModel.PathBoxItem_PreviewKeyDown(sender, e); - } - } -} diff --git a/src/Files.App/UserControls/SearchBox.xaml b/src/Files.App/UserControls/SearchBox.xaml deleted file mode 100644 index a3a9f49cc0f6..000000000000 --- a/src/Files.App/UserControls/SearchBox.xaml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Files.App/UserControls/SearchBox.xaml.cs b/src/Files.App/UserControls/SearchBox.xaml.cs deleted file mode 100644 index 43fb5c13656d..000000000000 --- a/src/Files.App/UserControls/SearchBox.xaml.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Files Community -// Licensed under the MIT License. - -using Files.App.ViewModels; -using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Input; - -namespace Files.App.UserControls -{ - [Obsolete("Superseded by Omnibar.")] - public sealed partial class SearchBox : UserControl - { - public static readonly DependencyProperty SearchBoxViewModelProperty = - DependencyProperty.Register(nameof(SearchBoxViewModel), typeof(SearchBoxViewModel), typeof(SearchBox), new PropertyMetadata(null)); - - public SearchBoxViewModel SearchBoxViewModel - { - get => (SearchBoxViewModel)GetValue(SearchBoxViewModelProperty); - set => SetValue(SearchBoxViewModelProperty, value); - } - - public SearchBox() => InitializeComponent(); - - private void SearchRegion_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs e) - => SearchBoxViewModel.SearchRegion_TextChanged(sender, e); - - private void SearchRegion_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs e) - => SearchBoxViewModel.SearchRegion_QuerySubmitted(sender, e); - - private void SearchRegion_Escaped(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs e) - => SearchBoxViewModel.SearchRegion_Escaped(sender, e); - - private void SearchRegion_KeyDown(object sender, KeyRoutedEventArgs e) - => SearchBoxViewModel.SearchRegion_KeyDown(sender, e); - } -} diff --git a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs index 948d33fc5489..e8dd09d35b09 100644 --- a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs @@ -355,21 +355,6 @@ public bool ShowFlattenOptions OnPropertyChanged(); } } - - // TODO remove when feature is marked as stable - public bool EnableOmnibarDesign - { - get => UserSettingsService.GeneralSettingsService.EnableOmnibarDesign; - set - { - if (value == UserSettingsService.GeneralSettingsService.EnableOmnibarDesign) - return; - - UserSettingsService.GeneralSettingsService.EnableOmnibarDesign = value; - OnPropertyChanged(); - } - } - public async Task OpenFilesOnWindowsStartupAsync() { var stateMode = await ReadState(); diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index bc245cee978d..e3b7b968c59f 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -33,7 +33,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private readonly IUserSettingsService UserSettingsService = Ioc.Default.GetRequiredService(); private readonly IAppearanceSettingsService AppearanceSettingsService = Ioc.Default.GetRequiredService(); - private readonly IGeneralSettingsService GeneralSettingsService = Ioc.Default.GetRequiredService(); private readonly DrivesViewModel drivesViewModel = Ioc.Default.GetRequiredService(); private readonly IUpdateService UpdateService = Ioc.Default.GetRequiredService(); private readonly ICommandManager Commands = Ioc.Default.GetRequiredService(); @@ -52,17 +51,11 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr // Events public delegate void ToolbarPathItemInvokedEventHandler(object sender, PathNavigationEventArgs e); - public delegate void ToolbarFlyoutOpeningEventHandler(object sender, ToolbarFlyoutOpeningEventArgs e); - public delegate void ToolbarPathItemLoadedEventHandler(object sender, ToolbarPathItemLoadedEventArgs e); - public delegate void AddressBarTextEnteredEventHandler(object sender, AddressBarTextEnteredEventArgs e); public delegate void PathBoxItemDroppedEventHandler(object sender, PathBoxItemDroppedEventArgs e); public event ToolbarPathItemInvokedEventHandler? ToolbarPathItemInvoked; - public event ToolbarFlyoutOpeningEventHandler? ToolbarFlyoutOpening; - public event ToolbarPathItemLoadedEventHandler? ToolbarPathItemLoaded; public event IAddressToolbarViewModel.ItemDraggedOverPathItemEventHandler? ItemDraggedOverPathItem; - public event EventHandler? EditModeEnabled; public event IAddressToolbarViewModel.ToolbarQuerySubmittedEventHandler? PathBoxQuerySubmitted; - public event AddressBarTextEnteredEventHandler? AddressBarTextEntered; + public event PathBoxItemDroppedEventHandler? PathBoxItemDropped; public event EventHandler? RefreshWidgetsRequested; @@ -82,10 +75,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr public bool IsSingleItemOverride { get; set; } - [Obsolete("Superseded by Omnibar.")] - public bool SearchHasFocus { get; private set; } - - public bool EnableOmnibarDesign => GeneralSettingsService.EnableOmnibarDesign; public bool ShowStatusCenterButton => AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.Always || (AppearanceSettingsService.StatusCenterVisibility == StatusCenterVisibility.DuringOngoingFileOperations && OngoingTasksViewModel.HasAnyItem); @@ -94,9 +83,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private NavigationToolbar? AddressToolbar => (MainWindow.Instance.Content as Frame)?.FindDescendant(); - [Obsolete("Superseded by Omnibar.")] - public SearchBoxViewModel SearchBoxViewModel => (SearchBoxViewModel)SearchBox; - public bool HasAdditionalAction => InstanceViewModel.IsPageTypeRecycleBin || Commands.RunWithPowershell.IsExecutable || @@ -157,9 +143,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr (IsCardsLayout && UserSettingsService.LayoutSettingsService.CardsViewSize == CardsViewSizeKind.ExtraLarge) || (IsGridLayout && UserSettingsService.LayoutSettingsService.GridViewSize == GridViewSizeKind.ExtraLarge); - private bool _IsCommandPaletteOpen; - public bool IsCommandPaletteOpen { get => _IsCommandPaletteOpen; set => SetProperty(ref _IsCommandPaletteOpen, value); } - private bool _IsDynamicOverflowEnabled; public bool IsDynamicOverflowEnabled { get => _IsDynamicOverflowEnabled; set => SetProperty(ref _IsDynamicOverflowEnabled, value); } @@ -187,18 +170,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private bool _CanRefresh; public bool CanRefresh { get => _CanRefresh; set => SetProperty(ref _CanRefresh, value); } - private string _SearchButtonGlyph = "\uE721"; - [Obsolete("Superseded by Omnibar.")] - public string SearchButtonGlyph { get => _SearchButtonGlyph; set => SetProperty(ref _SearchButtonGlyph, value); } - - private bool _ManualEntryBoxLoaded; - [Obsolete("Superseded by Omnibar.")] - public bool ManualEntryBoxLoaded { get => _ManualEntryBoxLoaded; set => SetProperty(ref _ManualEntryBoxLoaded, value); } - - private bool _ClickablePathLoaded = true; - [Obsolete("Superseded by Omnibar.")] - public bool ClickablePathLoaded { get => _ClickablePathLoaded; set => SetProperty(ref _ClickablePathLoaded, value); } - private string _PathControlDisplayText; [Obsolete("Superseded by Omnibar.")] public string PathControlDisplayText { get => _PathControlDisplayText; set => SetProperty(ref _PathControlDisplayText, value); } @@ -209,21 +180,6 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr private Style _LayoutThemedIcon; public Style LayoutThemedIcon { get => _LayoutThemedIcon; set => SetProperty(ref _LayoutThemedIcon, value); } - private ISearchBoxViewModel _SearchBox = new SearchBoxViewModel(); - public ISearchBoxViewModel SearchBox { get => _SearchBox; set => SetProperty(ref _SearchBox, value); } - - private bool _IsSearchBoxVisible; - [Obsolete("Superseded by Omnibar.")] - public bool IsSearchBoxVisible - { - get => _IsSearchBoxVisible; - set - { - if (SetProperty(ref _IsSearchBoxVisible, value)) - SearchButtonGlyph = value ? "\uE711" : "\uE721"; - } - } - // SetProperty doesn't seem to properly notify the binding in path bar private string? _PathText; public string? PathText @@ -236,6 +192,10 @@ public string? PathText } } + // Workaround to ensure Omnibar is only loaded after the ViewModel is initialized + public bool LoadOmnibar => + true; + private string? _OmnibarCommandPaletteModeText; public string? OmnibarCommandPaletteModeText { get => _OmnibarCommandPaletteModeText; set => SetProperty(ref _OmnibarCommandPaletteModeText, value); } @@ -262,31 +222,6 @@ public CurrentInstanceViewModel InstanceViewModel } } - [Obsolete("Superseded by Omnibar.")] - public bool IsEditModeEnabled - { - get => ManualEntryBoxLoaded; - set - { - if (value) - { - EditModeEnabled?.Invoke(this, EventArgs.Empty); - - var visiblePath = AddressToolbar?.FindDescendant(x => x.Name == "VisiblePath"); - visiblePath?.Focus(FocusState.Programmatic); - visiblePath?.FindDescendant()?.SelectAll(); - - AddressBarTextEntered?.Invoke(this, new AddressBarTextEnteredEventArgs() { AddressBarTextField = visiblePath }); - } - else - { - IsCommandPaletteOpen = false; - ManualEntryBoxLoaded = false; - ClickablePathLoaded = true; - } - } - } - private List? _SelectedItems; public List? SelectedItems { @@ -319,7 +254,6 @@ public NavigationToolbarViewModel() _dispatcherQueue = DispatcherQueue.GetForCurrentThread(); _dragOverTimer = _dispatcherQueue.CreateTimer(); - SearchBox.Escaped += SearchRegion_Escaped; UserSettingsService.OnSettingChangedEvent += UserSettingsService_OnSettingChangedEvent; UpdateService.PropertyChanged += UpdateService_OnPropertyChanged; @@ -359,15 +293,6 @@ public NavigationToolbarViewModel() break; } }; - GeneralSettingsService.PropertyChanged += (s, e) => - { - switch (e.PropertyName) - { - case nameof(GeneralSettingsService.EnableOmnibarDesign): - OnPropertyChanged(nameof(EnableOmnibarDesign)); - break; - } - }; OngoingTasksViewModel.PropertyChanged += (s, e) => { switch (e.PropertyName) @@ -546,32 +471,6 @@ x.Item is ZipStorageFile || deferral.Complete(); } - [Obsolete("Superseded by Omnibar.")] - public void PathItemSeparator_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) - { - var pathSeparatorIcon = sender as FontIcon; - if (pathSeparatorIcon is null || pathSeparatorIcon.DataContext is null) - return; - - ToolbarPathItemLoaded?.Invoke(pathSeparatorIcon, new ToolbarPathItemLoadedEventArgs() - { - Item = (PathBoxItem)pathSeparatorIcon.DataContext, - OpenedFlyout = (MenuFlyout)pathSeparatorIcon.ContextFlyout - }); - } - - [Obsolete("Superseded by Omnibar.")] - public void PathboxItemFlyout_Opening(object sender, object e) - { - ToolbarFlyoutOpening?.Invoke(this, new ToolbarFlyoutOpeningEventArgs((MenuFlyout)sender)); - } - - [Obsolete("Superseded by Omnibar.")] - public void PathBoxItemFlyout_Closed(object sender, object e) - { - ((MenuFlyout)sender).Items.Clear(); - } - [Obsolete("Superseded by Omnibar.")] public void CurrentPathSetTextBox_TextChanged(object sender, TextChangedEventArgs args) { @@ -579,31 +478,6 @@ public void CurrentPathSetTextBox_TextChanged(object sender, TextChangedEventArg PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = textBox.Text }); } - [Obsolete("Superseded by Omnibar.")] - public void VisiblePath_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) - { - if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) - AddressBarTextEntered?.Invoke(this, new AddressBarTextEnteredEventArgs() { AddressBarTextField = sender }); - } - - [Obsolete("Superseded by Omnibar.")] - public void VisiblePath_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) - { - PathBoxQuerySubmitted?.Invoke(this, new ToolbarQuerySubmittedEventArgs() { QueryText = args.QueryText }); - - (this as IAddressToolbarViewModel).IsEditModeEnabled = false; - } - - [Obsolete("Superseded by Omnibar.")] - public void PathBoxItem_PointerPressed(object sender, PointerRoutedEventArgs e) - { - if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Mouse) - return; - - var ptrPt = e.GetCurrentPoint(AddressToolbar); - _pointerRoutedEventArgs = ptrPt.Properties.IsMiddleButtonPressed ? e : null; - } - public async Task HandleFolderNavigationAsync(string path, bool openNewTab = false) { openNewTab |= _pointerRoutedEventArgs is not null; @@ -723,75 +597,14 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidItemDialogTitle.GetLoca PathControlDisplayText = ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; } - [Obsolete("Superseded by Omnibar.")] - public void PathBoxItem_PreviewKeyDown(object sender, KeyRoutedEventArgs e) - { - switch (e.Key) - { - case Windows.System.VirtualKey.Down: - { - var item = e.OriginalSource as ListViewItem; - var button = item?.FindDescendant /// /// - protected virtual void OnItemTemplatePropertyChanged(DataTemplate oldValue , DataTemplate newValue) + protected virtual void OnItemTemplatePropertyChanged(DataTemplate oldValue, DataTemplate newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - ItemTemplateChanged( newValue ); + ItemTemplateChanged(newValue); } } @@ -122,7 +122,7 @@ protected virtual void OnItemTemplatePropertyChanged(DataTemplate oldValue , Dat nameof(ItemList), typeof(ToolbarItemList), typeof(Toolbar), - new PropertyMetadata(new ToolbarItemList(), (d, e) => ((Toolbar)d).OnItemListPropertyChanged(( ToolbarItemList )e.OldValue, ( ToolbarItemList )e.NewValue))); + new PropertyMetadata(new ToolbarItemList(), (d, e) => ((Toolbar)d).OnItemListPropertyChanged((ToolbarItemList)e.OldValue, (ToolbarItemList)e.NewValue))); @@ -131,17 +131,17 @@ protected virtual void OnItemTemplatePropertyChanged(DataTemplate oldValue , Dat /// private ToolbarItemList ItemList { - get { return (ToolbarItemList)GetValue( ItemListProperty ); } - set { SetValue( ItemListProperty , value ); } + get { return (ToolbarItemList)GetValue(ItemListProperty); } + set { SetValue(ItemListProperty, value); } } - private void OnItemListPropertyChanged(ToolbarItemList oldList , ToolbarItemList newList) + private void OnItemListPropertyChanged(ToolbarItemList oldList, ToolbarItemList newList) { - if ( newList != oldList ) + if (newList != oldList) { - PrivateItemListChanged( newList ); + PrivateItemListChanged(newList); } } #endregion @@ -156,7 +156,7 @@ private void OnItemListPropertyChanged(ToolbarItemList oldList , ToolbarItemList nameof(ItemOverflowList), typeof(ToolbarItemOverflowList), typeof(Toolbar), - new PropertyMetadata(new ToolbarItemOverflowList(), (d, e) => ((Toolbar)d).OnItemOverflowListPropertyChanged(( ToolbarItemOverflowList )e.OldValue, ( ToolbarItemOverflowList )e.NewValue))); + new PropertyMetadata(new ToolbarItemOverflowList(), (d, e) => ((Toolbar)d).OnItemOverflowListPropertyChanged((ToolbarItemOverflowList)e.OldValue, (ToolbarItemOverflowList)e.NewValue))); @@ -165,17 +165,17 @@ private void OnItemListPropertyChanged(ToolbarItemList oldList , ToolbarItemList /// private ToolbarItemOverflowList ItemOverflowList { - get { return (ToolbarItemOverflowList)GetValue( ItemOverflowListProperty ); } - set { SetValue( ItemOverflowListProperty , value ); } + get { return (ToolbarItemOverflowList)GetValue(ItemOverflowListProperty); } + set { SetValue(ItemOverflowListProperty, value); } } - private void OnItemOverflowListPropertyChanged(ToolbarItemOverflowList oldList , ToolbarItemOverflowList newList) + private void OnItemOverflowListPropertyChanged(ToolbarItemOverflowList oldList, ToolbarItemOverflowList newList) { - if ( newList != oldList ) + if (newList != oldList) { - PrivateItemOverflowListChanged( newList ); + PrivateItemOverflowListChanged(newList); } } #endregion diff --git a/src/Files.App.Controls/Toolbar/Toolbar.cs b/src/Files.App.Controls/Toolbar/Toolbar.cs index 2d10d6910c18..28b0fb69db02 100644 --- a/src/Files.App.Controls/Toolbar/Toolbar.cs +++ b/src/Files.App.Controls/Toolbar/Toolbar.cs @@ -8,28 +8,28 @@ public partial class Toolbar : Control // A reference to the current available size for ToolbarItems private double _availableSize; - private ItemsRepeater? _itemsRepeater; - private ToolbarItemList? _toolbarItemsList; - private ToolbarItemOverflowList? _toolbarItemsOverflowList; + private ItemsRepeater? _itemsRepeater; + private ToolbarItemList? _toolbarItemsList; + private ToolbarItemOverflowList? _toolbarItemsOverflowList; - private ToolbarItemList _tempToolbarItemsList; - private ToolbarItemOverflowList _tempToolbarItemsOverflowList; + private ToolbarItemList _tempToolbarItemsList; + private ToolbarItemOverflowList _tempToolbarItemsOverflowList; - private double _smallMinWidth = 24; // I have set default values, but we pull from resources - private double _mediumMinWidth = 32; // if they are available. - private double _largeMinWidth = 32; - - private double _smallMinHeight = 24; - private double _mediumMinHeight = 24; - private double _largeMinHeight = 32; + private double _smallMinWidth = 24; // I have set default values, but we pull from resources + private double _mediumMinWidth = 32; // if they are available. + private double _largeMinWidth = 32; - private double _currentMinWidth; - private double _currentMinHeight; + private double _smallMinHeight = 24; + private double _mediumMinHeight = 24; + private double _largeMinHeight = 32; + + private double _currentMinWidth; + private double _currentMinHeight; public Toolbar() { - DefaultStyleKey = typeof( Toolbar ); + DefaultStyleKey = typeof(Toolbar); } protected override void OnApplyTemplate() @@ -38,17 +38,17 @@ protected override void OnApplyTemplate() UpdateMinSizesFromResources(); - if ( Items != null ) + if (Items != null) { _tempToolbarItemsList = new ToolbarItemList(); _tempToolbarItemsOverflowList = new ToolbarItemOverflowList(); - UpdateItems( Items ); + UpdateItems(Items); } - SetItemsRepeater( GetTemplateChild( ToolbarItemsRepeaterPartName ) as ItemsRepeater ); + SetItemsRepeater(GetTemplateChild(ToolbarItemsRepeaterPartName) as ItemsRepeater); - if ( GetItemsRepeater() != null ) + if (GetItemsRepeater() != null) { ItemsRepeater itemsRepeater = GetItemsRepeater(); itemsRepeater.ItemsSource = GetToolbarItemsList(); @@ -201,17 +201,17 @@ private void UpdateItems(IList newItems) /// manage the Buttons and the Menu items /// - foreach ( var item in newItems ) + foreach (var item in newItems) { - SortItemsByOverflowBehavior( item ); - Debug.Write( "-> Sorted " + item.Label + " from Items... ..." + Environment.NewLine ); + SortItemsByOverflowBehavior(item); + Debug.Write("-> Sorted " + item.Label + " from Items... ..." + Environment.NewLine); } - UpdatePrivateItemList( _tempToolbarItemsList ); - Debug.Write( " | tempItemsList " + _tempToolbarItemsList.Count.ToString() + " *" + Environment.NewLine ); + UpdatePrivateItemList(_tempToolbarItemsList); + Debug.Write(" | tempItemsList " + _tempToolbarItemsList.Count.ToString() + " *" + Environment.NewLine); - UpdatePrivateItemOverflowList( _tempToolbarItemsOverflowList ); - Debug.Write( " | tempItemsOverflowList " + _tempToolbarItemsOverflowList.Count.ToString() + " *" + Environment.NewLine ); + UpdatePrivateItemOverflowList(_tempToolbarItemsOverflowList); + Debug.Write(" | tempItemsOverflowList " + _tempToolbarItemsOverflowList.Count.ToString() + " *" + Environment.NewLine); } @@ -225,9 +225,9 @@ private void UpdateItemTemplate(DataTemplate newDataTemplate) - private void UpdateToolbarSize( ToolbarSizes newToolbarSize ) + private void UpdateToolbarSize(ToolbarSizes newToolbarSize) { - UpdateMinSizesFromResources(); + UpdateMinSizesFromResources(); } @@ -239,7 +239,7 @@ private void UpdateAvailableSize() // Do some code to check or respond to size changes for // the Toolbar's Items space (ItemsRepeaterLayout?) - SetAvailableSize( newAvailableSize ); + SetAvailableSize(newAvailableSize); /// We need to check the Item Widths and Heights /// (we know the sizes for buttons, but content will need @@ -256,43 +256,43 @@ private void UpdateAvailableSize() /// private void UpdateMinSizesFromResources() { - double smallMinWidth = (double)Application.Current.Resources[SmallMinWidthResourceKey]; - double smallMinHeight = (double)Application.Current.Resources[SmallMinHeightResourceKey]; + double smallMinWidth = (double)Application.Current.Resources[SmallMinWidthResourceKey]; + double smallMinHeight = (double)Application.Current.Resources[SmallMinHeightResourceKey]; - double mediumMinWidth = (double)Application.Current.Resources[MediumMinWidthResourceKey]; - double mediumMinHeight = (double)Application.Current.Resources[MediumMinHeightResourceKey]; + double mediumMinWidth = (double)Application.Current.Resources[MediumMinWidthResourceKey]; + double mediumMinHeight = (double)Application.Current.Resources[MediumMinHeightResourceKey]; - double largeMinWidth = (double)Application.Current.Resources[LargeMinWidthResourceKey]; - double largeMinHeight = (double)Application.Current.Resources[LargeMinHeightResourceKey]; + double largeMinWidth = (double)Application.Current.Resources[LargeMinWidthResourceKey]; + double largeMinHeight = (double)Application.Current.Resources[LargeMinHeightResourceKey]; - if ( !double.IsNaN( smallMinWidth ) || !double.IsNaN( smallMinHeight ) || - !double.IsNaN( mediumMinWidth ) || !double.IsNaN( mediumMinHeight ) || - !double.IsNaN( largeMinWidth ) || !double.IsNaN( largeMinHeight ) ) + if (!double.IsNaN(smallMinWidth) || !double.IsNaN(smallMinHeight) || + !double.IsNaN(mediumMinWidth) || !double.IsNaN(mediumMinHeight) || + !double.IsNaN(largeMinWidth) || !double.IsNaN(largeMinHeight)) { - SetSmallMinWidth( smallMinWidth ); - SetSmallMinHeight( smallMinHeight ); + SetSmallMinWidth(smallMinWidth); + SetSmallMinHeight(smallMinHeight); - SetMediumMinWidth( mediumMinWidth ); - SetMediumMinHeight( mediumMinHeight ); + SetMediumMinWidth(mediumMinWidth); + SetMediumMinHeight(mediumMinHeight); - SetLargeMinWidth( largeMinWidth ); - SetLargeMinHeight( largeMinHeight ); + SetLargeMinWidth(largeMinWidth); + SetLargeMinHeight(largeMinHeight); } - if ( ToolbarSize == ToolbarSizes.Small ) + if (ToolbarSize == ToolbarSizes.Small) { - SetCurrentMinWidth( GetSmallMinWidth() ); - SetCurrentMinHeight( GetSmallMinHeight() ); + SetCurrentMinWidth(GetSmallMinWidth()); + SetCurrentMinHeight(GetSmallMinHeight()); } - else if ( ToolbarSize == ToolbarSizes.Large ) + else if (ToolbarSize == ToolbarSizes.Large) { - SetCurrentMinWidth( GetLargeMinWidth() ); - SetCurrentMinHeight( GetLargeMinHeight() ); + SetCurrentMinWidth(GetLargeMinWidth()); + SetCurrentMinHeight(GetLargeMinHeight()); } else { - SetCurrentMinWidth( GetMediumMinWidth() ); - SetCurrentMinHeight( GetMediumMinHeight() ); + SetCurrentMinWidth(GetMediumMinWidth()); + SetCurrentMinHeight(GetMediumMinHeight()); } } @@ -304,7 +304,7 @@ private void UpdateMinSizesFromResources() /// private void UpdatePrivateItemList(ToolbarItemList newList) { - SetToolbarItemsList( newList ); + SetToolbarItemsList(newList); } @@ -315,7 +315,7 @@ private void UpdatePrivateItemList(ToolbarItemList newList) /// private void UpdatePrivateItemOverflowList(ToolbarItemOverflowList newOverflowList) { - SetToolbarItemsOverflowList( newOverflowList ); + SetToolbarItemsOverflowList(newOverflowList); } #endregion @@ -328,7 +328,7 @@ private void UpdatePrivateItemOverflowList(ToolbarItemOverflowList newOverflowLi /// private void ItemsChanged(IList newItems) { - UpdateItems( newItems ); + UpdateItems(newItems); } @@ -339,7 +339,7 @@ private void ItemsChanged(IList newItems) /// private void ItemTemplateChanged(DataTemplate newDataTemplate) { - UpdateItemTemplate( newDataTemplate ); + UpdateItemTemplate(newDataTemplate); } @@ -350,7 +350,7 @@ private void ItemTemplateChanged(DataTemplate newDataTemplate) /// private void ToolbarSizeChanged(ToolbarSizes newToolbarSize) { - UpdateToolbarSize( newToolbarSize ); + UpdateToolbarSize(newToolbarSize); } @@ -361,7 +361,7 @@ private void ToolbarSizeChanged(ToolbarSizes newToolbarSize) /// private void PrivateItemListChanged(ToolbarItemList newList) { - UpdatePrivateItemList( newList ); + UpdatePrivateItemList(newList); } @@ -372,7 +372,7 @@ private void PrivateItemListChanged(ToolbarItemList newList) /// private void PrivateItemOverflowListChanged(ToolbarItemOverflowList newOverflowList) { - UpdatePrivateItemOverflowList( newOverflowList ); + UpdatePrivateItemOverflowList(newOverflowList); } #endregion @@ -390,18 +390,18 @@ private void SortItemsByOverflowBehavior(ToolbarItem item) /// Then we pass that item through additional sorting and /// then add the relevant control to the lists. /// - if ( item != null ) + if (item != null) { - if ( item.OverflowBehavior == OverflowBehaviors.Always ) + if (item.OverflowBehavior == OverflowBehaviors.Always) { - AddItemToOverflowList( SortByItemTypeForOverflowItemList( item ) ); + AddItemToOverflowList(SortByItemTypeForOverflowItemList(item)); } else { /// Not sure if we check for space at this point, or /// When we are adding items to the Private ItemList /// - if ( item.OverflowBehavior == OverflowBehaviors.Never ) + if (item.OverflowBehavior == OverflowBehaviors.Never) { /// Not sure if we need to behave differently at /// this stage for the items, but we can do if @@ -414,7 +414,7 @@ private void SortItemsByOverflowBehavior(ToolbarItem item) //AddItemToItemList( SortByItemTypeForItemList( item ) ); } - AddItemToItemList( SortByItemTypeForItemList( item ) ); + AddItemToItemList(SortByItemTypeForItemList(item)); } } } @@ -428,11 +428,11 @@ private void SortItemsByOverflowBehavior(ToolbarItem item) /// private IToolbarItemSet SortByItemTypeForItemList(ToolbarItem item) { - switch ( item.ItemType ) + switch (item.ItemType) { case ToolbarItemTypes.Button: // Add ToolbarButton - return CreateToolbarButton( item.Label , item.ThemedIcon , GetCurrentMinWidth() , GetCurrentMinHeight() , item.IconSize ); + return CreateToolbarButton(item.Label, item.ThemedIcon, GetCurrentMinWidth(), GetCurrentMinHeight(), item.IconSize); case ToolbarItemTypes.FlyoutButton: // Add ToolbarFlyoutButton @@ -448,7 +448,7 @@ private IToolbarItemSet SortByItemTypeForItemList(ToolbarItem item) case ToolbarItemTypes.ToggleButton: // Add ToolbarToggleButton - return CreateToolbarToggleButton( item.Label , item.ThemedIcon , GetCurrentMinWidth() , GetCurrentMinHeight() , item.IconSize , item.IsChecked ); + return CreateToolbarToggleButton(item.Label, item.ThemedIcon, GetCurrentMinWidth(), GetCurrentMinHeight(), item.IconSize, item.IsChecked); case ToolbarItemTypes.Separator: // Add ToolbarToggleButton @@ -472,7 +472,7 @@ private IToolbarItemSet SortByItemTypeForItemList(ToolbarItem item) /// private IToolbarOverflowItemSet SortByItemTypeForOverflowItemList(ToolbarItem item) { - switch ( item.ItemType ) + switch (item.ItemType) { case ToolbarItemTypes.Button: // Add MenuFlyoutItemEx @@ -528,47 +528,51 @@ private void PopulateItemsSourceForItemsRepeater() ItemsRepeater itemsRepeater = GetItemsRepeater(); - foreach ( ToolbarItem item in GetToolbarItemsList() ) + foreach (ToolbarItem item in GetToolbarItemsList()) { /// We can get the AvailableSize /// - double availableSize = GetAvailableSize(); + double availableSize = GetAvailableSize(); ObservableCollection itemsSource = new ObservableCollection(); /// Then we create the ToolbarButton, ToolbarSeparator, ToolbarToggleButton etc /// for each item /// - if ( item.ItemType == ToolbarItemTypes.Button ) + if (item.ItemType == ToolbarItemTypes.Button) { //Add a ToolbarButton to the ItemsSource for the ItemsRepeaterPartName - itemsSource.Add( new ToolbarButton - { - Label = item.Label , - ThemedIcon = item.ThemedIcon , Command = item.Command , - CommandParameter = item.CommandParameter , + itemsSource.Add(new ToolbarButton + { + Label = item.Label, + ThemedIcon = item.ThemedIcon, + Command = item.Command, + CommandParameter = item.CommandParameter, IconSize = item.IconSize, - } ); - }; + }); + } + ; - if ( item.ItemType == ToolbarItemTypes.ToggleButton ) + if (item.ItemType == ToolbarItemTypes.ToggleButton) { //Add a ToolbarToggleButton to the ItemsSource for the ItemsRepeaterPartName - itemsSource.Add( new ToolbarToggleButton + itemsSource.Add(new ToolbarToggleButton { - Label = item.Label , - ThemedIcon = item.ThemedIcon , - Command = item.Command , - CommandParameter = item.CommandParameter , - IconSize = item.IconSize , - } ); - }; - - if ( item.ItemType == ToolbarItemTypes.Separator ) + Label = item.Label, + ThemedIcon = item.ThemedIcon, + Command = item.Command, + CommandParameter = item.CommandParameter, + IconSize = item.IconSize, + }); + } + ; + + if (item.ItemType == ToolbarItemTypes.Separator) { //Add a ToolbarSeparator to the ItemsSource for the ItemsRepeaterPartName //itemsSource.Add( new ToolbarSeparator ); - }; + } + ; /// etc //SetAvailableSize( availableSize - item.Width ); @@ -579,11 +583,11 @@ private void PopulateItemsSourceForItemsRepeater() itemsRepeater.ItemsSource = itemsSource; } - /// We do this for each item until there is no more space - /// available, then we check its OverflowBehavior and move - /// it if neccessary. + /// We do this for each item until there is no more space + /// available, then we check its OverflowBehavior and move + /// it if neccessary. - } + } @@ -594,17 +598,17 @@ private void PopulateItemsSourceForOverflowMenu() /// is what we need to add to the Overflow Menu /// - foreach ( ToolbarItem item in GetToolbarItemsOverflowList() ) + foreach (ToolbarItem item in GetToolbarItemsOverflowList()) { - if ( item != null ) + if (item != null) { - if ( item.ItemType != ToolbarItemTypes.Separator ) - { + if (item.ItemType != ToolbarItemTypes.Separator) + { MenuFlyoutSeparator menuFlyoutSeparator = new MenuFlyoutSeparator(); /// OverflowMenuFlyout.AddMenuItem( menuFlyoutSeparator ); } - if ( item.ItemType != ToolbarItemTypes.FlyoutButton ) + if (item.ItemType != ToolbarItemTypes.FlyoutButton) { MenuFlyoutSubItem menuFlyoutSubItem = new MenuFlyoutSubItem(); menuFlyoutSubItem.Text = item.Label; @@ -615,13 +619,13 @@ private void PopulateItemsSourceForOverflowMenu() /// We will need to make child menu items for the /// ToolbarItem's flyout items. /// - + /// OverflowMenuFlyout.AddMenuItem( menuFlyoutSubItem ); } - if ( item.ItemType != ToolbarItemTypes.Button ) + if (item.ItemType != ToolbarItemTypes.Button) { - MenuFlyoutItem menuFlyoutItem= new MenuFlyoutItem(); + MenuFlyoutItem menuFlyoutItem = new MenuFlyoutItem(); //MenuFlyoutItemEx menuFlyoutItemEx = new MenuFlyoutItemEx(); menuFlyoutItem.Text = item.Label; menuFlyoutItem.Command = item.Command; @@ -633,7 +637,7 @@ private void PopulateItemsSourceForOverflowMenu() /// OverflowMenuFlyout.AddMenuItem( menuFlyoutSeparator ); } - if ( item.ItemType != ToolbarItemTypes.ToggleButton ) + if (item.ItemType != ToolbarItemTypes.ToggleButton) { ToggleMenuFlyoutItem menuToggleItem = new ToggleMenuFlyoutItem(); //ToggleMenuFlyoutItemEx menuToggleItemEx = new ToggleMenuFlyoutItemEx(); @@ -655,15 +659,15 @@ private void PopulateItemsSourceForOverflowMenu() #region Create Elements - private ToolbarButton CreateToolbarButton(string label , Style iconStyle , double minWidth , double minHeight , double iconSize) + private ToolbarButton CreateToolbarButton(string label, Style iconStyle, double minWidth, double minHeight, double iconSize) { ToolbarButton createdButton = new ToolbarButton { - Label = label , - ThemedIcon = iconStyle , - MinWidth = minWidth , - MinHeight = minHeight , - IconSize = iconSize , + Label = label, + ThemedIcon = iconStyle, + MinWidth = minWidth, + MinHeight = minHeight, + IconSize = iconSize, }; return createdButton; @@ -671,16 +675,16 @@ private ToolbarButton CreateToolbarButton(string label , Style iconStyle , doubl - private ToolbarToggleButton CreateToolbarToggleButton(string label , Style iconStyle , double minWidth , double minHeight , double iconSize , bool isChecked) + private ToolbarToggleButton CreateToolbarToggleButton(string label, Style iconStyle, double minWidth, double minHeight, double iconSize, bool isChecked) { ToolbarToggleButton createdToggleButton = new ToolbarToggleButton { - Label = label , - ThemedIcon = iconStyle , - MinWidth = minWidth , - MinHeight = minHeight , - IconSize = iconSize , - IsChecked = isChecked , + Label = label, + ThemedIcon = iconStyle, + MinWidth = minWidth, + MinHeight = minHeight, + IconSize = iconSize, + IsChecked = isChecked, }; return createdToggleButton; @@ -705,10 +709,10 @@ private ToolbarSeparator CreateToolbarSeparator() /// private void AddItemToOverflowList(IToolbarOverflowItemSet item) { - if ( item != null && _tempToolbarItemsOverflowList != null) + if (item != null && _tempToolbarItemsOverflowList != null) { - _tempToolbarItemsOverflowList.Add( item ); - Debug.Write( "<- Added " + item.ToString() + " to OverflowList " + Environment.NewLine ); + _tempToolbarItemsOverflowList.Add(item); + Debug.Write("<- Added " + item.ToString() + " to OverflowList " + Environment.NewLine); } } @@ -720,10 +724,10 @@ private void AddItemToOverflowList(IToolbarOverflowItemSet item) /// private void AddItemToItemList(IToolbarItemSet item) { - if ( item != null && _tempToolbarItemsList != null ) + if (item != null && _tempToolbarItemsList != null) { - _tempToolbarItemsList.Add( item ); - Debug.Write( "Added " + item.ToString() + " to ItemList " + Environment.NewLine ); + _tempToolbarItemsList.Add(item); + Debug.Write("Added " + item.ToString() + " to ItemList " + Environment.NewLine); } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Constants.cs b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Constants.cs index 97119d0b8a9a..60a0a9606f76 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Constants.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Constants.cs @@ -4,34 +4,34 @@ namespace Files.App.Controls { // TemplateParts - [TemplatePart( Name = ThemedIconPartName , Type = typeof( ThemedIcon ) )] - [TemplatePart( Name = ContentPresenterPartName , Type = typeof( ContentPresenter ) )] + [TemplatePart(Name = ThemedIconPartName, Type = typeof(ThemedIcon))] + [TemplatePart(Name = ContentPresenterPartName, Type = typeof(ContentPresenter))] // VisualStates - [TemplateVisualState( Name = NormalStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = PointerOverStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = PressedStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = DisabledStateName , GroupName = CommonStatesGroupName )] + [TemplateVisualState(Name = NormalStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = PointerOverStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = PressedStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = DisabledStateName, GroupName = CommonStatesGroupName)] - [TemplateVisualState( Name = HasContentStateName , GroupName = ContentStatesGroupName )] - [TemplateVisualState( Name = HasNoContentStateName , GroupName = ContentStatesGroupName )] + [TemplateVisualState(Name = HasContentStateName, GroupName = ContentStatesGroupName)] + [TemplateVisualState(Name = HasNoContentStateName, GroupName = ContentStatesGroupName)] public partial class ToolbarButton : Button, IToolbarItemSet { // TemplatePart Names - internal const string ThemedIconPartName = "PART_ThemedIcon"; - internal const string ContentPresenterPartName = "PART_ContentPresenter"; + internal const string ThemedIconPartName = "PART_ThemedIcon"; + internal const string ContentPresenterPartName = "PART_ContentPresenter"; // VisualState Group Names - internal const string CommonStatesGroupName = "CommonStates"; - internal const string ContentStatesGroupName = "ContentStates"; + internal const string CommonStatesGroupName = "CommonStates"; + internal const string ContentStatesGroupName = "ContentStates"; // VisualState Names - internal const string NormalStateName = "Normal"; - internal const string PointerOverStateName = "PointerOver"; - internal const string PressedStateName = "Pressed"; - internal const string DisabledStateName = "Disabled"; + internal const string NormalStateName = "Normal"; + internal const string PointerOverStateName = "PointerOver"; + internal const string PressedStateName = "Pressed"; + internal const string DisabledStateName = "Disabled"; - internal const string HasContentStateName = "HasContent"; - internal const string HasNoContentStateName = "HasNoContent"; + internal const string HasContentStateName = "HasContent"; + internal const string HasNoContentStateName = "HasNoContent"; } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Properties.cs b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Properties.cs index 0022f2961ec0..676376686533 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Properties.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.Properties.cs @@ -24,17 +24,17 @@ public partial class ToolbarButton : Button, IToolbarItemSet /// public string Label { - get => (string)GetValue( LabelProperty ); - set => SetValue( LabelProperty , value ); + get => (string)GetValue(LabelProperty); + set => SetValue(LabelProperty, value); } - protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) + protected virtual void OnLabelPropertyChanged(string oldValue, string newValue) { - if ( oldValue != newValue ) + if (oldValue != newValue) { - LabelChanged( newValue ); + LabelChanged(newValue); } } @@ -59,17 +59,17 @@ protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) /// public Style ThemedIcon { - get => (Style)GetValue( ThemedIconProperty ); - set => SetValue( ThemedIconProperty , value ); + get => (Style)GetValue(ThemedIconProperty); + set => SetValue(ThemedIconProperty, value); } - protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newValue) + protected virtual void OnThemedIconPropertyChanged(Style oldValue, Style newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - ThemedIconChanged( newValue ); + ThemedIconChanged(newValue); } } @@ -91,17 +91,17 @@ protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newVal /// public double IconSize { - get => (double)GetValue( IconSizeProperty ); - set => SetValue( IconSizeProperty , value ); + get => (double)GetValue(IconSizeProperty); + set => SetValue(IconSizeProperty, value); } - protected virtual void OnIconSizePropertyChanged(double oldValue , double newValue) + protected virtual void OnIconSizePropertyChanged(double oldValue, double newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - IconSizeChanged( newValue ); + IconSizeChanged(newValue); } } @@ -110,12 +110,12 @@ protected virtual void OnIconSizePropertyChanged(double oldValue , double newVal #region ButtonBase Events /// - protected override void OnContentChanged(object oldContent , object newContent) + protected override void OnContentChanged(object oldContent, object newContent) { - if ( newContent != oldContent ) + if (newContent != oldContent) { - ContentChanged( newContent ); - base.OnContentChanged( oldContent , newContent ); + ContentChanged(newContent); + base.OnContentChanged(oldContent, newContent); } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.cs b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.cs index a2ed552682d7..5561c9ca41b7 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarButton/ToolbarButton.cs @@ -10,17 +10,17 @@ public partial class ToolbarButton : Button, IToolbarItemSet public ToolbarButton() { - DefaultStyleKey = typeof( ToolbarButton ); + DefaultStyleKey = typeof(ToolbarButton); } /// protected override void OnApplyTemplate() { - RegisterPropertyChangedCallback( ContentProperty , OnContentChanged ); + RegisterPropertyChangedCallback(ContentProperty, OnContentChanged); base.OnApplyTemplate(); - UpdateContentStates( CheckHasContent() ); + UpdateContentStates(CheckHasContent()); } #region Private Getters @@ -59,7 +59,7 @@ private void UpdateLabel(string newLabel) private void UpdateContent(object newContent) { - if ( CheckHasContent() == false ) + if (CheckHasContent() == false) { // We clear the content } @@ -68,7 +68,7 @@ private void UpdateContent(object newContent) // We make sure the content displays } - UpdateContentStates( CheckHasContent() ); + UpdateContentStates(CheckHasContent()); } @@ -80,13 +80,13 @@ private void UpdateContent(object newContent) /// private void UpdateContentStates(bool hasContent) { - if ( hasContent ) + if (hasContent) { - VisualStateManager.GoToState( this , HasContentStateName , true ); + VisualStateManager.GoToState(this, HasContentStateName, true); } else { - VisualStateManager.GoToState( this , HasNoContentStateName , true ); + VisualStateManager.GoToState(this, HasNoContentStateName, true); } } @@ -128,7 +128,7 @@ private void UpdateIconSize(double newSize) /// private void LabelChanged(string newLabel) { - UpdateLabel( newLabel ); + UpdateLabel(newLabel); } @@ -139,7 +139,7 @@ private void LabelChanged(string newLabel) /// private void ThemedIconChanged(Style newStyle) { - UpdateThemedIcon( newStyle ); + UpdateThemedIcon(newStyle); } @@ -148,8 +148,8 @@ private void ThemedIconChanged(Style newStyle) /// /// private void IconSizeChanged(double newSize) - { - UpdateIconSize( newSize ); + { + UpdateIconSize(newSize); } #endregion @@ -163,16 +163,16 @@ private void IconSizeChanged(double newSize) /// private void ContentChanged(object newContent) { - if ( newContent != null ) + if (newContent != null) { - SetHasContent( true ); + SetHasContent(true); } - else + else { - SetHasContent( false ); + SetHasContent(false); } - UpdateContent( newContent ); + UpdateContent(newContent); } #endregion diff --git a/src/Files.App.Controls/Toolbar/ToolbarFlyoutButton/ToolbarFlyoutButton.cs b/src/Files.App.Controls/Toolbar/ToolbarFlyoutButton/ToolbarFlyoutButton.cs index 5517b8b76800..d0d159887861 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarFlyoutButton/ToolbarFlyoutButton.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarFlyoutButton/ToolbarFlyoutButton.cs @@ -7,7 +7,7 @@ public partial class ToolbarFlyoutButton : DropDownButton, IToolbarItemSet { public ToolbarFlyoutButton() { - this.DefaultStyleKey = typeof( ToolbarFlyoutButton ); + this.DefaultStyleKey = typeof(ToolbarFlyoutButton); } protected override void OnApplyTemplate() diff --git a/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.Properties.cs b/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.Properties.cs index cf710f2ea8ef..56a81de49cc3 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.Properties.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.Properties.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.UI.Xaml.Input; -using Files.App.Controls.Primitives; namespace Files.App.Controls { @@ -27,17 +26,17 @@ public partial class ToolbarItem : DependencyObject /// public ToolbarItemTypes ItemType { - get => (ToolbarItemTypes)GetValue( ItemTypeProperty ); - set => SetValue( ItemTypeProperty , value ); + get => (ToolbarItemTypes)GetValue(ItemTypeProperty); + set => SetValue(ItemTypeProperty, value); } - protected virtual void OnItemTypePropertyChanged(ToolbarItemTypes oldValue , ToolbarItemTypes newValue) + protected virtual void OnItemTypePropertyChanged(ToolbarItemTypes oldValue, ToolbarItemTypes newValue) { - if ( oldValue != newValue ) + if (oldValue != newValue) { - ItemTypeChanged( newValue ); + ItemTypeChanged(newValue); } } @@ -62,17 +61,17 @@ protected virtual void OnItemTypePropertyChanged(ToolbarItemTypes oldValue , Too /// public OverflowBehaviors OverflowBehavior { - get => (OverflowBehaviors)GetValue( OverflowBehaviorProperty ); - set => SetValue( OverflowBehaviorProperty , value ); + get => (OverflowBehaviors)GetValue(OverflowBehaviorProperty); + set => SetValue(OverflowBehaviorProperty, value); } - protected virtual void OnOverflowBehaviorPropertyChanged(OverflowBehaviors oldValue , OverflowBehaviors newValue) + protected virtual void OnOverflowBehaviorPropertyChanged(OverflowBehaviors oldValue, OverflowBehaviors newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - OverflowBehaviorChanged( newValue ); + OverflowBehaviorChanged(newValue); } } @@ -97,17 +96,17 @@ protected virtual void OnOverflowBehaviorPropertyChanged(OverflowBehaviors oldVa /// public string Label { - get => (string)GetValue( LabelProperty ); - set => SetValue( LabelProperty , value ); + get => (string)GetValue(LabelProperty); + set => SetValue(LabelProperty, value); } - protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) + protected virtual void OnLabelPropertyChanged(string oldValue, string newValue) { - if ( newValue != oldValue ) - { - LabelChanged( newValue ); + if (newValue != oldValue) + { + LabelChanged(newValue); } } @@ -117,26 +116,26 @@ protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) public static readonly DependencyProperty SubItemsProperty = DependencyProperty.Register( - nameof( SubItems ), - typeof( IList ), + nameof(SubItems), + typeof(IList), typeof(ToolbarItem), - new PropertyMetadata( new List(), (d, e) => ((ToolbarItem)d).OnSubItemsPropertyChanged(( IList )e.OldValue, ( IList )e.NewValue))); + new PropertyMetadata(new List(), (d, e) => ((ToolbarItem)d).OnSubItemsPropertyChanged((IList)e.OldValue, (IList)e.NewValue))); public IList SubItems { - get => (IList)GetValue( SubItemsProperty ); - set => SetValue( SubItemsProperty , value ); + get => (IList)GetValue(SubItemsProperty); + set => SetValue(SubItemsProperty, value); } - protected virtual void OnSubItemsPropertyChanged(IList oldItems , IList newItems) + protected virtual void OnSubItemsPropertyChanged(IList oldItems, IList newItems) { - if ( newItems != oldItems ) + if (newItems != oldItems) { - SubItemsChanged( newItems ); + SubItemsChanged(newItems); } } @@ -161,17 +160,17 @@ protected virtual void OnSubItemsPropertyChanged(IList oldItems , I /// public object Content { - get => (object)GetValue( ContentProperty ); - set => SetValue( ContentProperty , value ); + get => (object)GetValue(ContentProperty); + set => SetValue(ContentProperty, value); } - protected virtual void OnContentPropertyChanged(object oldValue , object newValue) + protected virtual void OnContentPropertyChanged(object oldValue, object newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - ContentChanged( newValue ); + ContentChanged(newValue); } } @@ -196,17 +195,17 @@ protected virtual void OnContentPropertyChanged(object oldValue , object newValu /// public Style ThemedIcon { - get => (Style)GetValue( ThemedIconProperty ); - set => SetValue( ThemedIconProperty , value ); + get => (Style)GetValue(ThemedIconProperty); + set => SetValue(ThemedIconProperty, value); } - protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newValue) + protected virtual void OnThemedIconPropertyChanged(Style oldValue, Style newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - ThemedIconChanged( newValue ); + ThemedIconChanged(newValue); } } @@ -228,17 +227,17 @@ protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newVal /// public double IconSize { - get => (double)GetValue( IconSizeProperty ); - set => SetValue( IconSizeProperty , value ); + get => (double)GetValue(IconSizeProperty); + set => SetValue(IconSizeProperty, value); } - protected virtual void OnIconSizePropertyChanged(double oldValue , double newValue) + protected virtual void OnIconSizePropertyChanged(double oldValue, double newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - IconSizeChanged( newValue ); + IconSizeChanged(newValue); } } @@ -263,17 +262,17 @@ protected virtual void OnIconSizePropertyChanged(double oldValue , double newVal /// public bool IsChecked { - get => (bool)GetValue( IsCheckedProperty ); - set => SetValue( IsCheckedProperty , value ); + get => (bool)GetValue(IsCheckedProperty); + set => SetValue(IsCheckedProperty, value); } - protected virtual void OnIsCheckedPropertyChanged(bool oldValue , bool newValue) + protected virtual void OnIsCheckedPropertyChanged(bool oldValue, bool newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - IsCheckedChanged( newValue ); + IsCheckedChanged(newValue); } } @@ -298,17 +297,17 @@ protected virtual void OnIsCheckedPropertyChanged(bool oldValue , bool newValue) /// public string KeyboardAcceleratorTextOverride { - get => (string)GetValue( KeyboardAcceleratorTextOverrideProperty ); - set => SetValue( KeyboardAcceleratorTextOverrideProperty , value ); + get => (string)GetValue(KeyboardAcceleratorTextOverrideProperty); + set => SetValue(KeyboardAcceleratorTextOverrideProperty, value); } - protected virtual void OnKeyboardAcceleratorTextOverridePropertyChanged(string oldValue , string newValue) + protected virtual void OnKeyboardAcceleratorTextOverridePropertyChanged(string oldValue, string newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - KeyboardAcceleratorTextOverrideChanged( newValue ); + KeyboardAcceleratorTextOverrideChanged(newValue); } } @@ -333,17 +332,17 @@ protected virtual void OnKeyboardAcceleratorTextOverridePropertyChanged(string o /// public string GroupName { - get => (string)GetValue( GroupNameProperty ); - set => SetValue( GroupNameProperty , value ); + get => (string)GetValue(GroupNameProperty); + set => SetValue(GroupNameProperty, value); } - protected virtual void OnGroupNamePropertyChanged(string oldValue , string newValue) + protected virtual void OnGroupNamePropertyChanged(string oldValue, string newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - GroupNameChanged( newValue ); + GroupNameChanged(newValue); } } @@ -368,17 +367,17 @@ protected virtual void OnGroupNamePropertyChanged(string oldValue , string newVa /// public XamlUICommand Command { - get => (XamlUICommand)GetValue( CommandProperty ); - set => SetValue( CommandProperty , value ); + get => (XamlUICommand)GetValue(CommandProperty); + set => SetValue(CommandProperty, value); } - protected virtual void OnCommandPropertyChanged(XamlUICommand oldValue , XamlUICommand newValue) + protected virtual void OnCommandPropertyChanged(XamlUICommand oldValue, XamlUICommand newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - CommandChanged( newValue ); + CommandChanged(newValue); } } @@ -403,17 +402,17 @@ protected virtual void OnCommandPropertyChanged(XamlUICommand oldValue , XamlUIC /// public object CommandParameter { - get => (object)GetValue( CommandParameterProperty ); - set => SetValue( CommandParameterProperty , value ); + get => (object)GetValue(CommandParameterProperty); + set => SetValue(CommandParameterProperty, value); } - protected virtual void OnCommandParameterPropertyChanged(object oldValue , object newValue) + protected virtual void OnCommandParameterPropertyChanged(object oldValue, object newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - CommandParameterChanged( newValue ); + CommandParameterChanged(newValue); } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.cs b/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.cs index 5e8bdb6421ec..6709a474c8eb 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarItem/ToolbarItem.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Controls.Primitives; using Microsoft.UI.Xaml.Input; namespace Files.App.Controls @@ -13,7 +12,7 @@ namespace Files.App.Controls /// public partial class ToolbarItem : DependencyObject { - # region Update Item Properties + #region Update Item Properties private void UpdateItemType(ToolbarItemTypes newItemType) { @@ -54,7 +53,7 @@ private void UpdateItemType(ToolbarItemTypes newItemType) private void UpdateLabel(string newLabel) - { + { /// /// Updates the internal item's Text or Label /// property as it changes. @@ -68,7 +67,7 @@ private void UpdateLabel(string newLabel) /// /// private void UpdateSubItems(IList newItems) - { + { } @@ -198,21 +197,21 @@ private void UpdateIsChecked(bool isChecked) private void ItemTypeChanged(ToolbarItemTypes newItemType) { - UpdateItemType( newItemType ); + UpdateItemType(newItemType); } private void OverflowBehaviorChanged(OverflowBehaviors newOverflowBehavior) { - UpdateOverflowBehavior( newOverflowBehavior ); + UpdateOverflowBehavior(newOverflowBehavior); } - private void LabelChanged(string newLabel) + private void LabelChanged(string newLabel) { - UpdateLabel( newLabel ); + UpdateLabel(newLabel); } @@ -224,49 +223,49 @@ private void LabelChanged(string newLabel) /// private void SubItemsChanged(IList newItems) { - UpdateSubItems( newItems ); + UpdateSubItems(newItems); } - private void ContentChanged(object newContent) + private void ContentChanged(object newContent) { - UpdateContent( newContent ); + UpdateContent(newContent); } private void ThemedIconChanged(Style newStyle) { - UpdateThemedIcon( newStyle ); + UpdateThemedIcon(newStyle); } - private void KeyboardAcceleratorTextOverrideChanged( string newKeyboardAcceleratorText) + private void KeyboardAcceleratorTextOverrideChanged(string newKeyboardAcceleratorText) { - UpdateKeyboardAcceleratorTextOverride( newKeyboardAcceleratorText ); + UpdateKeyboardAcceleratorTextOverride(newKeyboardAcceleratorText); } private void GroupNameChanged(string newGroupName) { - UpdateGroupName( newGroupName ); + UpdateGroupName(newGroupName); } private void CommandChanged(XamlUICommand newCommand) { - UpdateCommand( newCommand ); + UpdateCommand(newCommand); } private void CommandParameterChanged(object newCommandParameter) { - UpdateCommandParameter( newCommandParameter ); + UpdateCommandParameter(newCommandParameter); } @@ -276,7 +275,7 @@ private void CommandParameterChanged(object newCommandParameter) /// private void IconSizeChanged(double newSize) { - UpdateIconSize( newSize ); + UpdateIconSize(newSize); } @@ -286,7 +285,7 @@ private void IconSizeChanged(double newSize) /// private void IsCheckedChanged(bool isChecked) { - UpdateIsChecked( isChecked ); + UpdateIsChecked(isChecked); } #endregion diff --git a/src/Files.App.Controls/Toolbar/ToolbarRadioButton/ToolbarRadioButton.cs b/src/Files.App.Controls/Toolbar/ToolbarRadioButton/ToolbarRadioButton.cs index 5e111a32d64b..7760b0b869fc 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarRadioButton/ToolbarRadioButton.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarRadioButton/ToolbarRadioButton.cs @@ -7,7 +7,7 @@ public partial class ToolbarRadioButton : RadioButton, IToolbarItemSet { public ToolbarRadioButton() { - DefaultStyleKey = typeof( ToolbarRadioButton ); + DefaultStyleKey = typeof(ToolbarRadioButton); } protected override void OnApplyTemplate() diff --git a/src/Files.App.Controls/Toolbar/ToolbarSeparator/ToolbarSeparator.cs b/src/Files.App.Controls/Toolbar/ToolbarSeparator/ToolbarSeparator.cs index 7cd4d57acf0f..b8d7290522e3 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarSeparator/ToolbarSeparator.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarSeparator/ToolbarSeparator.cs @@ -3,7 +3,7 @@ namespace Files.App.Controls { - public partial class ToolbarSeparator : Control , IToolbarItemSet + public partial class ToolbarSeparator : Control, IToolbarItemSet { public ToolbarSeparator() { diff --git a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Constants.cs b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Constants.cs index d6c974aff5eb..4e05ae5d6156 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Constants.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Constants.cs @@ -4,54 +4,54 @@ namespace Files.App.Controls { // TemplateParts - [TemplatePart( Name = ThemedIconPartName , Type = typeof( ThemedIcon ) )] - [TemplatePart( Name = ContentPresenterPartName , Type = typeof( ContentPresenter ) )] + [TemplatePart(Name = ThemedIconPartName, Type = typeof(ThemedIcon))] + [TemplatePart(Name = ContentPresenterPartName, Type = typeof(ContentPresenter))] // VisualStates - [TemplateVisualState( Name = NormalStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = PointerOverStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = PressedStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = DisabledStateName , GroupName = CommonStatesGroupName )] - - [TemplateVisualState( Name = CheckedStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = CheckedPointerOverStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = CheckedPressedStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = CheckedDisabledStateName , GroupName = CommonStatesGroupName )] - - [TemplateVisualState( Name = IndeterminateStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = IndeterminatePointerOverStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = IndeterminatePressedStateName , GroupName = CommonStatesGroupName )] - [TemplateVisualState( Name = IndeterminateDisabledStateName , GroupName = CommonStatesGroupName )] - - [TemplateVisualState( Name = HasContentStateName , GroupName = ContentStatesGroupName )] - [TemplateVisualState( Name = HasNoContentStateName , GroupName = ContentStatesGroupName )] + [TemplateVisualState(Name = NormalStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = PointerOverStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = PressedStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = DisabledStateName, GroupName = CommonStatesGroupName)] + + [TemplateVisualState(Name = CheckedStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = CheckedPointerOverStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = CheckedPressedStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = CheckedDisabledStateName, GroupName = CommonStatesGroupName)] + + [TemplateVisualState(Name = IndeterminateStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = IndeterminatePointerOverStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = IndeterminatePressedStateName, GroupName = CommonStatesGroupName)] + [TemplateVisualState(Name = IndeterminateDisabledStateName, GroupName = CommonStatesGroupName)] + + [TemplateVisualState(Name = HasContentStateName, GroupName = ContentStatesGroupName)] + [TemplateVisualState(Name = HasNoContentStateName, GroupName = ContentStatesGroupName)] public partial class ToolbarToggleButton : ToggleButton, IToolbarItemSet { // TemplatePart Names - internal const string ThemedIconPartName = "PART_ThemedIcon"; - internal const string ContentPresenterPartName = "PART_ContentPresenter"; + internal const string ThemedIconPartName = "PART_ThemedIcon"; + internal const string ContentPresenterPartName = "PART_ContentPresenter"; // VisualState Group Names - internal const string CommonStatesGroupName = "CommonStates"; - internal const string ContentStatesGroupName = "ContentStates"; + internal const string CommonStatesGroupName = "CommonStates"; + internal const string ContentStatesGroupName = "ContentStates"; // VisualState Names - internal const string NormalStateName = "Normal"; - internal const string PointerOverStateName = "PointerOver"; - internal const string PressedStateName = "Pressed"; - internal const string DisabledStateName = "Disabled"; - - internal const string CheckedStateName = "Checked"; - internal const string CheckedPointerOverStateName = "CheckedPointerOver"; - internal const string CheckedPressedStateName = "CheckedPressed"; - internal const string CheckedDisabledStateName = "CheckedDisabled"; - - internal const string IndeterminateStateName = "Indeterminate"; - internal const string IndeterminatePointerOverStateName = "IndeterminatePointerOver"; - internal const string IndeterminatePressedStateName = "IndeterminatePressed"; - internal const string IndeterminateDisabledStateName = "IndeterminateDisabled"; - - internal const string HasContentStateName = "HasContent"; - internal const string HasNoContentStateName = "HasNoContent"; + internal const string NormalStateName = "Normal"; + internal const string PointerOverStateName = "PointerOver"; + internal const string PressedStateName = "Pressed"; + internal const string DisabledStateName = "Disabled"; + + internal const string CheckedStateName = "Checked"; + internal const string CheckedPointerOverStateName = "CheckedPointerOver"; + internal const string CheckedPressedStateName = "CheckedPressed"; + internal const string CheckedDisabledStateName = "CheckedDisabled"; + + internal const string IndeterminateStateName = "Indeterminate"; + internal const string IndeterminatePointerOverStateName = "IndeterminatePointerOver"; + internal const string IndeterminatePressedStateName = "IndeterminatePressed"; + internal const string IndeterminateDisabledStateName = "IndeterminateDisabled"; + + internal const string HasContentStateName = "HasContent"; + internal const string HasNoContentStateName = "HasNoContent"; } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Properties.cs b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Properties.cs index c0bb0a69c300..1cc13e6bfc52 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Properties.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.Properties.cs @@ -24,17 +24,17 @@ public partial class ToolbarToggleButton : ToggleButton, IToolbarItemSet /// public string Label { - get => (string)GetValue( LabelProperty ); - set => SetValue( LabelProperty , value ); + get => (string)GetValue(LabelProperty); + set => SetValue(LabelProperty, value); } - protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) + protected virtual void OnLabelPropertyChanged(string oldValue, string newValue) { - if ( oldValue != newValue ) + if (oldValue != newValue) { - LabelChanged( newValue ); + LabelChanged(newValue); } } @@ -59,17 +59,17 @@ protected virtual void OnLabelPropertyChanged(string oldValue , string newValue) /// public Style ThemedIcon { - get => (Style)GetValue( ThemedIconProperty ); - set => SetValue( ThemedIconProperty , value ); + get => (Style)GetValue(ThemedIconProperty); + set => SetValue(ThemedIconProperty, value); } - protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newValue) + protected virtual void OnThemedIconPropertyChanged(Style oldValue, Style newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - ThemedIconChanged( newValue ); + ThemedIconChanged(newValue); } } @@ -91,17 +91,17 @@ protected virtual void OnThemedIconPropertyChanged(Style oldValue , Style newVal /// public double IconSize { - get => (double)GetValue( IconSizeProperty ); - set => SetValue( IconSizeProperty , value ); + get => (double)GetValue(IconSizeProperty); + set => SetValue(IconSizeProperty, value); } - protected virtual void OnIconSizePropertyChanged(double oldValue , double newValue) + protected virtual void OnIconSizePropertyChanged(double oldValue, double newValue) { - if ( newValue != oldValue ) + if (newValue != oldValue) { - IconSizeChanged( newValue ); + IconSizeChanged(newValue); } } @@ -110,12 +110,12 @@ protected virtual void OnIconSizePropertyChanged(double oldValue , double newVal #region ButtonBase Events /// - protected override void OnContentChanged(object oldContent , object newContent) + protected override void OnContentChanged(object oldContent, object newContent) { - if ( newContent != oldContent ) + if (newContent != oldContent) { - ContentChanged( newContent ); - base.OnContentChanged( oldContent , newContent ); + ContentChanged(newContent); + base.OnContentChanged(oldContent, newContent); } } diff --git a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.cs b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.cs index a7331e6954f3..d31356e8a6d6 100644 --- a/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.cs +++ b/src/Files.App.Controls/Toolbar/ToolbarToggleButton/ToolbarToggleButton.cs @@ -10,16 +10,16 @@ public partial class ToolbarToggleButton : ToggleButton, IToolbarItemSet public ToolbarToggleButton() { - DefaultStyleKey = typeof( ToolbarToggleButton ); + DefaultStyleKey = typeof(ToolbarToggleButton); } protected override void OnApplyTemplate() { - RegisterPropertyChangedCallback( ContentProperty , OnContentChanged ); + RegisterPropertyChangedCallback(ContentProperty, OnContentChanged); base.OnApplyTemplate(); - UpdateContentStates( CheckHasContent() ); + UpdateContentStates(CheckHasContent()); } #region Private Getters @@ -58,7 +58,7 @@ private void UpdateLabel(string newLabel) private void UpdateContent(object newContent) { - if ( CheckHasContent() == false ) + if (CheckHasContent() == false) { // We clear the content } @@ -67,7 +67,7 @@ private void UpdateContent(object newContent) // We make sure the content displays } - UpdateContentStates( CheckHasContent() ); + UpdateContentStates(CheckHasContent()); } @@ -79,13 +79,13 @@ private void UpdateContent(object newContent) /// private void UpdateContentStates(bool hasContent) { - if ( hasContent ) + if (hasContent) { - VisualStateManager.GoToState( this , HasContentStateName , true ); + VisualStateManager.GoToState(this, HasContentStateName, true); } else { - VisualStateManager.GoToState( this , HasNoContentStateName , true ); + VisualStateManager.GoToState(this, HasNoContentStateName, true); } } @@ -127,7 +127,7 @@ private void UpdateIconSize(double newSize) /// private void LabelChanged(string newLabel) { - UpdateLabel( newLabel ); + UpdateLabel(newLabel); } @@ -138,7 +138,7 @@ private void LabelChanged(string newLabel) /// private void ThemedIconChanged(Style newStyle) { - UpdateThemedIcon( newStyle ); + UpdateThemedIcon(newStyle); } @@ -149,7 +149,7 @@ private void ThemedIconChanged(Style newStyle) /// private void IconSizeChanged(double newSize) { - UpdateIconSize( newSize ); + UpdateIconSize(newSize); } #endregion @@ -163,16 +163,16 @@ private void IconSizeChanged(double newSize) /// private void ContentChanged(object newContent) { - if ( newContent != null ) + if (newContent != null) { - SetHasContent( true ); + SetHasContent(true); } else { - SetHasContent( false ); + SetHasContent(false); } - UpdateContent( newContent ); + UpdateContent(newContent); } #endregion diff --git a/src/Files.App.CsWin32/ComHeapPtr`1.cs b/src/Files.App.CsWin32/ComHeapPtr`1.cs index ff63a40942fa..2bf4fa41c642 100644 --- a/src/Files.App.CsWin32/ComHeapPtr`1.cs +++ b/src/Files.App.CsWin32/ComHeapPtr`1.cs @@ -3,8 +3,6 @@ using System; using System.Runtime.CompilerServices; -using Windows.Win32; -using Windows.Win32.System.Com; namespace Windows.Win32 { diff --git a/src/Files.App.CsWin32/ComPtr`1.cs b/src/Files.App.CsWin32/ComPtr`1.cs index 6ceb19067cf8..2cceed532893 100644 --- a/src/Files.App.CsWin32/ComPtr`1.cs +++ b/src/Files.App.CsWin32/ComPtr`1.cs @@ -3,10 +3,8 @@ using System; using System.Runtime.CompilerServices; -using Windows.Win32; using Windows.Win32.Foundation; using Windows.Win32.System.Com; -using Windows.Win32.System.WinRT; namespace Windows.Win32 { diff --git a/src/Files.App.CsWin32/IStorageProviderQuotaUI.cs b/src/Files.App.CsWin32/IStorageProviderQuotaUI.cs index 04c6741412a7..20f9dc08d55b 100644 --- a/src/Files.App.CsWin32/IStorageProviderQuotaUI.cs +++ b/src/Files.App.CsWin32/IStorageProviderQuotaUI.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using System; -using System.Diagnostics; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using Windows.Win32.Foundation; namespace Windows.Win32.System.WinRT diff --git a/src/Files.App.CsWin32/IStorageProviderStatusUI.cs b/src/Files.App.CsWin32/IStorageProviderStatusUI.cs index 913bbc852e5e..1d778bc008ea 100644 --- a/src/Files.App.CsWin32/IStorageProviderStatusUI.cs +++ b/src/Files.App.CsWin32/IStorageProviderStatusUI.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using System; -using System.Diagnostics; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using Windows.Win32.Foundation; namespace Windows.Win32.System.WinRT diff --git a/src/Files.App.CsWin32/IStorageProviderStatusUISource.cs b/src/Files.App.CsWin32/IStorageProviderStatusUISource.cs index f0d96390f204..caf7aa291bf3 100644 --- a/src/Files.App.CsWin32/IStorageProviderStatusUISource.cs +++ b/src/Files.App.CsWin32/IStorageProviderStatusUISource.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using System; -using System.Diagnostics; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using Windows.Win32.Foundation; namespace Windows.Win32.System.WinRT diff --git a/src/Files.App.CsWin32/IStorageProviderStatusUISourceFactory.cs b/src/Files.App.CsWin32/IStorageProviderStatusUISourceFactory.cs index cca56098e7f1..9ab9495766d7 100644 --- a/src/Files.App.CsWin32/IStorageProviderStatusUISourceFactory.cs +++ b/src/Files.App.CsWin32/IStorageProviderStatusUISourceFactory.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using System; -using System.Diagnostics; using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; using Windows.Win32.Foundation; namespace Windows.Win32.System.WinRT diff --git a/src/Files.App.Storage/GlobalUsings.cs b/src/Files.App.Storage/GlobalUsings.cs index 24e1a2323cd6..8fa89979a935 100644 --- a/src/Files.App.Storage/GlobalUsings.cs +++ b/src/Files.App.Storage/GlobalUsings.cs @@ -1,4 +1,4 @@ -// Copyright (c) Files Community +// Copyright (c) Files Community // Licensed under the MIT License. // System diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs b/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs index 7987071dab29..3d927df0de68 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs +++ b/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs @@ -16,7 +16,7 @@ public abstract class FtpStorable : IStorableChild /// /// Gets the parent folder of the storable, if any. /// - protected virtual IFolder? Parent { get; } + protected virtual IFolder? Parent { get; } protected internal FtpStorable(string path, string name, IFolder? parent) { diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs b/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs index 2fd4cfbcafa8..55a16c37bc58 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Files.App.Storage +namespace Files.App.Storage { public interface IFolderSettings { diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs b/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs index e176cc787ea2..b811e47d0625 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Files.App.Storage +namespace Files.App.Storage { public enum JumpListDestinationType { diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs b/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs index 1f239a8ea144..ddee40eb69d4 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs @@ -1,13 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Concurrent; -using Windows.Win32; -using Windows.Win32.Foundation; -using Windows.Win32.System.Com; -using Windows.Win32.UI.Shell; -using Windows.Win32.UI.Shell.Common; - namespace Files.App.Storage { public unsafe class JumpListManager : IDisposable diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs index 93362f26a7e9..ef4b7d85d24b 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.IO; -using Windows.Win32; using Windows.Win32.UI.Shell; namespace Files.App.Storage diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs index fcc3da01b630..ec3204a12141 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs @@ -7,7 +7,7 @@ public static partial class WindowsStorableHelpers { public static async Task TrySetShortcutIconOnPowerShellAsElevatedAsync(this IWindowsStorable storable, IWindowsStorable iconFile, int index) { - string psScript = + string psScript = $@"$FilePath = '{storable}' $IconFile = '{iconFile}' $IconIndex = '{index}' diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs index 724434b5f082..aa3948a27e7d 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs +++ b/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Windows.Win32; -using Windows.Win32.Foundation; using Windows.Win32.System.SystemInformation; namespace Files.App.Storage diff --git a/src/Files.App/Actions/Content/Archives/Decompress/BaseDecompressArchiveAction.cs b/src/Files.App/Actions/Content/Archives/Decompress/BaseDecompressArchiveAction.cs index f399becaf2e5..1c630e6d0d62 100644 --- a/src/Files.App/Actions/Content/Archives/Decompress/BaseDecompressArchiveAction.cs +++ b/src/Files.App/Actions/Content/Archives/Decompress/BaseDecompressArchiveAction.cs @@ -4,7 +4,6 @@ using Files.App.Dialogs; using Microsoft.UI.Xaml.Controls; using SevenZip; -using System.Diagnostics.CodeAnalysis; using System.Text; using Windows.Foundation.Metadata; using Windows.Storage; diff --git a/src/Files.App/Actions/Content/Background/SetAsLockscreenBackgroundAction.cs b/src/Files.App/Actions/Content/Background/SetAsLockscreenBackgroundAction.cs index 5723e4a4e1b6..79b6e48868b4 100644 --- a/src/Files.App/Actions/Content/Background/SetAsLockscreenBackgroundAction.cs +++ b/src/Files.App/Actions/Content/Background/SetAsLockscreenBackgroundAction.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.Extensions.Logging; - namespace Files.App.Actions { internal sealed partial class SetAsLockscreenBackgroundAction : BaseSetAsAction diff --git a/src/Files.App/Actions/Content/Background/SetAsSlideshowBackgroundAction.cs b/src/Files.App/Actions/Content/Background/SetAsSlideshowBackgroundAction.cs index a903222eac62..f98ea84becad 100644 --- a/src/Files.App/Actions/Content/Background/SetAsSlideshowBackgroundAction.cs +++ b/src/Files.App/Actions/Content/Background/SetAsSlideshowBackgroundAction.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.Extensions.Logging; - namespace Files.App.Actions { internal sealed partial class SetAsSlideshowBackgroundAction : BaseSetAsAction diff --git a/src/Files.App/Actions/Content/Background/SetAsWallpaperBackgroundAction.cs b/src/Files.App/Actions/Content/Background/SetAsWallpaperBackgroundAction.cs index 01e4775cdd31..b8c23e4294df 100644 --- a/src/Files.App/Actions/Content/Background/SetAsWallpaperBackgroundAction.cs +++ b/src/Files.App/Actions/Content/Background/SetAsWallpaperBackgroundAction.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.Extensions.Logging; - namespace Files.App.Actions { internal sealed partial class SetAsWallpaperBackgroundAction : BaseSetAsAction diff --git a/src/Files.App/Actions/Content/Install/InstallInfDriverAction.cs b/src/Files.App/Actions/Content/Install/InstallInfDriverAction.cs index ac9bebad3c74..766b6b8df25f 100644 --- a/src/Files.App/Actions/Content/Install/InstallInfDriverAction.cs +++ b/src/Files.App/Actions/Content/Install/InstallInfDriverAction.cs @@ -11,7 +11,7 @@ internal sealed partial class InstallInfDriverAction : ObservableObject, IAction public string Label => Strings.InstallDriver.GetLocalizedResource(); - + public string Description => Strings.InstallInfDriverDescription.GetLocalizedFormatResource(context.SelectedItems.Count); diff --git a/src/Files.App/Actions/Content/Tags/OpenAllTaggedActions.cs b/src/Files.App/Actions/Content/Tags/OpenAllTaggedActions.cs index e6492509db41..16e6fe0c5b4f 100644 --- a/src/Files.App/Actions/Content/Tags/OpenAllTaggedActions.cs +++ b/src/Files.App/Actions/Content/Tags/OpenAllTaggedActions.cs @@ -3,8 +3,8 @@ namespace Files.App.Actions { - sealed partial class OpenAllTaggedActions: ObservableObject, IAction - { + sealed partial class OpenAllTaggedActions : ObservableObject, IAction + { private readonly IContentPageContext _pageContext; private readonly ITagsContext _tagsContext; @@ -18,7 +18,7 @@ public string Description public RichGlyph Glyph => new("\uE71D"); - public bool IsExecutable => + public bool IsExecutable => _pageContext.ShellPage is not null && _tagsContext.TaggedItems.Any(); @@ -37,16 +37,16 @@ public async Task ExecuteAsync(object? parameter = null) .Where(item => !item.isFolder) .Select(f => f.path) .ToList(); - + var folderPaths = _tagsContext .TaggedItems .Where(item => item.isFolder) .Select(f => f.path) .ToList(); - + await Task.WhenAll(filePaths.Select(path => NavigationHelpers.OpenPath(path, _pageContext.ShellPage!))); - foreach (var path in folderPaths) + foreach (var path in folderPaths) await NavigationHelpers.OpenPathInNewTab(path); } diff --git a/src/Files.App/Actions/Display/LayoutAction.cs b/src/Files.App/Actions/Display/LayoutAction.cs index e57c6bf27774..1d26b8fc72cb 100644 --- a/src/Files.App/Actions/Display/LayoutAction.cs +++ b/src/Files.App/Actions/Display/LayoutAction.cs @@ -238,7 +238,7 @@ public Task ExecuteAsync(object? parameter = null) break; case FolderLayoutModes.CardsView: if (UserSettingsService.LayoutSettingsService.CardsViewSize > CardsViewSizeKind.Small) - UserSettingsService.LayoutSettingsService.CardsViewSize -= 1; + UserSettingsService.LayoutSettingsService.CardsViewSize -= 1; break; case FolderLayoutModes.GridView: if (UserSettingsService.LayoutSettingsService.GridViewSize > GridViewSizeKind.Small) @@ -275,7 +275,7 @@ public HotKey MediaHotKey public bool IsExecutable => ContentPageContext.PageType is not ContentPageTypes.Home && - ContentPageContext.ShellPage?.InstanceViewModel.FolderSettings.LayoutMode is FolderLayoutModes layoutMode && + ContentPageContext.ShellPage?.InstanceViewModel.FolderSettings.LayoutMode is FolderLayoutModes layoutMode && ((layoutMode is FolderLayoutModes.DetailsView && UserSettingsService.LayoutSettingsService.DetailsViewSize < DetailsViewSizeKind.ExtraLarge) || (layoutMode is FolderLayoutModes.ListView && UserSettingsService.LayoutSettingsService.ListViewSize < ListViewSizeKind.ExtraLarge) || (layoutMode is FolderLayoutModes.CardsView && UserSettingsService.LayoutSettingsService.CardsViewSize < CardsViewSizeKind.ExtraLarge) || diff --git a/src/Files.App/Actions/FileSystem/OpenItemAction.cs b/src/Files.App/Actions/FileSystem/OpenItemAction.cs index 34c4d7cfdfae..87519b842cda 100644 --- a/src/Files.App/Actions/FileSystem/OpenItemAction.cs +++ b/src/Files.App/Actions/FileSystem/OpenItemAction.cs @@ -15,7 +15,7 @@ public string Label public string Description => Strings.OpenItemDescription.GetLocalizedFormatResource(context.SelectedItems.Count); - + public RichGlyph Glyph => new(themedIconStyle: "App.ThemedIcons.OpenFile"); diff --git a/src/Files.App/Actions/FileSystem/Transfer/BaseTransferItemAction.cs b/src/Files.App/Actions/FileSystem/Transfer/BaseTransferItemAction.cs index aa37f1fbd908..a9addf150083 100644 --- a/src/Files.App/Actions/FileSystem/Transfer/BaseTransferItemAction.cs +++ b/src/Files.App/Actions/FileSystem/Transfer/BaseTransferItemAction.cs @@ -6,7 +6,6 @@ using System.IO; using Windows.ApplicationModel.DataTransfer; using Windows.Storage; -using Windows.System; namespace Files.App.Actions { diff --git a/src/Files.App/Actions/Git/GitFetchAction.cs b/src/Files.App/Actions/Git/GitFetchAction.cs index cb6016fa2af5..dc0a3842ef50 100644 --- a/src/Files.App/Actions/Git/GitFetchAction.cs +++ b/src/Files.App/Actions/Git/GitFetchAction.cs @@ -19,7 +19,7 @@ public bool IsExecutable public GitFetchAction() { _context = Ioc.Default.GetRequiredService(); - + _context.PropertyChanged += Context_PropertyChanged; } diff --git a/src/Files.App/Actions/Git/GitInitAction.cs b/src/Files.App/Actions/Git/GitInitAction.cs index c472b3251d89..11f323948793 100644 --- a/src/Files.App/Actions/Git/GitInitAction.cs +++ b/src/Files.App/Actions/Git/GitInitAction.cs @@ -3,8 +3,8 @@ namespace Files.App.Actions { - sealed partial class GitInitAction : ObservableObject, IAction - { + sealed partial class GitInitAction : ObservableObject, IAction + { private readonly IContentPageContext _context; public string Label @@ -13,7 +13,7 @@ public string Label public string Description => Strings.InitRepoDescription.GetLocalizedResource(); - public bool IsExecutable => + public bool IsExecutable => _context.Folder is not null && _context.Folder.ItemPath != SystemIO.Path.GetPathRoot(_context.Folder.ItemPath) && !_context.IsGitRepository; diff --git a/src/Files.App/Actions/Navigation/CloseTabBaseAction.cs b/src/Files.App/Actions/Navigation/CloseTabBaseAction.cs index 051957f3ce10..d5f14cd0d924 100644 --- a/src/Files.App/Actions/Navigation/CloseTabBaseAction.cs +++ b/src/Files.App/Actions/Navigation/CloseTabBaseAction.cs @@ -10,13 +10,13 @@ internal abstract class CloseTabBaseAction : ObservableObject, IAction public abstract string Label { get; } public abstract string Description { get; } - + public bool IsExecutable => GetIsExecutable(); public virtual HotKey HotKey => HotKey.None; - + public virtual HotKey SecondHotKey => HotKey.None; diff --git a/src/Files.App/Actions/Navigation/ReopenClosedTabAction.cs b/src/Files.App/Actions/Navigation/ReopenClosedTabAction.cs index 5631d0b914e3..2be7e45b532b 100644 --- a/src/Files.App/Actions/Navigation/ReopenClosedTabAction.cs +++ b/src/Files.App/Actions/Navigation/ReopenClosedTabAction.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.UserControls.TabBar; - namespace Files.App.Actions { internal sealed partial class ReopenClosedTabAction : ObservableObject, IAction diff --git a/src/Files.App/Actions/Open/OpenPropertiesAction.cs b/src/Files.App/Actions/Open/OpenPropertiesAction.cs index 3e65026262d6..2cc4247eb02b 100644 --- a/src/Files.App/Actions/Open/OpenPropertiesAction.cs +++ b/src/Files.App/Actions/Open/OpenPropertiesAction.cs @@ -21,7 +21,7 @@ public HotKey HotKey public bool IsExecutable => context.PageType is not ContentPageTypes.Home && - !(context.PageType is ContentPageTypes.SearchResults && + !(context.PageType is ContentPageTypes.SearchResults && !context.HasSelection); public OpenPropertiesAction() @@ -50,7 +50,7 @@ private void OpenPropertiesFromItemContextMenuFlyout(object? _, object e) var page = context.ShellPage?.SlimContentPage; if (page is not null) page.ItemContextMenuFlyout.Closed -= OpenPropertiesFromItemContextMenuFlyout; - + FilePropertiesHelpers.OpenPropertiesWindow(context.ShellPage!); } @@ -59,7 +59,7 @@ private void OpenPropertiesFromBaseContextMenuFlyout(object? _, object e) var page = context.ShellPage?.SlimContentPage; if (page is not null) page.BaseContextMenuFlyout.Closed -= OpenPropertiesFromBaseContextMenuFlyout; - + FilePropertiesHelpers.OpenPropertiesWindow(context.ShellPage!); } diff --git a/src/Files.App/Actions/Open/OpenRepoInIDEAction.cs b/src/Files.App/Actions/Open/OpenRepoInIDEAction.cs index 0d4d346850cd..c4c3d5514f30 100644 --- a/src/Files.App/Actions/Open/OpenRepoInIDEAction.cs +++ b/src/Files.App/Actions/Open/OpenRepoInIDEAction.cs @@ -2,7 +2,7 @@ // Licensed under the MIT License. namespace Files.App.Actions -{ +{ internal sealed partial class OpenRepoInIDEAction : ObservableObject, IAction { private readonly IDevToolsSettingsService _devToolsSettingsService; diff --git a/src/Files.App/Actions/Open/OpenSettingsAction.cs b/src/Files.App/Actions/Open/OpenSettingsAction.cs index 6c1712b887fb..1278f0560df6 100644 --- a/src/Files.App/Actions/Open/OpenSettingsAction.cs +++ b/src/Files.App/Actions/Open/OpenSettingsAction.cs @@ -19,7 +19,7 @@ public string Description public HotKey HotKey => new(Keys.OemComma, KeyModifiers.Ctrl); - + public RichGlyph Glyph => new(themedIconStyle: "App.ThemedIcons.Settings"); diff --git a/src/Files.App/Actions/Show/ToggleShelfPaneAction.cs b/src/Files.App/Actions/Show/ToggleShelfPaneAction.cs index 43ff818fa7fa..93242351c900 100644 --- a/src/Files.App/Actions/Show/ToggleShelfPaneAction.cs +++ b/src/Files.App/Actions/Show/ToggleShelfPaneAction.cs @@ -23,7 +23,7 @@ public bool IsAccessibleGlobally // TODO Remove IsExecutable when shelf feature is ready public bool IsExecutable => AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; - + public bool IsOn => generalSettingsService.ShowShelfPane; diff --git a/src/Files.App/Constants.cs b/src/Files.App/Constants.cs index a8d191705981..d5ecefa28323 100644 --- a/src/Files.App/Constants.cs +++ b/src/Files.App/Constants.cs @@ -207,7 +207,7 @@ public static class ExternalUrl public const string PrivacyPolicyUrl = @"https://files.community/privacy"; public const string SupportUsUrl = @"https://github.com/files-community/Files?sponsor"; public const string CrowdinUrl = @"https://crowdin.com/project/files-app"; - public static readonly string ReleaseNotesUrl= $"https://files.community/blog/posts/v{Package.Current.Id.Version.Major}-{Package.Current.Id.Version.Minor}-{Package.Current.Id.Version.Build}?minimal"; + public static readonly string ReleaseNotesUrl = $"https://files.community/blog/posts/v{Package.Current.Id.Version.Major}-{Package.Current.Id.Version.Minor}-{Package.Current.Id.Version.Build}?minimal"; } public static class DocsPath @@ -219,7 +219,7 @@ public static class Actions { public const int MaxSelectedItems = 5; } - + public static class DragAndDrop { public const Int32 HoverToOpenTimespan = 1300; diff --git a/src/Files.App/Converters/StatusCenterStateToBrushConverter.cs b/src/Files.App/Converters/StatusCenterStateToBrushConverter.cs index 8b8a53606563..77398fc0f141 100644 --- a/src/Files.App/Converters/StatusCenterStateToBrushConverter.cs +++ b/src/Files.App/Converters/StatusCenterStateToBrushConverter.cs @@ -84,7 +84,7 @@ public SolidColorBrush CanceledForegroundBrush public object? Convert(object value, Type targetType, object parameter, string language) { if (value is StatusCenterItemKind state) - { + { if (bool.TryParse(parameter?.ToString(), out var isBackground) && isBackground) { return state switch diff --git a/src/Files.App/Converters/StatusCenterStateToStateIconConverter.cs b/src/Files.App/Converters/StatusCenterStateToStateIconConverter.cs index 178bb4ba7ce0..62a01038914a 100644 --- a/src/Files.App/Converters/StatusCenterStateToStateIconConverter.cs +++ b/src/Files.App/Converters/StatusCenterStateToStateIconConverter.cs @@ -17,16 +17,16 @@ partial class StatusCenterStateToStateIconConverter : IValueConverter { var pathMarkup = state switch { - StatusCenterItemIconKind.Copy => Application.Current.Resources["App.Theme.PathIcon.ActionCopy"] as string, - StatusCenterItemIconKind.Move => Application.Current.Resources["App.Theme.PathIcon.ActionMove"] as string, - StatusCenterItemIconKind.Delete => Application.Current.Resources["App.Theme.PathIcon.ActionDelete"] as string, - StatusCenterItemIconKind.Recycle => Application.Current.Resources["App.Theme.PathIcon.ActionDelete"] as string, - StatusCenterItemIconKind.Extract => Application.Current.Resources["App.Theme.PathIcon.ActionExtract"] as string, - StatusCenterItemIconKind.Compress => Application.Current.Resources["App.Theme.PathIcon.ActionExtract"] as string, - StatusCenterItemIconKind.Successful => Application.Current.Resources["App.Theme.PathIcon.ActionSuccess"] as string, - StatusCenterItemIconKind.Error => Application.Current.Resources["App.Theme.PathIcon.ActionInfo"] as string, - StatusCenterItemIconKind.GitClone => Application.Current.Resources["App.Theme.PathIcon.ActionGitClone"] as string, - StatusCenterItemIconKind.InstallFont => Application.Current.Resources["App.Theme.PathIcon.ActionInstallFont"] as string, + StatusCenterItemIconKind.Copy => Application.Current.Resources["App.Theme.PathIcon.ActionCopy"] as string, + StatusCenterItemIconKind.Move => Application.Current.Resources["App.Theme.PathIcon.ActionMove"] as string, + StatusCenterItemIconKind.Delete => Application.Current.Resources["App.Theme.PathIcon.ActionDelete"] as string, + StatusCenterItemIconKind.Recycle => Application.Current.Resources["App.Theme.PathIcon.ActionDelete"] as string, + StatusCenterItemIconKind.Extract => Application.Current.Resources["App.Theme.PathIcon.ActionExtract"] as string, + StatusCenterItemIconKind.Compress => Application.Current.Resources["App.Theme.PathIcon.ActionExtract"] as string, + StatusCenterItemIconKind.Successful => Application.Current.Resources["App.Theme.PathIcon.ActionSuccess"] as string, + StatusCenterItemIconKind.Error => Application.Current.Resources["App.Theme.PathIcon.ActionInfo"] as string, + StatusCenterItemIconKind.GitClone => Application.Current.Resources["App.Theme.PathIcon.ActionGitClone"] as string, + StatusCenterItemIconKind.InstallFont => Application.Current.Resources["App.Theme.PathIcon.ActionInstallFont"] as string, _ => "" }; diff --git a/src/Files.App/Data/AppModels/SingleFileDatabaseModel.cs b/src/Files.App/Data/AppModels/SingleFileDatabaseModel.cs index 162d14a84083..9b858e0dfcd1 100644 --- a/src/Files.App/Data/AppModels/SingleFileDatabaseModel.cs +++ b/src/Files.App/Data/AppModels/SingleFileDatabaseModel.cs @@ -1,8 +1,4 @@ -using Files.Core.Storage; -using Files.Core.Storage.Extensions; -using Files.Core.Storage.Storables; -using Files.Shared.Extensions; -using Files.Shared.Utils; +using Files.Shared.Utils; using System.IO; namespace Files.App.Data.AppModels diff --git a/src/Files.App/Data/Behaviors/StickyHeaderBehavior.cs b/src/Files.App/Data/Behaviors/StickyHeaderBehavior.cs index 29fafb438288..d41f144e626b 100644 --- a/src/Files.App/Data/Behaviors/StickyHeaderBehavior.cs +++ b/src/Files.App/Data/Behaviors/StickyHeaderBehavior.cs @@ -8,9 +8,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Hosting; -using Microsoft.UI.Xaml.Input; -using Microsoft.UI.Xaml.Media; -using Windows.Foundation; using Windows.Foundation.Metadata; namespace Files.App.Data.Behaviors diff --git a/src/Files.App/Data/Commands/ActionCommand.cs b/src/Files.App/Data/Commands/ActionCommand.cs index d3a413ce2721..51a122c6258f 100644 --- a/src/Files.App/Data/Commands/ActionCommand.cs +++ b/src/Files.App/Data/Commands/ActionCommand.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Sentry; using Files.App.Actions; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/Files.App/Data/Commands/HotKey/HotKey.cs b/src/Files.App/Data/Commands/HotKey/HotKey.cs index 4c710e3d783d..30e1bbac98ba 100644 --- a/src/Files.App/Data/Commands/HotKey/HotKey.cs +++ b/src/Files.App/Data/Commands/HotKey/HotKey.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.Collections.Frozen; -using System.Runtime.InteropServices; using System.Text; using Windows.Win32; using Forms = System.Windows.Forms; diff --git a/src/Files.App/Data/Commands/Manager/CommandManager.cs b/src/Files.App/Data/Commands/Manager/CommandManager.cs index 29f8a9f25c1c..0ead424a2c80 100644 --- a/src/Files.App/Data/Commands/Manager/CommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/CommandManager.cs @@ -134,7 +134,7 @@ public IRichCommand this[HotKey hotKey] public IRichCommand LayoutIncreaseSize => commands[CommandCodes.LayoutIncreaseSize]; public IRichCommand LayoutDetails => commands[CommandCodes.LayoutDetails]; public IRichCommand LayoutList => commands[CommandCodes.LayoutList]; - public IRichCommand LayoutCards=> commands[CommandCodes.LayoutCards]; + public IRichCommand LayoutCards => commands[CommandCodes.LayoutCards]; public IRichCommand LayoutGrid => commands[CommandCodes.LayoutGrid]; public IRichCommand LayoutColumns => commands[CommandCodes.LayoutColumns]; public IRichCommand LayoutAdaptive => commands[CommandCodes.LayoutAdaptive]; diff --git a/src/Files.App/Data/Commands/Manager/ICommandManager.cs b/src/Files.App/Data/Commands/Manager/ICommandManager.cs index 1a891037c5f7..f1711fb134ec 100644 --- a/src/Files.App/Data/Commands/Manager/ICommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/ICommandManager.cs @@ -123,7 +123,7 @@ public interface ICommandManager : IEnumerable IRichCommand LayoutIncreaseSize { get; } IRichCommand LayoutDetails { get; } IRichCommand LayoutList { get; } - IRichCommand LayoutCards{ get; } + IRichCommand LayoutCards { get; } IRichCommand LayoutGrid { get; } IRichCommand LayoutColumns { get; } IRichCommand LayoutAdaptive { get; } diff --git a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs index da3cf6dc0b81..5be1861d13c3 100644 --- a/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs +++ b/src/Files.App/Data/Contexts/ContentPage/ContentPageContext.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.UserControls.TabBar; using System.Collections.Immutable; namespace Files.App.Data.Contexts @@ -92,7 +91,7 @@ private void Context_Changed(object? sender, EventArgs e) page.ContentChanged += Page_ContentChanged; page.InstanceViewModel.PropertyChanged += InstanceViewModel_PropertyChanged; page.ToolbarViewModel.PropertyChanged += ToolbarViewModel_PropertyChanged; - + if (page.PaneHolder is not null) page.PaneHolder.PropertyChanged += PaneHolder_PropertyChanged; } diff --git a/src/Files.App/Data/Contexts/HomePage/HomePageContext.cs b/src/Files.App/Data/Contexts/HomePage/HomePageContext.cs index a4e07b64ddf7..dcc552a83b1e 100644 --- a/src/Files.App/Data/Contexts/HomePage/HomePageContext.cs +++ b/src/Files.App/Data/Contexts/HomePage/HomePageContext.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.UserControls.Widgets; using Microsoft.UI.Xaml.Controls; using System.Collections.Immutable; diff --git a/src/Files.App/Data/Contexts/Multitasking/IMultitaskingContext.cs b/src/Files.App/Data/Contexts/Multitasking/IMultitaskingContext.cs index ad39ce4f39c6..d68068155de2 100644 --- a/src/Files.App/Data/Contexts/Multitasking/IMultitaskingContext.cs +++ b/src/Files.App/Data/Contexts/Multitasking/IMultitaskingContext.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.UserControls.TabBar; -using System.ComponentModel; - namespace Files.App.Data.Contexts { public interface IMultitaskingContext : INotifyPropertyChanged diff --git a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs index 8219ded4f7ef..e1ae0e50760e 100644 --- a/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs +++ b/src/Files.App/Data/Contexts/Multitasking/MultitaskingContext.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using System.Collections.Specialized; diff --git a/src/Files.App/Data/Contexts/Tags/ITagsContext.cs b/src/Files.App/Data/Contexts/Tags/ITagsContext.cs index faf38e436b49..8103d422f096 100644 --- a/src/Files.App/Data/Contexts/Tags/ITagsContext.cs +++ b/src/Files.App/Data/Contexts/Tags/ITagsContext.cs @@ -3,8 +3,8 @@ namespace Files.App.Data.Contexts { - interface ITagsContext: INotifyPropertyChanged - { + interface ITagsContext : INotifyPropertyChanged + { IEnumerable<(string path, bool isFolder)> TaggedItems { get; } - } + } } diff --git a/src/Files.App/Data/Contexts/Tags/TagsContext.cs b/src/Files.App/Data/Contexts/Tags/TagsContext.cs index 729e9f11a364..5ae3fe925207 100644 --- a/src/Files.App/Data/Contexts/Tags/TagsContext.cs +++ b/src/Files.App/Data/Contexts/Tags/TagsContext.cs @@ -6,7 +6,7 @@ namespace Files.App.Data.Contexts { sealed partial class TagsContext : ITagsContext - { + { private static readonly IReadOnlyList<(string path, bool isFolder)> _emptyTaggedItemsList = Enumerable.Empty<(string path, bool isFolder)>().ToImmutableList(); diff --git a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs index 1324463a973b..f5086d9b689d 100644 --- a/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs +++ b/src/Files.App/Data/Contracts/IAppearanceSettingsService.cs @@ -101,7 +101,7 @@ public interface IAppearanceSettingsService : IBaseSettingsService, INotifyPrope /// Gets or sets a value whether the toolbar should be displayed. /// bool ShowToolbar { get; set; } - + /// /// Gets or sets a value whether the tab actions button should be displayed. /// @@ -110,7 +110,7 @@ public interface IAppearanceSettingsService : IBaseSettingsService, INotifyPrope /// /// Gets or sets a value whether the shelf pane toggle button should be displayed. /// - bool ShowShelfPaneToggleButton{ get; set; } + bool ShowShelfPaneToggleButton { get; set; } /// diff --git a/src/Files.App/Data/Contracts/IApplicationSettingsService.cs b/src/Files.App/Data/Contracts/IApplicationSettingsService.cs index df7535e83b8e..a809120dd5c6 100644 --- a/src/Files.App/Data/Contracts/IApplicationSettingsService.cs +++ b/src/Files.App/Data/Contracts/IApplicationSettingsService.cs @@ -14,7 +14,7 @@ public interface IApplicationSettingsService : IBaseSettingsService /// Gets or sets a value indicating whether or not the user clicked the 'sponsor' prompt. /// bool HasClickedSponsorPrompt { get; set; } - + /// /// Gets or sets a value indicating whether or not to display a prompt when running the app as administrator. /// diff --git a/src/Files.App/Data/Contracts/ICompressArchiveModel.cs b/src/Files.App/Data/Contracts/ICompressArchiveModel.cs index 8c18047483c9..c1f0227c18ce 100644 --- a/src/Files.App/Data/Contracts/ICompressArchiveModel.cs +++ b/src/Files.App/Data/Contracts/ICompressArchiveModel.cs @@ -47,7 +47,7 @@ public interface ICompressArchiveModel /// 7zip archive splitting size. /// ArchiveSplittingSizes SplittingSize { get; } - + /// /// Number of CPU Threads to use. /// diff --git a/src/Files.App/Data/Contracts/IDevToolsSettingsService.cs b/src/Files.App/Data/Contracts/IDevToolsSettingsService.cs index 2148c8322722..b942dec691cb 100644 --- a/src/Files.App/Data/Contracts/IDevToolsSettingsService.cs +++ b/src/Files.App/Data/Contracts/IDevToolsSettingsService.cs @@ -9,7 +9,7 @@ public interface IDevToolsSettingsService : IBaseSettingsService, INotifyPropert /// Gets or sets a value when the Open in IDE button should be displayed on the status bar. /// OpenInIDEOption OpenInIDEOption { get; set; } - + /// /// Gets or sets the path of the chosen IDE. /// diff --git a/src/Files.App/Data/Contracts/IDialogService.cs b/src/Files.App/Data/Contracts/IDialogService.cs index 4c2d44c3ea14..b86216c2b95c 100644 --- a/src/Files.App/Data/Contracts/IDialogService.cs +++ b/src/Files.App/Data/Contracts/IDialogService.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; -using Files.App.Data.Enums; - namespace Files.App.Data.Contracts { /// diff --git a/src/Files.App/Data/Contracts/IInfoPaneSettingsService.cs b/src/Files.App/Data/Contracts/IInfoPaneSettingsService.cs index 687c995a417a..c32a1880632c 100644 --- a/src/Files.App/Data/Contracts/IInfoPaneSettingsService.cs +++ b/src/Files.App/Data/Contracts/IInfoPaneSettingsService.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.ComponentModel; - namespace Files.App.Data.Contracts { public interface IInfoPaneSettingsService : IBaseSettingsService, INotifyPropertyChanged diff --git a/src/Files.App/Data/Contracts/IResourcesService.cs b/src/Files.App/Data/Contracts/IResourcesService.cs index aa8874ec7198..d201307ea520 100644 --- a/src/Files.App/Data/Contracts/IResourcesService.cs +++ b/src/Files.App/Data/Contracts/IResourcesService.cs @@ -26,7 +26,7 @@ public interface IResourcesService /// /// void SetAppThemeAddressBarBackgroundColor(Color appThemeAddressBarBackgroundColor); - + /// /// Overrides the XAML resource for App.Theme.Toolbar.BackgroundBrush /// diff --git a/src/Files.App/Data/Contracts/IShellPage.cs b/src/Files.App/Data/Contracts/IShellPage.cs index fdf28822d652..86b25b89949f 100644 --- a/src/Files.App/Data/Contracts/IShellPage.cs +++ b/src/Files.App/Data/Contracts/IShellPage.cs @@ -65,7 +65,7 @@ public interface IShellPage : ITabBarItemContent, IMultiPaneInfo, IDisposable, I /// Navigates to the home page /// public void NavigateHome(); - + /// /// Navigates to the release notes page /// diff --git a/src/Files.App/Data/Contracts/IStartMenuService.cs b/src/Files.App/Data/Contracts/IStartMenuService.cs index f322d469291a..c5fb16d557b3 100644 --- a/src/Files.App/Data/Contracts/IStartMenuService.cs +++ b/src/Files.App/Data/Contracts/IStartMenuService.cs @@ -1,6 +1,4 @@ -using Files.Core.Storage; - -namespace Files.App.Data.Contracts +namespace Files.App.Data.Contracts { /// /// A service that manages actions associated with system Start Menu. diff --git a/src/Files.App/Data/Contracts/IStorageArchiveService.cs b/src/Files.App/Data/Contracts/IStorageArchiveService.cs index ee0ee550bfdc..ef4bfd6b949a 100644 --- a/src/Files.App/Data/Contracts/IStorageArchiveService.cs +++ b/src/Files.App/Data/Contracts/IStorageArchiveService.cs @@ -1,8 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Text; using SevenZip; +using System.Text; namespace Files.App.Data.Contracts { diff --git a/src/Files.App/Data/Contracts/ImagingService.cs b/src/Files.App/Data/Contracts/ImagingService.cs index 30d3dcd0a427..76fc1d0fc234 100644 --- a/src/Files.App/Data/Contracts/ImagingService.cs +++ b/src/Files.App/Data/Contracts/ImagingService.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.Core.Storage; -using Files.Core.Storage.Storables; using Files.Shared.Utils; using Windows.Storage.FileProperties; diff --git a/src/Files.App/Data/EventArguments/EventArrivedEventArgs.cs b/src/Files.App/Data/EventArguments/EventArrivedEventArgs.cs index 6b51012237f7..7e8052a69bde 100644 --- a/src/Files.App/Data/EventArguments/EventArrivedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/EventArrivedEventArgs.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.Management.Infrastructure; -using System; namespace Files.App.Data.EventArguments { diff --git a/src/Files.App/Data/EventArguments/PathBoxItemDroppedEventArgs.cs b/src/Files.App/Data/EventArguments/PathBoxItemDroppedEventArgs.cs index a2a997392c08..e9b2c2c71439 100644 --- a/src/Files.App/Data/EventArguments/PathBoxItemDroppedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/PathBoxItemDroppedEventArgs.cs @@ -1,9 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Views; using Files.Shared.Helpers; -using Microsoft.UI.Xaml.Controls; using Windows.ApplicationModel.DataTransfer; namespace Files.App.Data.EventArguments diff --git a/src/Files.App/Data/EventArguments/PathNavigationEventArgs.cs b/src/Files.App/Data/EventArguments/PathNavigationEventArgs.cs index d7e9dbd4420b..f44bd27aeb46 100644 --- a/src/Files.App/Data/EventArguments/PathNavigationEventArgs.cs +++ b/src/Files.App/Data/EventArguments/PathNavigationEventArgs.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Views; -using Microsoft.UI.Xaml.Controls; -using Windows.ApplicationModel.DataTransfer; - namespace Files.App.Data.EventArguments { public sealed class PathNavigationEventArgs diff --git a/src/Files.App/Data/EventArguments/SearchBoxQuerySubmittedEventArgs.cs b/src/Files.App/Data/EventArguments/SearchBoxQuerySubmittedEventArgs.cs index b63f96e4a938..a52f3154361d 100644 --- a/src/Files.App/Data/EventArguments/SearchBoxQuerySubmittedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/SearchBoxQuerySubmittedEventArgs.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Models; -using Microsoft.UI.Xaml.Controls; -using Windows.Foundation; - namespace Files.App.Data.EventArguments { public sealed class SearchBoxQuerySubmittedEventArgs diff --git a/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs b/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs index e484adee3f02..3583e3d46a5a 100644 --- a/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/SearchBoxTextChangedEventArgs.cs @@ -1,9 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Models; using Microsoft.UI.Xaml.Controls; -using Windows.Foundation; namespace Files.App.Data.EventArguments { diff --git a/src/Files.App/Data/EventArguments/SelectedTagChangedEventArgs.cs b/src/Files.App/Data/EventArguments/SelectedTagChangedEventArgs.cs index 9ab5193cfcc9..5501cb49223f 100644 --- a/src/Files.App/Data/EventArguments/SelectedTagChangedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/SelectedTagChangedEventArgs.cs @@ -3,5 +3,5 @@ namespace Files.App.Data.EventArguments { - public record SelectedTagChangedEventArgs(IEnumerable<(string path, bool isFolder)> Items); + public record SelectedTagChangedEventArgs(IEnumerable<(string path, bool isFolder)> Items); } diff --git a/src/Files.App/Data/EventArguments/SettingChangedEventArgs.cs b/src/Files.App/Data/EventArguments/SettingChangedEventArgs.cs index 9fc0238fefcc..d44e774d0ca5 100644 --- a/src/Files.App/Data/EventArguments/SettingChangedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/SettingChangedEventArgs.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; - namespace Files.App.Data.EventArguments { public sealed class SettingChangedEventArgs : EventArgs diff --git a/src/Files.App/Data/EventArguments/ToolbarQuerySubmittedEventArgs.cs b/src/Files.App/Data/EventArguments/ToolbarQuerySubmittedEventArgs.cs index 3e6585271eb3..8e83c9b4f6f9 100644 --- a/src/Files.App/Data/EventArguments/ToolbarQuerySubmittedEventArgs.cs +++ b/src/Files.App/Data/EventArguments/ToolbarQuerySubmittedEventArgs.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Views; -using Microsoft.UI.Xaml.Controls; -using Windows.ApplicationModel.DataTransfer; - namespace Files.App.Data.EventArguments { public sealed class ToolbarQuerySubmittedEventArgs diff --git a/src/Files.App/Data/Factories/SecurityAdvancedAccessControlItemFactory.cs b/src/Files.App/Data/Factories/SecurityAdvancedAccessControlItemFactory.cs index eefb0642b2ba..cfee423820e1 100644 --- a/src/Files.App/Data/Factories/SecurityAdvancedAccessControlItemFactory.cs +++ b/src/Files.App/Data/Factories/SecurityAdvancedAccessControlItemFactory.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using System.Collections.Generic; -using System.Collections.ObjectModel; - namespace Files.App.Data.Factories { public static class SecurityAdvancedAccessControlItemFactory diff --git a/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs b/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs index 836ff7ed3ea8..361766242fe7 100644 --- a/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs +++ b/src/Files.App/Data/Factories/ShellContextFlyoutHelper.cs @@ -262,8 +262,8 @@ [new ListedItem(null) { ItemPath = path }], (showSendToMenu || !UserSettingsService.GeneralSettingsService.ShowSendToMenu)) shellMenuItems.Remove(sendToItem); - var turnOnBitLocker = shellMenuItems.FirstOrDefault(x => - x.Tag is Win32ContextMenuItem menuItem && + var turnOnBitLocker = shellMenuItems.FirstOrDefault(x => + x.Tag is Win32ContextMenuItem menuItem && (menuItem.CommandString?.StartsWith("encrypt-bde") ?? false)); if (turnOnBitLocker is not null) @@ -384,8 +384,8 @@ x.Tag is Win32ContextMenuItem menuItem && { AddItemsToMainMenu(itemContextMenuFlyout.SecondaryCommands, item); } - else if (itemContextMenuFlyout.SecondaryCommands.FirstOrDefault(x => x is AppBarButton appBarButton - && appBarButton.Tag as string == "ItemOverflow") is AppBarButton overflowItem) + else if (itemContextMenuFlyout.SecondaryCommands.FirstOrDefault(x => x is AppBarButton appBarButton + && appBarButton.Tag as string == "ItemOverflow") is AppBarButton overflowItem) { AddItemsToOverflowMenu(overflowItem, item); } diff --git a/src/Files.App/Data/Items/AccessControlPrincipal.cs b/src/Files.App/Data/Items/AccessControlPrincipal.cs index bb6757957bcc..4da0dc3ebcdd 100644 --- a/src/Files.App/Data/Items/AccessControlPrincipal.cs +++ b/src/Files.App/Data/Items/AccessControlPrincipal.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Windows.Win32; -using Windows.Win32.Foundation; using Windows.Win32.Security; namespace Files.App.Data.Items @@ -87,7 +86,7 @@ public AccessControlPrincipal(string sid) // Get account name and domain bResult = PInvoke.LookupAccountSid(string.Empty, lpSid, lpName, ref cchName, lpDomain, ref cchDomainName, out var snu); - if(!bResult) + if (!bResult) return; PrincipalType = snu switch diff --git a/src/Files.App/Data/Items/ActionWithParameterItem.cs b/src/Files.App/Data/Items/ActionWithParameterItem.cs index 921191a30cec..63ea8691b015 100644 --- a/src/Files.App/Data/Items/ActionWithParameterItem.cs +++ b/src/Files.App/Data/Items/ActionWithParameterItem.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Text.Json.Serialization; - namespace Files.App.Data.Items { [Serializable] diff --git a/src/Files.App/Data/Items/EncodingItem.cs b/src/Files.App/Data/Items/EncodingItem.cs index 24c79bc35bf2..51ec61b121e9 100644 --- a/src/Files.App/Data/Items/EncodingItem.cs +++ b/src/Files.App/Data/Items/EncodingItem.cs @@ -5,36 +5,36 @@ namespace Files.App.Data.Items { - /// - /// Represents a text encoding in the application. - /// - public sealed class EncodingItem - { + /// + /// Represents a text encoding in the application. + /// + public sealed class EncodingItem + { - public Encoding? Encoding { get; set; } + public Encoding? Encoding { get; set; } - /// - /// Gets the encoding name. e.g. English (United States) - /// - public string Name { get; set; } + /// + /// Gets the encoding name. e.g. English (United States) + /// + public string Name { get; set; } - /// - /// Initializes a new instance of the class. - /// - /// The code of the language. - public EncodingItem(string? code) - { - if (string.IsNullOrEmpty(code)) - { - Encoding = null; - Name = Strings.Default.GetLocalizedResource(); - } - else - { - Encoding = Encoding.GetEncoding(code); - Name = Encoding.EncodingName; - } - } + /// + /// Initializes a new instance of the class. + /// + /// The code of the language. + public EncodingItem(string? code) + { + if (string.IsNullOrEmpty(code)) + { + Encoding = null; + Name = Strings.Default.GetLocalizedResource(); + } + else + { + Encoding = Encoding.GetEncoding(code); + Name = Encoding.EncodingName; + } + } public EncodingItem(Encoding encoding, string name) { @@ -76,5 +76,5 @@ public EncodingItem(Encoding encoding, string name) .ToArray(); public override string ToString() => Name; - } + } } diff --git a/src/Files.App/Data/Items/WindowEx.cs b/src/Files.App/Data/Items/WindowEx.cs index b19f3ba449f8..b00cb0565279 100644 --- a/src/Files.App/Data/Items/WindowEx.cs +++ b/src/Files.App/Data/Items/WindowEx.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Composition.SystemBackdrops; using Microsoft.UI.Windowing; using Microsoft.UI.Xaml; using System.Runtime.InteropServices; diff --git a/src/Files.App/Data/Messages/FileSystemDialogOptionChangedMessage.cs b/src/Files.App/Data/Messages/FileSystemDialogOptionChangedMessage.cs index 2de95be9dcc7..218418245c0a 100644 --- a/src/Files.App/Data/Messages/FileSystemDialogOptionChangedMessage.cs +++ b/src/Files.App/Data/Messages/FileSystemDialogOptionChangedMessage.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using CommunityToolkit.Mvvm.Messaging.Messages; -using Files.App.ViewModels.Dialogs.FileSystemDialog; namespace Files.App.Data.Messages { diff --git a/src/Files.App/Data/Models/AddItemDialogResultModel.cs b/src/Files.App/Data/Models/AddItemDialogResultModel.cs index 568b3bcdda2d..721458170cf3 100644 --- a/src/Files.App/Data/Models/AddItemDialogResultModel.cs +++ b/src/Files.App/Data/Models/AddItemDialogResultModel.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.Shared; - namespace Files.App.Data.Models { /// diff --git a/src/Files.App/Data/Models/CompressArchiveModel.cs b/src/Files.App/Data/Models/CompressArchiveModel.cs index cb26f874e0e1..b3f63d3d1618 100644 --- a/src/Files.App/Data/Models/CompressArchiveModel.cs +++ b/src/Files.App/Data/Models/CompressArchiveModel.cs @@ -108,7 +108,7 @@ public IProgress Progress /// public CancellationToken CancellationToken { get; set; } - + /// public int CPUThreads { get; set; } diff --git a/src/Files.App/Data/Models/CurrentInstanceViewModel.cs b/src/Files.App/Data/Models/CurrentInstanceViewModel.cs index 3eae3ce7ba9a..ffc6a977f291 100644 --- a/src/Files.App/Data/Models/CurrentInstanceViewModel.cs +++ b/src/Files.App/Data/Models/CurrentInstanceViewModel.cs @@ -52,7 +52,7 @@ public bool IsPageTypeNotHome OnPropertyChanged(nameof(CanCopyPathInPage)); } } - + private bool isPageTypeReleaseNotes = false; public bool IsPageTypeReleaseNotes { @@ -64,7 +64,7 @@ public bool IsPageTypeReleaseNotes OnPropertyChanged(nameof(CanCopyPathInPage)); } } - + private bool isPageTypeSettings = false; public bool IsPageTypeSettings { diff --git a/src/Files.App/Data/Models/DirectoryPropertiesViewModel.cs b/src/Files.App/Data/Models/DirectoryPropertiesViewModel.cs index 3be81f4b6587..d6fd99840b3e 100644 --- a/src/Files.App/Data/Models/DirectoryPropertiesViewModel.cs +++ b/src/Files.App/Data/Models/DirectoryPropertiesViewModel.cs @@ -41,8 +41,8 @@ public int SelectedBranchIndex get => _SelectedBranchIndex; set { - if (SetProperty(ref _SelectedBranchIndex, value) && - value != -1 && + if (SetProperty(ref _SelectedBranchIndex, value) && + value != -1 && (value != ACTIVE_BRANCH_INDEX || !_ShowLocals) && value < Branches.Count) { @@ -90,8 +90,8 @@ public bool ShowOpenInIDEButton } } - public ObservableCollection Branches => _ShowLocals - ? _localBranches + public ObservableCollection Branches => _ShowLocals + ? _localBranches : _remoteBranches; public EventHandler? CheckoutRequested; @@ -125,7 +125,7 @@ ContentPageContext.ShellPage is not null && : null; _gitRepositoryPath = repositoryPath; - + // Change ShowLocals value only if branches flyout is closed if (!IsBranchesFlyoutExpanded) ShowLocals = true; diff --git a/src/Files.App/Data/Models/DisposableArray.cs b/src/Files.App/Data/Models/DisposableArray.cs index 1125fdacc6c7..840e5ced1889 100644 --- a/src/Files.App/Data/Models/DisposableArray.cs +++ b/src/Files.App/Data/Models/DisposableArray.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.Shared.Extensions; - namespace Files.App.Data.Models { public sealed partial class DisposableArray : FreeableStore diff --git a/src/Files.App/Data/Models/DrivesViewModel.cs b/src/Files.App/Data/Models/DrivesViewModel.cs index 4e1b13cf161b..cf1976d82266 100644 --- a/src/Files.App/Data/Models/DrivesViewModel.cs +++ b/src/Files.App/Data/Models/DrivesViewModel.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Files.App.Services.SizeProvider; -using Files.Core.Storage.Storables; using Microsoft.Extensions.Logging; using System.IO; diff --git a/src/Files.App/Data/Models/GitItemModel.cs b/src/Files.App/Data/Models/GitItemModel.cs index a71f4740d3a4..a82cd9d79e38 100644 --- a/src/Files.App/Data/Models/GitItemModel.cs +++ b/src/Files.App/Data/Models/GitItemModel.cs @@ -15,7 +15,7 @@ internal sealed class GitItemModel /// This is often showed as A(Added), D(Deleted), M(Modified), U(Untracked) in VS Code. /// public ChangeKind? Status { get; init; } - + /// /// Gets or initializes file change kind icon /// diff --git a/src/Files.App/Data/Models/PinnedFoldersManager.cs b/src/Files.App/Data/Models/PinnedFoldersManager.cs index 3b1c8b11c9ba..04ce0eb23eb3 100644 --- a/src/Files.App/Data/Models/PinnedFoldersManager.cs +++ b/src/Files.App/Data/Models/PinnedFoldersManager.cs @@ -3,7 +3,6 @@ using System.Collections.Specialized; using System.IO; -using System.Text.Json.Serialization; namespace Files.App.Data.Models { diff --git a/src/Files.App/Data/Models/SelectedItemsPropertiesViewModel.cs b/src/Files.App/Data/Models/SelectedItemsPropertiesViewModel.cs index 18ac59ddf185..ace192cbf17b 100644 --- a/src/Files.App/Data/Models/SelectedItemsPropertiesViewModel.cs +++ b/src/Files.App/Data/Models/SelectedItemsPropertiesViewModel.cs @@ -635,7 +635,7 @@ public bool ShortcutItemArgumentsVisibility get => shortcutItemArgumentsVisibility; set => SetProperty(ref shortcutItemArgumentsVisibility, value); } - + private bool shortcutItemWindowArgsVisibility = false; public bool ShortcutItemWindowArgsVisibility { diff --git a/src/Files.App/Data/Models/TagViewModel.cs b/src/Files.App/Data/Models/TagViewModel.cs index 598fd5a0478f..cdcc36a8ed58 100644 --- a/src/Files.App/Data/Models/TagViewModel.cs +++ b/src/Files.App/Data/Models/TagViewModel.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Text.Json.Serialization; - namespace Files.App.Data.Models { [Serializable] diff --git a/src/Files.App/Data/Parameters/ColumnParam.cs b/src/Files.App/Data/Parameters/ColumnParam.cs index 65753d883b01..2ce6e0e8f55d 100644 --- a/src/Files.App/Data/Parameters/ColumnParam.cs +++ b/src/Files.App/Data/Parameters/ColumnParam.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Views; -using Files.App.Views.Layouts; using Microsoft.UI.Xaml.Controls; namespace Files.App.Data.Parameters diff --git a/src/Files.App/Data/Parameters/TabBarItemParameter.cs b/src/Files.App/Data/Parameters/TabBarItemParameter.cs index 3443a3492c25..8c4c44f6949c 100644 --- a/src/Files.App/Data/Parameters/TabBarItemParameter.cs +++ b/src/Files.App/Data/Parameters/TabBarItemParameter.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Text.Json; - namespace Files.App.Data.Parameters { public sealed class TabBarItemParameter diff --git a/src/Files.App/Data/TemplateSelectors/FileSystemDialogItemSelector.cs b/src/Files.App/Data/TemplateSelectors/FileSystemDialogItemSelector.cs index 49e2009f474d..6b5b82df50be 100644 --- a/src/Files.App/Data/TemplateSelectors/FileSystemDialogItemSelector.cs +++ b/src/Files.App/Data/TemplateSelectors/FileSystemDialogItemSelector.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs.FileSystemDialog; using Microsoft.UI.Xaml; namespace Files.App.Data.TemplateSelectors diff --git a/src/Files.App/Dialogs/AddBranchDialog.xaml.cs b/src/Files.App/Dialogs/AddBranchDialog.xaml.cs index 420f089419f9..0ced3d074fc2 100644 --- a/src/Files.App/Dialogs/AddBranchDialog.xaml.cs +++ b/src/Files.App/Dialogs/AddBranchDialog.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/Files.App/Dialogs/AddItemDialog.xaml.cs b/src/Files.App/Dialogs/AddItemDialog.xaml.cs index f230d7ed0ad6..a68da84fed86 100644 --- a/src/Files.App/Dialogs/AddItemDialog.xaml.cs +++ b/src/Files.App/Dialogs/AddItemDialog.xaml.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; -using Files.App.ViewModels.Dialogs.AddItemDialog; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/Files.App/Dialogs/CloneRepoDialog.xaml.cs b/src/Files.App/Dialogs/CloneRepoDialog.xaml.cs index bdfb0dd9a2c1..e3d7d92f563f 100644 --- a/src/Files.App/Dialogs/CloneRepoDialog.xaml.cs +++ b/src/Files.App/Dialogs/CloneRepoDialog.xaml.cs @@ -3,7 +3,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using Windows.ApplicationModel.DataTransfer; namespace Files.App.Dialogs { diff --git a/src/Files.App/Dialogs/CreateShortcutDialog.xaml.cs b/src/Files.App/Dialogs/CreateShortcutDialog.xaml.cs index 1909a21cd75e..086627286d85 100644 --- a/src/Files.App/Dialogs/CreateShortcutDialog.xaml.cs +++ b/src/Files.App/Dialogs/CreateShortcutDialog.xaml.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Data; diff --git a/src/Files.App/Dialogs/DecompressArchiveDialog.xaml.cs b/src/Files.App/Dialogs/DecompressArchiveDialog.xaml.cs index c795de3221fb..6f260b9325a9 100644 --- a/src/Files.App/Dialogs/DecompressArchiveDialog.xaml.cs +++ b/src/Files.App/Dialogs/DecompressArchiveDialog.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using System.Text; diff --git a/src/Files.App/Dialogs/DynamicDialog.xaml.cs b/src/Files.App/Dialogs/DynamicDialog.xaml.cs index 73277c28940e..73e5fc122692 100644 --- a/src/Files.App/Dialogs/DynamicDialog.xaml.cs +++ b/src/Files.App/Dialogs/DynamicDialog.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/Files.App/Dialogs/ElevateConfirmDialog.xaml.cs b/src/Files.App/Dialogs/ElevateConfirmDialog.xaml.cs index a9360045a62a..88069e9170bc 100644 --- a/src/Files.App/Dialogs/ElevateConfirmDialog.xaml.cs +++ b/src/Files.App/Dialogs/ElevateConfirmDialog.xaml.cs @@ -1,11 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using System; -using System.Threading.Tasks; namespace Files.App.Dialogs { diff --git a/src/Files.App/Dialogs/ReorderSidebarItemsDialog.xaml.cs b/src/Files.App/Dialogs/ReorderSidebarItemsDialog.xaml.cs index 1f52db5576dc..b5be41005632 100644 --- a/src/Files.App/Dialogs/ReorderSidebarItemsDialog.xaml.cs +++ b/src/Files.App/Dialogs/ReorderSidebarItemsDialog.xaml.cs @@ -2,15 +2,9 @@ // Licensed under the MIT License. using CommunityToolkit.WinUI; -using Files.App.Data.Items; -using Files.App.Extensions; -using Files.App.ViewModels.Dialogs; -using Files.App.ViewModels.Dialogs; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; -using System; -using System.Threading.Tasks; using Windows.ApplicationModel.DataTransfer; namespace Files.App.Dialogs @@ -59,7 +53,7 @@ private void ListViewItem_DragOver(object sender, DragEventArgs e) if ((sender as Grid)?.DataContext is not LocationItem locationItem) return; var deferral = e.GetDeferral(); - + if ((e.DataView.Properties["sourceLocationItem"] as Grid)?.DataContext is LocationItem sourceLocationItem) { DragOver_SetCaptions(sourceLocationItem, locationItem, e); diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml.cs b/src/Files.App/Dialogs/SettingsDialog.xaml.cs index 27ba9a61b38a..6bb9b809385d 100644 --- a/src/Files.App/Dialogs/SettingsDialog.xaml.cs +++ b/src/Files.App/Dialogs/SettingsDialog.xaml.cs @@ -37,7 +37,7 @@ public void NavigateTo(SettingsNavigationParams navParams) ); if (oldSelection is not null) oldSelection.IsSelected = false; - + MainSettingsNavigationView.SelectedItem = targetSection; } diff --git a/src/Files.App/Extensions/EnumExtensions.cs b/src/Files.App/Extensions/EnumExtensions.cs index 3d5a4b7ecbde..ab3759d85da3 100644 --- a/src/Files.App/Extensions/EnumExtensions.cs +++ b/src/Files.App/Extensions/EnumExtensions.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; using System.Reflection; namespace Files.App.Extensions diff --git a/src/Files.App/Extensions/ImageSourceExtensions.cs b/src/Files.App/Extensions/ImageSourceExtensions.cs index a05692d37312..313e1d8dd0c1 100644 --- a/src/Files.App/Extensions/ImageSourceExtensions.cs +++ b/src/Files.App/Extensions/ImageSourceExtensions.cs @@ -1,11 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; using System.IO; using System.Runtime.InteropServices.WindowsRuntime; -using System.Threading; -using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.Streams; diff --git a/src/Files.App/Extensions/LocalizationExtensions.cs b/src/Files.App/Extensions/LocalizationExtensions.cs index 6331b13126a2..ce7862811e6c 100644 --- a/src/Files.App/Extensions/LocalizationExtensions.cs +++ b/src/Files.App/Extensions/LocalizationExtensions.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Services; - namespace Files.App.Extensions { /// diff --git a/src/Files.App/Extensions/MessageFormatExtensions.cs b/src/Files.App/Extensions/MessageFormatExtensions.cs index 1de281ff2799..a0ac3702ac30 100644 --- a/src/Files.App/Extensions/MessageFormatExtensions.cs +++ b/src/Files.App/Extensions/MessageFormatExtensions.cs @@ -2,9 +2,9 @@ // Licensed under the MIT License. using Jeffijoe.MessageFormat; +using Microsoft.Extensions.Logging; using Microsoft.Windows.ApplicationModel.Resources; using System.Globalization; -using Microsoft.Extensions.Logging; namespace Files.App.Extensions { diff --git a/src/Files.App/Extensions/ShellNewEntryExtensions.cs b/src/Files.App/Extensions/ShellNewEntryExtensions.cs index e09ad6e7fb2f..00cedd074d9b 100644 --- a/src/Files.App/Extensions/ShellNewEntryExtensions.cs +++ b/src/Files.App/Extensions/ShellNewEntryExtensions.cs @@ -1,15 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils; -using Files.App.Helpers; -using Files.App.Utils.Shell; -using Files.Shared; -using Files.Shared.Extensions; -using System; -using System.Collections.Generic; using System.IO; -using System.Threading.Tasks; using Windows.Storage; namespace Files.App.Extensions diff --git a/src/Files.App/Extensions/Win32FindDataExtensions.cs b/src/Files.App/Extensions/Win32FindDataExtensions.cs index 1e3d9a8ba927..3971145beac6 100644 --- a/src/Files.App/Extensions/Win32FindDataExtensions.cs +++ b/src/Files.App/Extensions/Win32FindDataExtensions.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using static Files.App.Helpers.Win32Helper; - namespace Files.App.Extensions { public static class Win32FindDataExtensions diff --git a/src/Files.App/Helpers/Application/AppToastNotificationHelper.cs b/src/Files.App/Helpers/Application/AppToastNotificationHelper.cs index e34ce4c4df26..a73201c093bd 100644 --- a/src/Files.App/Helpers/Application/AppToastNotificationHelper.cs +++ b/src/Files.App/Helpers/Application/AppToastNotificationHelper.cs @@ -1,10 +1,5 @@ using Microsoft.Windows.AppNotifications; using Microsoft.Windows.AppNotifications.Builder; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Files.App.Helpers.Application { diff --git a/src/Files.App/Helpers/CollectionDebugView.cs b/src/Files.App/Helpers/CollectionDebugView.cs index 6ad43496debe..11a933c85ac9 100644 --- a/src/Files.App/Helpers/CollectionDebugView.cs +++ b/src/Files.App/Helpers/CollectionDebugView.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; -using System.Collections.Generic; -using System.Diagnostics; - namespace Files.App.Helpers { internal sealed class CollectionDebugView diff --git a/src/Files.App/Helpers/CredentialsHelpers.cs b/src/Files.App/Helpers/CredentialsHelpers.cs index 334dd752200c..10d3b3bc1412 100644 --- a/src/Files.App/Helpers/CredentialsHelpers.cs +++ b/src/Files.App/Helpers/CredentialsHelpers.cs @@ -1,5 +1,4 @@ -using System.Runtime.InteropServices; -using Windows.Security.Credentials; +using Windows.Security.Credentials; namespace Files.App.Helpers { diff --git a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs index 3608b91bc045..a6468fbafaa9 100644 --- a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs +++ b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs @@ -424,7 +424,7 @@ await commands.OpenSettings.ExecuteAsync( new SettingsNavigationParams() { PageKind = SettingsPageKind.DevToolsPage } ); } - + public static async Task ShowFor_CannotCloneRepo(string exception) { var dialog = new DynamicDialog(new DynamicDialogViewModel() diff --git a/src/Files.App/Helpers/Environment/PackageHelper.cs b/src/Files.App/Helpers/Environment/PackageHelper.cs index bfd9712fd699..f9c54130ce64 100644 --- a/src/Files.App/Helpers/Environment/PackageHelper.cs +++ b/src/Files.App/Helpers/Environment/PackageHelper.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; -using System.Diagnostics; -using System.Threading.Tasks; using Windows.System; namespace Files.App.Helpers diff --git a/src/Files.App/Helpers/IntervalSampler.cs b/src/Files.App/Helpers/IntervalSampler.cs index e9c64671440f..1518f4c0aa73 100644 --- a/src/Files.App/Helpers/IntervalSampler.cs +++ b/src/Files.App/Helpers/IntervalSampler.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; - namespace Files.App.Helpers { internal sealed class IntervalSampler diff --git a/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs b/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs index 2936632cf414..83c5ebe14eaa 100644 --- a/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs +++ b/src/Files.App/Helpers/Layout/AdaptiveLayoutHelpers.cs @@ -93,7 +93,7 @@ static bool IsImage(ListedItem item) static bool IsMedia(ListedItem item) => !string.IsNullOrEmpty(item.FileExtension) - && (FileExtensionHelpers.IsAudioFile(item.FileExtension) + && (FileExtensionHelpers.IsAudioFile(item.FileExtension) || FileExtensionHelpers.IsVideoFile(item.FileExtension)); } diff --git a/src/Files.App/Helpers/Layout/LayoutPreferencesDatabaseManager.cs b/src/Files.App/Helpers/Layout/LayoutPreferencesDatabaseManager.cs index 5e9699102c03..14ae02bd94ed 100644 --- a/src/Files.App/Helpers/Layout/LayoutPreferencesDatabaseManager.cs +++ b/src/Files.App/Helpers/Layout/LayoutPreferencesDatabaseManager.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Diagnostics.CodeAnalysis; - namespace Files.App.Helpers { /// diff --git a/src/Files.App/Helpers/NaturalStringComparer.cs b/src/Files.App/Helpers/NaturalStringComparer.cs index 399ee10bcbbe..6108d604c0b4 100644 --- a/src/Files.App/Helpers/NaturalStringComparer.cs +++ b/src/Files.App/Helpers/NaturalStringComparer.cs @@ -21,47 +21,47 @@ public static IComparer GetForProcessor() /// private sealed class NaturalComparer : IComparer, IComparer, IComparer> { - private readonly StringComparison stringComparison; - - public NaturalComparer(StringComparison stringComparison = StringComparison.Ordinal) - { - this.stringComparison = stringComparison; - } - - public int Compare(object? x, object? y) - { - if (x == y) return 0; - if (x == null) return -1; - if (y == null) return 1; - - return x switch - { - string x1 when y is string y1 => Compare(x1.AsSpan(), y1.AsSpan(), stringComparison), - IComparable comparable => comparable.CompareTo(y), - _ => StringComparer.FromComparison(stringComparison).Compare(x, y) - }; - } - - public int Compare(string? x, string? y) - { - if (ReferenceEquals(x, y)) return 0; - if (x is null) return -1; - if (y is null) return 1; - - return Compare(x.AsSpan(), y.AsSpan(), stringComparison); - } - - public int Compare(ReadOnlySpan x, ReadOnlySpan y) - { - return Compare(x, y, stringComparison); - } - - public int Compare(ReadOnlyMemory x, ReadOnlyMemory y) - { - return Compare(x.Span, y.Span, stringComparison); - } - - public static int Compare(ReadOnlySpan x, ReadOnlySpan y, StringComparison stringComparison) + private readonly StringComparison stringComparison; + + public NaturalComparer(StringComparison stringComparison = StringComparison.Ordinal) + { + this.stringComparison = stringComparison; + } + + public int Compare(object? x, object? y) + { + if (x == y) return 0; + if (x == null) return -1; + if (y == null) return 1; + + return x switch + { + string x1 when y is string y1 => Compare(x1.AsSpan(), y1.AsSpan(), stringComparison), + IComparable comparable => comparable.CompareTo(y), + _ => StringComparer.FromComparison(stringComparison).Compare(x, y) + }; + } + + public int Compare(string? x, string? y) + { + if (ReferenceEquals(x, y)) return 0; + if (x is null) return -1; + if (y is null) return 1; + + return Compare(x.AsSpan(), y.AsSpan(), stringComparison); + } + + public int Compare(ReadOnlySpan x, ReadOnlySpan y) + { + return Compare(x, y, stringComparison); + } + + public int Compare(ReadOnlyMemory x, ReadOnlyMemory y) + { + return Compare(x.Span, y.Span, stringComparison); + } + + public static int Compare(ReadOnlySpan x, ReadOnlySpan y, StringComparison stringComparison) { // Handle file extensions specially int xExtPos = GetExtensionPosition(x); @@ -70,9 +70,9 @@ public static int Compare(ReadOnlySpan x, ReadOnlySpan y, StringComp // If both have extensions, compare the names first if (xExtPos >= 0 && yExtPos >= 0) { - var xName = x.Slice(0, xExtPos); + var xName = x.Slice(0, xExtPos); var yName = y.Slice(0, yExtPos); - + int nameCompare = CompareWithoutExtension(xName, yName, stringComparison); if (nameCompare != 0) return nameCompare; @@ -143,35 +143,35 @@ private static bool IsIgnorableSeparator(ReadOnlySpan span, int index) } - private static ReadOnlySpan GetNumber(ReadOnlySpan span, out ReadOnlySpan number) - { - var i = 0; - while (i < span.Length && char.IsDigit(span[i])) - { - i++; - } + private static ReadOnlySpan GetNumber(ReadOnlySpan span, out ReadOnlySpan number) + { + var i = 0; + while (i < span.Length && char.IsDigit(span[i])) + { + i++; + } - number = span.Slice(0, i); - return span.Slice(i); - } + number = span.Slice(0, i); + return span.Slice(i); + } - private static int CompareNumValues(ReadOnlySpan numValue1, ReadOnlySpan numValue2) - { - var num1AsSpan = numValue1.TrimStart('0'); - var num2AsSpan = numValue2.TrimStart('0'); + private static int CompareNumValues(ReadOnlySpan numValue1, ReadOnlySpan numValue2) + { + var num1AsSpan = numValue1.TrimStart('0'); + var num2AsSpan = numValue2.TrimStart('0'); - if (num1AsSpan.Length < num2AsSpan.Length) return -1; + if (num1AsSpan.Length < num2AsSpan.Length) return -1; - if (num1AsSpan.Length > num2AsSpan.Length) return 1; + if (num1AsSpan.Length > num2AsSpan.Length) return 1; - var compareResult = num1AsSpan.CompareTo(num2AsSpan, StringComparison.Ordinal); + var compareResult = num1AsSpan.CompareTo(num2AsSpan, StringComparison.Ordinal); - if (compareResult != 0) return Math.Sign(compareResult); + if (compareResult != 0) return Math.Sign(compareResult); - if (numValue2.Length == numValue1.Length) return compareResult; + if (numValue2.Length == numValue1.Length) return compareResult; - return numValue2.Length < numValue1.Length ? -1 : 1; // "033" < "33" == true - } + return numValue2.Length < numValue1.Length ? -1 : 1; // "033" < "33" == true + } } } } diff --git a/src/Files.App/Helpers/Navigation/MultitaskingTabsHelpers.cs b/src/Files.App/Helpers/Navigation/MultitaskingTabsHelpers.cs index 2e4b347fddd9..f24bc2d5a97f 100644 --- a/src/Files.App/Helpers/Navigation/MultitaskingTabsHelpers.cs +++ b/src/Files.App/Helpers/Navigation/MultitaskingTabsHelpers.cs @@ -1,11 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.UserControls.TabBar; -using Files.App.ViewModels; -using System.Linq; -using System.Threading.Tasks; - namespace Files.App.Helpers { public static class MultitaskingTabsHelpers @@ -40,7 +35,7 @@ public static void CloseOtherTabs(TabBarItem clickedTab, ITabBar multitaskingCon tabs.Where((t) => t != clickedTab).ToList().ForEach(tab => multitaskingControl.CloseTab(tab)); } } - + public static void CloseAllTabs(ITabBar multitaskingControl) { if (multitaskingControl is not null) diff --git a/src/Files.App/Helpers/Navigation/NavigationHelpers.cs b/src/Files.App/Helpers/Navigation/NavigationHelpers.cs index 079f61a77340..0723bc313e09 100644 --- a/src/Files.App/Helpers/Navigation/NavigationHelpers.cs +++ b/src/Files.App/Helpers/Navigation/NavigationHelpers.cs @@ -198,7 +198,7 @@ private static async Task UpdateTabInfoAsync(TabBarItem tabItem, object navigati iconSource.ImageSource = new BitmapImage(new Uri(Constants.FluentIconsPaths.HomeIcon)); } else if (currentPath == "ReleaseNotes") - { + { tabLocationHeader = Strings.ReleaseNotes.GetLocalizedResource(); iconSource.ImageSource = new BitmapImage(new Uri(AppLifecycleHelper.AppIconPath)); } @@ -489,7 +489,8 @@ public static async Task OpenPath(string path, IShellPage associatedInstan opened = await OpenFile(path, associatedInstance, shortcutInfo, openViaApplicationPicker, args); break; - }; + } + ; if (opened.ErrorCode == FileSystemStatusCode.NotFound && !openSilent) { diff --git a/src/Files.App/Helpers/Navigation/NavigationInteractionTracker.cs b/src/Files.App/Helpers/Navigation/NavigationInteractionTracker.cs index a10a0c268041..5c6886a794cf 100644 --- a/src/Files.App/Helpers/Navigation/NavigationInteractionTracker.cs +++ b/src/Files.App/Helpers/Navigation/NavigationInteractionTracker.cs @@ -221,7 +221,7 @@ public void IdleStateEntered(InteractionTracker sender, InteractionTrackerIdleSt } } else - { + { _parent._tracker.TryUpdatePositionWithAnimation(_returnAnimation); } _shouldBounceBack = false; diff --git a/src/Files.App/Helpers/PathNormalization.cs b/src/Files.App/Helpers/PathNormalization.cs index 58b55ff76b92..b992063950c6 100644 --- a/src/Files.App/Helpers/PathNormalization.cs +++ b/src/Files.App/Helpers/PathNormalization.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.Extensions.Logging; -using System; using System.IO; namespace Files.App.Helpers diff --git a/src/Files.App/Helpers/RegexHelpers.cs b/src/Files.App/Helpers/RegexHelpers.cs index 79b19c69ef5b..309dfb6f7785 100644 --- a/src/Files.App/Helpers/RegexHelpers.cs +++ b/src/Files.App/Helpers/RegexHelpers.cs @@ -9,22 +9,22 @@ public static partial class RegexHelpers { [GeneratedRegex(@"\w:\w")] public static partial Regex AlternateStream(); - + [GeneratedRegex("(?<=^[^\"]*(?:\"[^\"]*\"[^\"]*)*) (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")] public static partial Regex SpaceSplit(); - + [GeneratedRegex(@"^\\\\\?\\[^\\]*\\?")] public static partial Regex WindowsPath(); - + [GeneratedRegex(@"^[A-Z]:\\\$Recycle\.Bin\\", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] public static partial Regex RecycleBinPath(); - + [GeneratedRegex(@"^(?!/)(?!.*//)[^\000-\037\177 ~^:?*[]+(?!.*\.\.)(?!.*@\{)(?!.*\\)(? diff --git a/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs b/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs index 7e878896a3f9..93b28ad04429 100644 --- a/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs +++ b/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs @@ -14,9 +14,7 @@ using Vanara.PInvoke; using Windows.System; using Windows.Win32; -using Windows.Win32.Foundation; using Windows.Win32.Storage.FileSystem; -using static Vanara.PInvoke.Kernel32; using COMPRESSION_FORMAT = Windows.Win32.Storage.FileSystem.COMPRESSION_FORMAT; using HRESULT = Vanara.PInvoke.HRESULT; using HWND = Vanara.PInvoke.HWND; diff --git a/src/Files.App/Helpers/Win32/Win32Helper.WindowManagement.cs b/src/Files.App/Helpers/Win32/Win32Helper.WindowManagement.cs index b502d87c1f70..996c7af3bed7 100644 --- a/src/Files.App/Helpers/Win32/Win32Helper.WindowManagement.cs +++ b/src/Files.App/Helpers/Win32/Win32Helper.WindowManagement.cs @@ -1,9 +1,6 @@ // Copyright (c) 2024 Files Community // Licensed under the MIT License. See the LICENSE. -using Microsoft.UI.Input; -using Microsoft.UI.Xaml; -using System.Reflection; using System.Runtime.InteropServices; using Windows.Win32; using Windows.Win32.UI.WindowsAndMessaging; diff --git a/src/Files.App/Helpers/Xaml/DependencyObjectHelpers.cs b/src/Files.App/Helpers/Xaml/DependencyObjectHelpers.cs index 8924da55ba44..938bf6917776 100644 --- a/src/Files.App/Helpers/Xaml/DependencyObjectHelpers.cs +++ b/src/Files.App/Helpers/Xaml/DependencyObjectHelpers.cs @@ -3,8 +3,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media; -using System; -using System.Collections.Generic; using System.Reflection; namespace Files.App.Helpers diff --git a/src/Files.App/MainWindow.xaml.cs b/src/Files.App/MainWindow.xaml.cs index 6dcfc8b56310..8aeea54bb927 100644 --- a/src/Files.App/MainWindow.xaml.cs +++ b/src/Files.App/MainWindow.xaml.cs @@ -277,7 +277,7 @@ async Task PerformNavigationAsync(string payload, string selectItem = null) .Select((tabItem, idx) => new { tabItem, idx }) .FirstOrDefault(x => x.tabItem.NavigationParameter.NavigationParameter is PaneNavigationArguments paneArgs && - (paneNavigationArgs.LeftPaneNavPathParam == paneArgs.LeftPaneNavPathParam || + (paneNavigationArgs.LeftPaneNavPathParam == paneArgs.LeftPaneNavPathParam || paneNavigationArgs.LeftPaneNavPathParam == paneArgs.RightPaneNavPathParam))?.idx ?? -1; if (existingTabIndex >= 0) diff --git a/src/Files.App/Services/App/AppDialogService.cs b/src/Files.App/Services/App/AppDialogService.cs index d5859b77d53d..418eaf3d6d55 100644 --- a/src/Files.App/Services/App/AppDialogService.cs +++ b/src/Files.App/Services/App/AppDialogService.cs @@ -1,15 +1,10 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Frozen; using Files.App.Dialogs; -using Files.App.ViewModels.Dialogs; -using Files.App.Services; -using Files.App.ViewModels.Dialogs; -using Files.App.ViewModels.Dialogs.AddItemDialog; -using Files.App.ViewModels.Dialogs.FileSystemDialog; using Microsoft.Extensions.Logging; using Microsoft.UI.Xaml.Controls; +using System.Collections.Frozen; using Windows.Foundation.Metadata; namespace Files.App.Services diff --git a/src/Files.App/Services/App/AppResourcesService.cs b/src/Files.App/Services/App/AppResourcesService.cs index 4718d8d8f0fd..c3bf262d108d 100644 --- a/src/Files.App/Services/App/AppResourcesService.cs +++ b/src/Files.App/Services/App/AppResourcesService.cs @@ -10,7 +10,7 @@ namespace Files.App.Services public sealed class ResourcesService : IResourcesService { private IAppThemeModeService AppThemeModeService { get; } = Ioc.Default.GetRequiredService(); - + /// public void SetAppThemeBackgroundColor(Color appThemeBackgroundColor) { @@ -31,7 +31,7 @@ public void SetAppThemeToolbarBackgroundColor(Color appThemeToolbarBackgroundCol { Application.Current.Resources["App.Theme.Toolbar.BackgroundBrush"] = appThemeToolbarBackgroundColor; } - + /// public void SetAppThemeSidebarBackgroundColor(Color appThemeSidebarBackgroundColor) { @@ -43,7 +43,7 @@ public void SetAppThemeFileAreaBackgroundColor(Color appThemeFileAreaBackgroundC { Application.Current.Resources["App.Theme.FileArea.BackgroundBrush"] = appThemeFileAreaBackgroundColor; } - + /// public void SetAppThemeFileAreaSecondaryBackgroundColor(Color appThemeFileAreaSecondaryBackgroundColor) { diff --git a/src/Files.App/Services/App/AppUpdateStoreService.cs b/src/Files.App/Services/App/AppUpdateStoreService.cs index 7d2a2d533150..6964c0f67b36 100644 --- a/src/Files.App/Services/App/AppUpdateStoreService.cs +++ b/src/Files.App/Services/App/AppUpdateStoreService.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI.Helpers; using Microsoft.Extensions.Logging; using Microsoft.UI.Xaml.Controls; using System.IO; diff --git a/src/Files.App/Services/DateTimeFormatter/AbstractDateTimeFormatter.cs b/src/Files.App/Services/DateTimeFormatter/AbstractDateTimeFormatter.cs index 9437eb26e0b9..f690ddfecc0e 100644 --- a/src/Files.App/Services/DateTimeFormatter/AbstractDateTimeFormatter.cs +++ b/src/Files.App/Services/DateTimeFormatter/AbstractDateTimeFormatter.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.Globalization; -using Windows.Globalization; namespace Files.App.Services.DateTimeFormatter { diff --git a/src/Files.App/Services/DateTimeFormatter/DateTimeFormatterFactory.cs b/src/Files.App/Services/DateTimeFormatter/DateTimeFormatterFactory.cs index 54b4b5f5abe3..cb13916e8b6b 100644 --- a/src/Files.App/Services/DateTimeFormatter/DateTimeFormatterFactory.cs +++ b/src/Files.App/Services/DateTimeFormatter/DateTimeFormatterFactory.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; - namespace Files.App.Services.DateTimeFormatter { public sealed class DateTimeFormatterFactory : IDateTimeFormatterFactory diff --git a/src/Files.App/Services/DateTimeFormatter/SystemDateTimeFormatter.cs b/src/Files.App/Services/DateTimeFormatter/SystemDateTimeFormatter.cs index 79aa2251e7a9..294593056a7d 100644 --- a/src/Files.App/Services/DateTimeFormatter/SystemDateTimeFormatter.cs +++ b/src/Files.App/Services/DateTimeFormatter/SystemDateTimeFormatter.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using System; - namespace Files.App.Services.DateTimeFormatter { internal sealed class SystemDateTimeFormatter : AbstractDateTimeFormatter diff --git a/src/Files.App/Services/DateTimeFormatter/UniversalDateTimeFormatter.cs b/src/Files.App/Services/DateTimeFormatter/UniversalDateTimeFormatter.cs index 1271f73652df..cb08253fabc9 100644 --- a/src/Files.App/Services/DateTimeFormatter/UniversalDateTimeFormatter.cs +++ b/src/Files.App/Services/DateTimeFormatter/UniversalDateTimeFormatter.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using System; - namespace Files.App.Services.DateTimeFormatter { internal sealed class UniversalDateTimeFormatter : AbstractDateTimeFormatter diff --git a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs index c6408ef4a842..a09e4849c72c 100644 --- a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs +++ b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Services.PreviewPopupProviders; - namespace Files.App.Services.PreviewPopupProviders { /// diff --git a/src/Files.App/Services/PreviewPopupProviders/SeerProProvider.cs b/src/Files.App/Services/PreviewPopupProviders/SeerProProvider.cs index c5a39d53355d..7141c8d5ce24 100644 --- a/src/Files.App/Services/PreviewPopupProviders/SeerProProvider.cs +++ b/src/Files.App/Services/PreviewPopupProviders/SeerProProvider.cs @@ -52,7 +52,7 @@ public async Task SwitchPreviewAsync(string path) if (!IsTrackSelectionSettingEnabled && !string.IsNullOrEmpty(CurrentPath)) { await TogglePreviewPopupAsync(CurrentPath); - return; + return; } // Update the preview window if the path changed diff --git a/src/Files.App/Services/Settings/ApplicationSettingsService.cs b/src/Files.App/Services/Settings/ApplicationSettingsService.cs index 769995db9368..0ad454c44db0 100644 --- a/src/Files.App/Services/Settings/ApplicationSettingsService.cs +++ b/src/Files.App/Services/Settings/ApplicationSettingsService.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Serialization; -using Files.App.Services.Settings; - namespace Files.App.Services.Settings { internal sealed partial class ApplicationSettingsService : BaseObservableJsonSettings, IApplicationSettingsService @@ -19,13 +16,13 @@ public bool HasClickedSponsorPrompt get => Get(false); set => Set(value); } - + public bool ShowRunningAsAdminPrompt { get => Get(true); set => Set(value); } - + public bool ShowDataStreamsAreHiddenPrompt { get => Get(true); diff --git a/src/Files.App/Services/Settings/FileTagsSettingsService.cs b/src/Files.App/Services/Settings/FileTagsSettingsService.cs index 3c999b59f43b..c44d3ecf299c 100644 --- a/src/Files.App/Services/Settings/FileTagsSettingsService.cs +++ b/src/Files.App/Services/Settings/FileTagsSettingsService.cs @@ -1,16 +1,10 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using Files.App.Utils; -using Files.App.Helpers; -using Files.App.Utils.Serialization; using Files.App.Utils.Serialization.Implementation; -using Files.App.Services.Settings; using Microsoft.Extensions.Logging; using System.IO; using Windows.Storage; -using CommunityToolkit.WinUI.Helpers; namespace Files.App.Services.Settings { diff --git a/src/Files.App/Services/Settings/UserSettingsService.cs b/src/Files.App/Services/Settings/UserSettingsService.cs index 8af8a85a37db..590bb6bf8ae5 100644 --- a/src/Files.App/Services/Settings/UserSettingsService.cs +++ b/src/Files.App/Services/Settings/UserSettingsService.cs @@ -1,12 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.Mvvm.DependencyInjection; -using Files.App.Utils.Serialization; using Files.App.Utils.Serialization.Implementation; -using Files.App.Services.Settings; -using Files.Shared.Extensions; -using System.Collections.Generic; using System.IO; using Windows.Storage; diff --git a/src/Files.App/Services/SizeProvider/CachedSizeProvider.cs b/src/Files.App/Services/SizeProvider/CachedSizeProvider.cs index b55c3287a50f..e3ca98eb91be 100644 --- a/src/Files.App/Services/SizeProvider/CachedSizeProvider.cs +++ b/src/Files.App/Services/SizeProvider/CachedSizeProvider.cs @@ -1,13 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using System; using System.Collections.Concurrent; using System.IO; -using System.Threading; -using System.Threading.Tasks; -using static Files.App.Helpers.Win32Helper; namespace Files.App.Services.SizeProvider { diff --git a/src/Files.App/Services/SizeProvider/DrivesSizeProvider.cs b/src/Files.App/Services/SizeProvider/DrivesSizeProvider.cs index 5026e5c45a20..beb54dc2cff1 100644 --- a/src/Files.App/Services/SizeProvider/DrivesSizeProvider.cs +++ b/src/Files.App/Services/SizeProvider/DrivesSizeProvider.cs @@ -1,12 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; using System.Collections.Concurrent; using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; namespace Files.App.Services.SizeProvider { diff --git a/src/Files.App/Services/SizeProvider/ISizeProvider.cs b/src/Files.App/Services/SizeProvider/ISizeProvider.cs index eb72f244e114..1ce8ccfe1f09 100644 --- a/src/Files.App/Services/SizeProvider/ISizeProvider.cs +++ b/src/Files.App/Services/SizeProvider/ISizeProvider.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; -using System.Threading; -using System.Threading.Tasks; - namespace Files.App.Services.SizeProvider { public interface ISizeProvider : IDisposable diff --git a/src/Files.App/Services/SizeProvider/NoSizeProvider.cs b/src/Files.App/Services/SizeProvider/NoSizeProvider.cs index d8d51e3dca32..5b20daa3b98d 100644 --- a/src/Files.App/Services/SizeProvider/NoSizeProvider.cs +++ b/src/Files.App/Services/SizeProvider/NoSizeProvider.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; -using System.Threading; -using System.Threading.Tasks; - namespace Files.App.Services.SizeProvider { public sealed partial class NoSizeProvider : ISizeProvider diff --git a/src/Files.App/Services/SizeProvider/SizeChangedEventArgs.cs b/src/Files.App/Services/SizeProvider/SizeChangedEventArgs.cs index 6452d86c8f31..9d57f65d7ae9 100644 --- a/src/Files.App/Services/SizeProvider/SizeChangedEventArgs.cs +++ b/src/Files.App/Services/SizeProvider/SizeChangedEventArgs.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; - namespace Files.App.Services.SizeProvider { public sealed class SizeChangedEventArgs : EventArgs diff --git a/src/Files.App/Services/Storage/StorageDevicesService.cs b/src/Files.App/Services/Storage/StorageDevicesService.cs index 7aed69898901..c29ca0b4f485 100644 --- a/src/Files.App/Services/Storage/StorageDevicesService.cs +++ b/src/Files.App/Services/Storage/StorageDevicesService.cs @@ -2,9 +2,9 @@ // Licensed under the MIT License. using Microsoft.Extensions.Logging; +using OwlCore.Storage.System.IO; using System.IO; using Windows.Storage; -using OwlCore.Storage.System.IO; namespace Files.App.Services { diff --git a/src/Files.App/Services/Storage/StorageNetworkService.cs b/src/Files.App/Services/Storage/StorageNetworkService.cs index 0ee1b5881fc0..5cea00e864a1 100644 --- a/src/Files.App/Services/Storage/StorageNetworkService.cs +++ b/src/Files.App/Services/Storage/StorageNetworkService.cs @@ -209,24 +209,24 @@ public async Task AuthenticateNetworkShare(string path) unsafe { - if (!path.StartsWith(@"\\", StringComparison.Ordinal)) + if (!path.StartsWith(@"\\", StringComparison.Ordinal)) { // Special handling for network drives - // This part will change path from "y:\Download" to "\\192.168.0.1\nfs\Download" + // This part will change path from "y:\Download" to "\\192.168.0.1\nfs\Download" [DllImport("mpr.dll", CharSet = CharSet.Auto)] static extern int WNetGetConnection(string lpLocalName, StringBuilder lpRemoteName, ref int lpnLength); - + StringBuilder remoteName = new StringBuilder(300); int length = remoteName.Capacity; string lpLocalName = path.Substring(0, 2); int ret = WNetGetConnection(lpLocalName, remoteName, ref length); - if ( ret == 0 ) + if (ret == 0) path = path.Replace(lpLocalName, remoteName.ToString()); } - + fixed (char* lpcPath = path) netRes.lpRemoteName = new PWSTR(lpcPath); } diff --git a/src/Files.App/Services/Windows/WindowsJumpListService.cs b/src/Files.App/Services/Windows/WindowsJumpListService.cs index 5678331dbb3d..5c1c8b9d1abb 100644 --- a/src/Files.App/Services/Windows/WindowsJumpListService.cs +++ b/src/Files.App/Services/Windows/WindowsJumpListService.cs @@ -3,7 +3,6 @@ using Microsoft.Extensions.Logging; using System.IO; -using Windows.Storage; using Windows.UI.StartScreen; namespace Files.App.Services diff --git a/src/Files.App/Services/Windows/WindowsQuickAccessService.cs b/src/Files.App/Services/Windows/WindowsQuickAccessService.cs index 616e1d9468a8..b060f123a4d0 100644 --- a/src/Files.App/Services/Windows/WindowsQuickAccessService.cs +++ b/src/Files.App/Services/Windows/WindowsQuickAccessService.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Shell; -using Files.App.UserControls.Widgets; -using Files.App.Helpers; - namespace Files.App.Services { internal sealed class QuickAccessService : IQuickAccessService diff --git a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs index ea604e417c50..8d2786b25725 100644 --- a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs +++ b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs @@ -3,11 +3,9 @@ using Microsoft.Extensions.Logging; using System.Collections.Specialized; -using System.Runtime.InteropServices; using System.Text; using Windows.Win32; using Windows.Win32.Foundation; -using Windows.Win32.System.Com; using Windows.Win32.System.SystemServices; using Windows.Win32.UI.Shell; using Windows.Win32.UI.WindowsAndMessaging; @@ -271,9 +269,9 @@ private unsafe bool UpdateRecentItems(bool isFolder) var eventArgs = GetChangedActionEventArgs(snapshot, recentItems); if (isFolder) - RecentFoldersChanged?.Invoke(this, eventArgs); + RecentFoldersChanged?.Invoke(this, eventArgs); else - RecentFilesChanged?.Invoke(this, eventArgs); + RecentFilesChanged?.Invoke(this, eventArgs); return true; } diff --git a/src/Files.App/Services/Windows/WindowsStartMenuService.cs b/src/Files.App/Services/Windows/WindowsStartMenuService.cs index cfc6783c95bb..4ff2b4027663 100644 --- a/src/Files.App/Services/Windows/WindowsStartMenuService.cs +++ b/src/Files.App/Services/Windows/WindowsStartMenuService.cs @@ -1,5 +1,4 @@ -using Files.Core.Storage; -using Windows.UI.StartScreen; +using Windows.UI.StartScreen; namespace Files.App.Services { diff --git a/src/Files.App/Services/Windows/WindowsWallpaperService.cs b/src/Files.App/Services/Windows/WindowsWallpaperService.cs index 502a2759c9aa..6aa7e1abc5de 100644 --- a/src/Files.App/Services/Windows/WindowsWallpaperService.cs +++ b/src/Files.App/Services/Windows/WindowsWallpaperService.cs @@ -5,7 +5,6 @@ using Windows.System.UserProfile; using Windows.Win32; using Windows.Win32.Foundation; -using Windows.Win32.System.Com; using Windows.Win32.UI.Shell; using Windows.Win32.UI.Shell.Common; diff --git a/src/Files.App/UserControls/ComboBoxEx/ComboBoxEx.cs b/src/Files.App/UserControls/ComboBoxEx/ComboBoxEx.cs index e1ceb930139a..fa63796ca6bd 100644 --- a/src/Files.App/UserControls/ComboBoxEx/ComboBoxEx.cs +++ b/src/Files.App/UserControls/ComboBoxEx/ComboBoxEx.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Windows.Foundation; diff --git a/src/Files.App/UserControls/FileIcon.xaml.cs b/src/Files.App/UserControls/FileIcon.xaml.cs index 028ff819c309..f772e4cba136 100644 --- a/src/Files.App/UserControls/FileIcon.xaml.cs +++ b/src/Files.App/UserControls/FileIcon.xaml.cs @@ -1,13 +1,10 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.ViewModels; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Imaging; -using System; using System.Runtime.InteropServices.WindowsRuntime; -using System.Threading.Tasks; using Windows.Storage.Streams; namespace Files.App.UserControls diff --git a/src/Files.App/UserControls/FilePreviews/CodePreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/CodePreview.xaml.cs index 70baa500b48f..5eda9aa0495e 100644 --- a/src/Files.App/UserControls/FilePreviews/CodePreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/CodePreview.xaml.cs @@ -1,7 +1,6 @@ using ColorCode; using Files.App.ViewModels.Previews; using Microsoft.UI.Xaml.Controls; -using System; // The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 diff --git a/src/Files.App/UserControls/FilePreviews/MarkdownPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MarkdownPreview.xaml.cs index e4bcf3cffba1..762dc38d77bc 100644 --- a/src/Files.App/UserControls/FilePreviews/MarkdownPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MarkdownPreview.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI.Controls; using Files.App.ViewModels.Previews; using Microsoft.UI.Xaml.Controls; using Windows.System; diff --git a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs index 23fb5fff1098..65f79818924f 100644 --- a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs @@ -36,8 +36,8 @@ private void MediaPreview_Unloaded(object sender, RoutedEventArgs e) PlayerContext.Source = null; PlayerContext.Loaded -= PlayerContext_Loaded; - Unloaded -= MediaPreview_Unloaded; - } + Unloaded -= MediaPreview_Unloaded; + } private void MediaPlayer_VolumeChanged(MediaPlayer sender, object args) { diff --git a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.Properties.cs b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.Properties.cs index 009d19496a62..8ebf9dfa35c8 100644 --- a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.Properties.cs +++ b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.Properties.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; namespace Files.App.UserControls.KeyboardShortcut { diff --git a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.cs b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.cs index 05502732f360..61711bed0532 100644 --- a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.cs +++ b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcut.cs @@ -50,7 +50,7 @@ private async void OnHotKeysChanged() items.Add(new() { Text = ",", ItemType = KeyboardShortcutItemKind.TextOnly, Size = Size }); } - switch(item.Key, item.Modifier) + switch (item.Key, item.Modifier) { // No keys or modifiers specified case (Keys.None, KeyModifiers.None): diff --git a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcutItem.Properties.cs b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcutItem.Properties.cs index 2b1f256afd48..ee0dd3f4eae3 100644 --- a/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcutItem.Properties.cs +++ b/src/Files.App/UserControls/KeyboardShortcut/KeyboardShortcutItem.Properties.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Microsoft.UI.Xaml; -using Microsoft.UI.Xaml.Controls; namespace Files.App.UserControls.KeyboardShortcut { diff --git a/src/Files.App/UserControls/Menus/MenuFlyoutItemWithThemedIcon.xaml.cs b/src/Files.App/UserControls/Menus/MenuFlyoutItemWithThemedIcon.xaml.cs index ca540a680608..834a77f6a0d1 100644 --- a/src/Files.App/UserControls/Menus/MenuFlyoutItemWithThemedIcon.xaml.cs +++ b/src/Files.App/UserControls/Menus/MenuFlyoutItemWithThemedIcon.xaml.cs @@ -8,7 +8,7 @@ namespace Files.App.UserControls { - public sealed partial class MenuFlyoutItemWithThemedIcon: MenuFlyoutItem + public sealed partial class MenuFlyoutItemWithThemedIcon : MenuFlyoutItem { public Style ThemedIconStyle { diff --git a/src/Files.App/UserControls/Menus/ToggleMenuFlyoutItemWithThemedIcon.xaml.cs b/src/Files.App/UserControls/Menus/ToggleMenuFlyoutItemWithThemedIcon.xaml.cs index b10adda4a492..88f0cd7d474b 100644 --- a/src/Files.App/UserControls/Menus/ToggleMenuFlyoutItemWithThemedIcon.xaml.cs +++ b/src/Files.App/UserControls/Menus/ToggleMenuFlyoutItemWithThemedIcon.xaml.cs @@ -8,7 +8,7 @@ namespace Files.App.UserControls { - public sealed partial class ToggleMenuFlyoutItemWithThemedIcon: ToggleMenuFlyoutItem + public sealed partial class ToggleMenuFlyoutItemWithThemedIcon : ToggleMenuFlyoutItem { public Style ThemedIconStyle { diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 1d9228f75b0e..2653f59075fd 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -6,7 +6,6 @@ using Microsoft.UI.Input; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Navigation; diff --git a/src/Files.App/UserControls/Pane/InfoPane.xaml.cs b/src/Files.App/UserControls/Pane/InfoPane.xaml.cs index 7ccfe0fd1be1..e3a5189fa41c 100644 --- a/src/Files.App/UserControls/Pane/InfoPane.xaml.cs +++ b/src/Files.App/UserControls/Pane/InfoPane.xaml.cs @@ -83,7 +83,7 @@ public bool IsHorizontal set => SetProperty(ref isHorizontal, value); } } - + private void TagItem_Tapped(object sender, TappedRoutedEventArgs e) { var tagName = ((sender as StackPanel)?.Children[1] as TextBlock)?.Text; diff --git a/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs b/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs index 7fe285de737e..01c1c2e6e23d 100644 --- a/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs +++ b/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs @@ -95,7 +95,7 @@ widgetCardItem.DataContext is not ShelfItem item || var menuFlyout = new MenuFlyout(); - menuFlyout.Items.Add (new MenuFlyoutItem + menuFlyout.Items.Add(new MenuFlyoutItem { Text = Strings.RemoveFromShelf.GetLocalizedResource(), Icon = new FontIcon { Glyph = "\uE738" }, @@ -127,7 +127,7 @@ public ICommand? ClearCommand } public static readonly DependencyProperty ClearCommandProperty = DependencyProperty.Register(nameof(ClearCommand), typeof(ICommand), typeof(ShelfPane), new PropertyMetadata(null)); - + public ICommand? ItemFocusedCommand { get => (ICommand?)GetValue(ItemFocusedCommandProperty); diff --git a/src/Files.App/UserControls/Selection/ExtendPreviousItemSelectionStrategy.cs b/src/Files.App/UserControls/Selection/ExtendPreviousItemSelectionStrategy.cs index d42fd085a595..460ac84cfcef 100644 --- a/src/Files.App/UserControls/Selection/ExtendPreviousItemSelectionStrategy.cs +++ b/src/Files.App/UserControls/Selection/ExtendPreviousItemSelectionStrategy.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Generic; using System.Runtime.InteropServices; namespace Files.App.UserControls.Selection diff --git a/src/Files.App/UserControls/Selection/IgnorePreviousItemSelectionStrategy.cs b/src/Files.App/UserControls/Selection/IgnorePreviousItemSelectionStrategy.cs index 58ea310cc6a1..f82e03c43215 100644 --- a/src/Files.App/UserControls/Selection/IgnorePreviousItemSelectionStrategy.cs +++ b/src/Files.App/UserControls/Selection/IgnorePreviousItemSelectionStrategy.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Generic; using System.Runtime.InteropServices; namespace Files.App.UserControls.Selection diff --git a/src/Files.App/UserControls/Selection/InvertPreviousItemSelectionStrategy.cs b/src/Files.App/UserControls/Selection/InvertPreviousItemSelectionStrategy.cs index 2ed042f324e5..399caa93286f 100644 --- a/src/Files.App/UserControls/Selection/InvertPreviousItemSelectionStrategy.cs +++ b/src/Files.App/UserControls/Selection/InvertPreviousItemSelectionStrategy.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Generic; using System.Runtime.InteropServices; namespace Files.App.UserControls.Selection diff --git a/src/Files.App/UserControls/Selection/ItemSelectionStrategy.cs b/src/Files.App/UserControls/Selection/ItemSelectionStrategy.cs index 5fba4d65ca02..cc04f4dd5281 100644 --- a/src/Files.App/UserControls/Selection/ItemSelectionStrategy.cs +++ b/src/Files.App/UserControls/Selection/ItemSelectionStrategy.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Generic; - namespace Files.App.UserControls.Selection { public abstract class ItemSelectionStrategy diff --git a/src/Files.App/UserControls/Selection/RectangleSelection.cs b/src/Files.App/UserControls/Selection/RectangleSelection.cs index e3fddb2ee439..a3dc27287475 100644 --- a/src/Files.App/UserControls/Selection/RectangleSelection.cs +++ b/src/Files.App/UserControls/Selection/RectangleSelection.cs @@ -5,7 +5,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Shapes; -using System; using Windows.Foundation; namespace Files.App.UserControls.Selection diff --git a/src/Files.App/UserControls/Selection/RectangleSelection_ListViewBase.cs b/src/Files.App/UserControls/Selection/RectangleSelection_ListViewBase.cs index 8dedaab885be..eb64ebb415aa 100644 --- a/src/Files.App/UserControls/Selection/RectangleSelection_ListViewBase.cs +++ b/src/Files.App/UserControls/Selection/RectangleSelection_ListViewBase.cs @@ -6,9 +6,6 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Shapes; -using System; -using System.Collections.Generic; -using System.Linq; using Windows.Foundation; using Windows.System; using DispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue; diff --git a/src/Files.App/UserControls/StatusBar.xaml.cs b/src/Files.App/UserControls/StatusBar.xaml.cs index ec8abd2c4842..bee3c6282b0a 100644 --- a/src/Files.App/UserControls/StatusBar.xaml.cs +++ b/src/Files.App/UserControls/StatusBar.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Commands; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; diff --git a/src/Files.App/UserControls/StatusCenter/SpeedGraph.cs b/src/Files.App/UserControls/StatusCenter/SpeedGraph.cs index 5aa80607dd6d..3a4dcae09190 100644 --- a/src/Files.App/UserControls/StatusCenter/SpeedGraph.cs +++ b/src/Files.App/UserControls/StatusCenter/SpeedGraph.cs @@ -3,10 +3,8 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Hosting; -using Microsoft.UI.Xaml.Media; using System.Collections.Specialized; using System.Numerics; -using Windows.UI; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -24,7 +22,7 @@ public ObservableCollection Points SetValue(PointsProperty, value); } } - + public static readonly DependencyProperty PointsProperty = DependencyProperty.Register(nameof(Points), typeof(ObservableCollection), typeof(SpeedGraph), null); @@ -52,7 +50,7 @@ public ObservableCollection Points float highestValue; IAppThemeModeService themeModeService; - + public SpeedGraph() { compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; diff --git a/src/Files.App/UserControls/TabBar/BaseTabBar.cs b/src/Files.App/UserControls/TabBar/BaseTabBar.cs index 7baf785cf354..7196b481592c 100644 --- a/src/Files.App/UserControls/TabBar/BaseTabBar.cs +++ b/src/Files.App/UserControls/TabBar/BaseTabBar.cs @@ -146,7 +146,7 @@ public void CloseTab(TabBarItem tabItem) Items.Remove(tabItem); tabItem.Unload(); - + // Dispose and save tab arguments PushRecentTab( [ diff --git a/src/Files.App/UserControls/Toolbar.xaml.cs b/src/Files.App/UserControls/Toolbar.xaml.cs index 9bca5d7648b4..a8910eb0d748 100644 --- a/src/Files.App/UserControls/Toolbar.xaml.cs +++ b/src/Files.App/UserControls/Toolbar.xaml.cs @@ -96,7 +96,7 @@ private void SortGroup_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventA for (ushort index = 0; index < items.Count; ++index) { - items[index].AccessKey = (index+1).ToString(format); + items[index].AccessKey = (index + 1).ToString(format); } } diff --git a/src/Files.App/Utils/Cloud/CloudDriveSyncStatusUI.cs b/src/Files.App/Utils/Cloud/CloudDriveSyncStatusUI.cs index 957c9d4bb3c0..4314f96eb293 100644 --- a/src/Files.App/Utils/Cloud/CloudDriveSyncStatusUI.cs +++ b/src/Files.App/Utils/Cloud/CloudDriveSyncStatusUI.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; using Microsoft.UI.Xaml; namespace Files.App.Utils.Cloud diff --git a/src/Files.App/Utils/Cloud/Detector/AbstractCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/AbstractCloudDetector.cs index b524259b7970..bbd88ff03c72 100644 --- a/src/Files.App/Utils/Cloud/Detector/AbstractCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/AbstractCloudDetector.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; -using System.Collections.Generic; -using System.Threading.Tasks; - namespace Files.App.Utils.Cloud { public abstract class AbstractCloudDetector : ICloudDetector diff --git a/src/Files.App/Utils/Cloud/Detector/BoxCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/BoxCloudDetector.cs index e2a4ad7d8eeb..42b7104290ac 100644 --- a/src/Files.App/Utils/Cloud/Detector/BoxCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/BoxCloudDetector.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; using System.IO; using Windows.Storage; diff --git a/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs index ccb376c556f5..f68aa036f6ef 100644 --- a/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/CloudDetector.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; - namespace Files.App.Utils.Cloud { /// diff --git a/src/Files.App/Utils/Cloud/Detector/DropBoxCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/DropBoxCloudDetector.cs index 975c720e945c..a67c9ee5983d 100644 --- a/src/Files.App/Utils/Cloud/Detector/DropBoxCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/DropBoxCloudDetector.cs @@ -1,9 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; using System.IO; -using System.Text.Json; using Windows.Storage; namespace Files.App.Utils.Cloud diff --git a/src/Files.App/Utils/Cloud/Detector/GenericCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/GenericCloudDetector.cs index 80c0a62b2172..b3e2afa9976f 100644 --- a/src/Files.App/Utils/Cloud/Detector/GenericCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/GenericCloudDetector.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; - namespace Files.App.Utils.Cloud { /// diff --git a/src/Files.App/Utils/Cloud/Detector/GoogleDriveCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/GoogleDriveCloudDetector.cs index 56c8bfa44066..f3ba712c2b18 100644 --- a/src/Files.App/Utils/Cloud/Detector/GoogleDriveCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/GoogleDriveCloudDetector.cs @@ -5,8 +5,8 @@ using Microsoft.Extensions.Logging; using Microsoft.Win32; using System.IO; -using Windows.Storage; using Vanara.Windows.Shell; +using Windows.Storage; namespace Files.App.Utils.Cloud { @@ -220,7 +220,7 @@ private static async Task Inspect(SqliteConnection database, string sqlCommand, } var path = googleDriveRegValPropProp.GetString(); - if (path is not null) + if (path is not null) return ConvertDriveLetterToPathAndValidate(ref path) ? path : null; _logger.LogWarning($"Could not get string from value from {_googleDriveRegValPropPropName}"); @@ -234,7 +234,7 @@ private static async Task Inspect(SqliteConnection database, string sqlCommand, /// private static bool ConvertDriveLetterToPathAndValidate(ref string path) { - if (path.Length > 1) + if (path.Length > 1) return ValidatePath(path); DriveInfo driveInfo; @@ -253,7 +253,7 @@ private static bool ConvertDriveLetterToPathAndValidate(ref string path) } private static bool ValidatePath(string path) - { + { if (Directory.Exists(path)) return true; _logger.LogWarning($"Invalid path: {path}"); @@ -273,7 +273,7 @@ private static bool ValidatePath(string path) } private static bool AddMyDriveToPathAndValidate(ref string path) - { + { // If `path` contains a shortcut named "My Drive", store its target in `shellFolderBaseFirst`. // This happens when "My Drive syncing options" is set to "Mirror files". // TODO: Avoid to use Vanara (#15000) diff --git a/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs index b53fdfb15623..bbc764853bc7 100644 --- a/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/OXDriveCloudDetector.cs @@ -1,12 +1,9 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; using Microsoft.Win32; using System.IO; -using System.Text.Json; using Windows.Storage; -using static Vanara.PInvoke.Gdi32; namespace Files.App.Utils.Cloud { @@ -33,7 +30,7 @@ protected override async IAsyncEnumerable GetProviders() { var jsonPath = Path.Combine(UserDataPaths.GetDefault().LocalAppData, "Open-Xchange", "OXDrive", "userConfig.json"); if (!File.Exists(jsonPath)) - return null; + return null; var configFile = await StorageFile.GetFileFromPathAsync(jsonPath); using var jsonDoc = JsonDocument.Parse(await FileIO.ReadTextAsync(configFile)); diff --git a/src/Files.App/Utils/Cloud/Detector/SynologyDriveCloudDetector.cs b/src/Files.App/Utils/Cloud/Detector/SynologyDriveCloudDetector.cs index 16592c9af50e..df75d90a789f 100644 --- a/src/Files.App/Utils/Cloud/Detector/SynologyDriveCloudDetector.cs +++ b/src/Files.App/Utils/Cloud/Detector/SynologyDriveCloudDetector.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Utils.Cloud; using Microsoft.Data.Sqlite; using System.IO; using Windows.Storage; diff --git a/src/Files.App/Utils/Global/QuickAccessManager.cs b/src/Files.App/Utils/Global/QuickAccessManager.cs index e91a880d43f1..5971690c42b5 100644 --- a/src/Files.App/Utils/Global/QuickAccessManager.cs +++ b/src/Files.App/Utils/Global/QuickAccessManager.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI.Helpers; using System.IO; namespace Files.App.Utils diff --git a/src/Files.App/Utils/Global/WindowsStorageDeviceWatcher.cs b/src/Files.App/Utils/Global/WindowsStorageDeviceWatcher.cs index f80c1b922b5f..97c4dccbfd7d 100644 --- a/src/Files.App/Utils/Global/WindowsStorageDeviceWatcher.cs +++ b/src/Files.App/Utils/Global/WindowsStorageDeviceWatcher.cs @@ -1,11 +1,7 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Items; -using Files.App.Helpers; -using Files.Core.Storage.Storables; using Microsoft.Extensions.Logging; -using System; using System.IO; using System.Runtime.InteropServices; using Windows.Devices.Enumeration; @@ -63,7 +59,7 @@ private async void Win32_OnDeviceAdded(object? sender, DeviceEventArgs e) + " failed at the StorageFolder initialization step. This device will be ignored."); return; } - + var type = DriveHelpers.GetDriveType(driveAdded); var label = DriveHelpers.GetExtendedDriveLabel(driveAdded); DriveItem driveItem = await DriveItem.CreateFromPropertiesAsync(rootAdded, e.DeviceId, label, type); @@ -96,7 +92,7 @@ private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args) return; } - Data.Items.DriveType type; + Data.Items.DriveType type; string label; try { diff --git a/src/Files.App/Utils/Library/LibraryManager.cs b/src/Files.App/Utils/Library/LibraryManager.cs index c97c6abf8f29..a3520eb6122b 100644 --- a/src/Files.App/Utils/Library/LibraryManager.cs +++ b/src/Files.App/Utils/Library/LibraryManager.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Files.App.Dialogs; -using Files.App.ViewModels.Dialogs; using Microsoft.Extensions.Logging; using Microsoft.UI.Xaml.Controls; using System.Collections.Specialized; diff --git a/src/Files.App/Utils/Serialization/BaseJsonSettings.cs b/src/Files.App/Utils/Serialization/BaseJsonSettings.cs index b13f98143456..215952c8f0ec 100644 --- a/src/Files.App/Utils/Serialization/BaseJsonSettings.cs +++ b/src/Files.App/Utils/Serialization/BaseJsonSettings.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; using System.Runtime.CompilerServices; namespace Files.App.Utils.Serialization diff --git a/src/Files.App/Utils/Serialization/BaseObservableJsonSettings.cs b/src/Files.App/Utils/Serialization/BaseObservableJsonSettings.cs index ac0151556ed5..39ae970163fa 100644 --- a/src/Files.App/Utils/Serialization/BaseObservableJsonSettings.cs +++ b/src/Files.App/Utils/Serialization/BaseObservableJsonSettings.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.ComponentModel; using System.Runtime.CompilerServices; namespace Files.App.Utils.Serialization diff --git a/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsDatabase.cs b/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsDatabase.cs index 797fd086a0fb..f928aff6b1a9 100644 --- a/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsDatabase.cs +++ b/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsDatabase.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.Collections.Concurrent; -using System.Text.Json; namespace Files.App.Utils.Serialization.Implementation { diff --git a/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsSerializer.cs b/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsSerializer.cs index ccb621eb5a40..7965e6cbf534 100644 --- a/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsSerializer.cs +++ b/src/Files.App/Utils/Serialization/Implementation/DefaultJsonSettingsSerializer.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Text.Json; - namespace Files.App.Utils.Serialization.Implementation { internal sealed class DefaultJsonSettingsSerializer : IJsonSettingsSerializer diff --git a/src/Files.App/Utils/Shell/ContextMenu.cs b/src/Files.App/Utils/Shell/ContextMenu.cs index b409ba730c03..54cb5eaab4a5 100644 --- a/src/Files.App/Utils/Shell/ContextMenu.cs +++ b/src/Files.App/Utils/Shell/ContextMenu.cs @@ -17,9 +17,9 @@ namespace Files.App.Utils.Shell public partial class ContextMenu : Win32ContextMenu, IDisposable { private Shell32.IContextMenu _cMenu; - + private User32.SafeHMENU _hMenu; - + private readonly ThreadWithMessageQueue _owningThread; private readonly Func? _itemFilter; diff --git a/src/Files.App/Utils/Shell/ShellFolderExtensions.cs b/src/Files.App/Utils/Shell/ShellFolderExtensions.cs index 68468f842ffd..81682aaa428d 100644 --- a/src/Files.App/Utils/Shell/ShellFolderExtensions.cs +++ b/src/Files.App/Utils/Shell/ShellFolderExtensions.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System; using System.IO; using Vanara.PInvoke; using Vanara.Windows.Shell; diff --git a/src/Files.App/Utils/Shell/ShellHelpers.cs b/src/Files.App/Utils/Shell/ShellHelpers.cs index 149c54e11be8..2f3dc7f107d6 100644 --- a/src/Files.App/Utils/Shell/ShellHelpers.cs +++ b/src/Files.App/Utils/Shell/ShellHelpers.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Extensions; -using Files.Shared; -using System; using System.IO; namespace Files.App.Utils.Shell diff --git a/src/Files.App/Utils/Shell/ShellNewMenuHelper.cs b/src/Files.App/Utils/Shell/ShellNewMenuHelper.cs index 9fac780426b7..669f84923a54 100644 --- a/src/Files.App/Utils/Shell/ShellNewMenuHelper.cs +++ b/src/Files.App/Utils/Shell/ShellNewMenuHelper.cs @@ -69,7 +69,8 @@ private static async Task GetShellNewRegistryEntries(RegistryKey } } } - catch { + catch + { // Ignore exceptions when the registry is inaccessible to avoid freezes } diff --git a/src/Files.App/Utils/StatusCenter/StatusCenterItem.cs b/src/Files.App/Utils/StatusCenter/StatusCenterItem.cs index bba1ee1436a3..b3a46cfbd024 100644 --- a/src/Files.App/Utils/StatusCenter/StatusCenterItem.cs +++ b/src/Files.App/Utils/StatusCenter/StatusCenterItem.cs @@ -1,9 +1,9 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Windows.Input; using Microsoft.UI.Xaml.Media; using System.Numerics; +using System.Windows.Input; namespace Files.App.Utils.StatusCenter { diff --git a/src/Files.App/Utils/Storage/Collection/ConcurrentCollection.cs b/src/Files.App/Utils/Storage/Collection/ConcurrentCollection.cs index 693babf28af9..ba52779a1a66 100644 --- a/src/Files.App/Utils/Storage/Collection/ConcurrentCollection.cs +++ b/src/Files.App/Utils/Storage/Collection/ConcurrentCollection.cs @@ -8,7 +8,7 @@ namespace Files.App.Helpers public sealed class ConcurrentCollection : ICollection, IList, ICollection, IList { private readonly object syncRoot = new object(); - + private readonly List collection = []; public int Count diff --git a/src/Files.App/Utils/Storage/Collection/GroupedCollection.cs b/src/Files.App/Utils/Storage/Collection/GroupedCollection.cs index fb1f88962126..9466d24ced31 100644 --- a/src/Files.App/Utils/Storage/Collection/GroupedCollection.cs +++ b/src/Files.App/Utils/Storage/Collection/GroupedCollection.cs @@ -66,7 +66,7 @@ public void InitializeExtendedGroupHeaderInfoAsync() public override void BeginBulkOperation() { base.BeginBulkOperation(); - + Model.PausePropertyChangedNotifications(); } diff --git a/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs b/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs index 8d3600206886..4bbb4592f9c0 100644 --- a/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs +++ b/src/Files.App/Utils/Storage/Enumerators/UniversalStorageEnumerator.cs @@ -82,7 +82,7 @@ ex is FileNotFoundException || { if (defaultIconPairs?.ContainsKey(string.Empty) ?? false) folder.FileImage = defaultIconPairs[string.Empty]; - + tempList.Add(folder); } } @@ -96,7 +96,7 @@ ex is FileNotFoundException || if (!string.IsNullOrEmpty(fileEntry.FileExtension)) { var lowercaseExtension = fileEntry.FileExtension.ToLowerInvariant(); - + if (defaultIconPairs.ContainsKey(lowercaseExtension)) fileEntry.FileImage = defaultIconPairs[lowercaseExtension]; } diff --git a/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs b/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs index 380eebc9134c..bd86be9c4d3a 100644 --- a/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs +++ b/src/Files.App/Utils/Storage/Enumerators/Win32StorageEnumerator.cs @@ -5,7 +5,6 @@ using Files.Shared.Helpers; using System.IO; using Windows.Storage; -using static Files.App.Helpers.Win32Helper; using FileAttributes = System.IO.FileAttributes; namespace Files.App.Utils.Storage diff --git a/src/Files.App/Utils/Storage/Helpers/DriveHelpers.cs b/src/Files.App/Utils/Storage/Helpers/DriveHelpers.cs index 5729042b3ee2..8fce543bdc55 100644 --- a/src/Files.App/Utils/Storage/Helpers/DriveHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/DriveHelpers.cs @@ -93,8 +93,8 @@ public static async Task GetRootFromPathAsync(string devi } // Network share else if ( - ( devicePath.StartsWith(@"\\", StringComparison.Ordinal) || - GetDriveType(new SystemIO.DriveInfo(devicePath)) is DriveType.Network ) && + (devicePath.StartsWith(@"\\", StringComparison.Ordinal) || + GetDriveType(new SystemIO.DriveInfo(devicePath)) is DriveType.Network) && !devicePath.StartsWith(@"\\SHELL\", StringComparison.Ordinal) ) { diff --git a/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs b/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs index 2ce4294c1763..70b2d66f3090 100644 --- a/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/FilePropertiesHelpers.cs @@ -7,7 +7,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Animation; -using Microsoft.Windows.ApplicationModel.Resources; using System.Collections.Concurrent; using Windows.Graphics; using Windows.Win32; @@ -104,7 +103,7 @@ public static void OpenPropertiesWindow(object item, IShellPage associatedInstan var width = Convert.ToInt32(800 * App.AppModel.AppWindowDPI); var height = Convert.ToInt32(500 * App.AppModel.AppWindowDPI); - propertiesWindow.AppWindow.Resize(new (width, height)); + propertiesWindow.AppWindow.Resize(new(width, height)); propertiesWindow.IsMinimizable = false; propertiesWindow.IsMaximizable = false; propertiesWindow.Content = frame; diff --git a/src/Files.App/Utils/Storage/Helpers/FilesystemResult.cs b/src/Files.App/Utils/Storage/Helpers/FilesystemResult.cs index 96de1a67e538..ccb51f9209c8 100644 --- a/src/Files.App/Utils/Storage/Helpers/FilesystemResult.cs +++ b/src/Files.App/Utils/Storage/Helpers/FilesystemResult.cs @@ -16,8 +16,8 @@ public class FilesystemResult public static implicit operator bool(FilesystemResult res) => res?.ErrorCode is FileSystemStatusCode.Success; public static explicit operator FilesystemResult(bool res) => new(res ? FileSystemStatusCode.Success : FileSystemStatusCode.Generic); - - + + public static implicit operator BOOL(FilesystemResult res) => res?.ErrorCode is FileSystemStatusCode.Success; public static explicit operator FilesystemResult(BOOL res) => new(res ? FileSystemStatusCode.Success : FileSystemStatusCode.Generic); } diff --git a/src/Files.App/Utils/Storage/Helpers/FolderHelpers.cs b/src/Files.App/Utils/Storage/Helpers/FolderHelpers.cs index e70b2bace5eb..74f0a37099f1 100644 --- a/src/Files.App/Utils/Storage/Helpers/FolderHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/FolderHelpers.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.IO; -using static Files.App.Helpers.Win32Helper; namespace Files.App.Utils.Storage { diff --git a/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs b/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs index 3b0afe33a40b..ba9ab3ba408a 100644 --- a/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs +++ b/src/Files.App/Utils/Storage/Helpers/StorageFileExtensions.cs @@ -351,7 +351,7 @@ private static string ResolvePath(string path, bool isFtp) if (path.StartsWith("ReleaseNotes")) return "ReleaseNotes"; - + if (path.StartsWith("Settings")) return "Settings"; diff --git a/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs b/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs index 3bfb6335a568..4573df64e0d9 100644 --- a/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using Microsoft.Win32; -using System.Runtime.CompilerServices; using Windows.Win32; -using Windows.Win32.Foundation; using Windows.Win32.System.Com; using Windows.Win32.System.WinRT; using WinRT; diff --git a/src/Files.App/Utils/Storage/Operations/FileSizeCalculator.cs b/src/Files.App/Utils/Storage/Operations/FileSizeCalculator.cs index 5c01476bfc5e..3e60af00da9b 100644 --- a/src/Files.App/Utils/Storage/Operations/FileSizeCalculator.cs +++ b/src/Files.App/Utils/Storage/Operations/FileSizeCalculator.cs @@ -3,7 +3,6 @@ using System.Collections.Concurrent; using System.IO; -using System.Runtime.InteropServices; using Windows.Win32; using Windows.Win32.Storage.FileSystem; diff --git a/src/Files.App/Utils/Storage/Operations/FilesystemHelpers.cs b/src/Files.App/Utils/Storage/Operations/FilesystemHelpers.cs index 7234fedb9076..6183a1330b78 100644 --- a/src/Files.App/Utils/Storage/Operations/FilesystemHelpers.cs +++ b/src/Files.App/Utils/Storage/Operations/FilesystemHelpers.cs @@ -1,14 +1,11 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.Core.Storage; -using Files.Core.Storage.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Win32; using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; -using Vanara.Extensions; using Vanara.PInvoke; using Vanara.Windows.Shell; using Windows.ApplicationModel.DataTransfer; diff --git a/src/Files.App/Utils/Storage/StorageBaseItems/BaseStorageFolder.cs b/src/Files.App/Utils/Storage/StorageBaseItems/BaseStorageFolder.cs index 7c1c0f40e42e..5517798b8727 100644 --- a/src/Files.App/Utils/Storage/StorageBaseItems/BaseStorageFolder.cs +++ b/src/Files.App/Utils/Storage/StorageBaseItems/BaseStorageFolder.cs @@ -108,7 +108,7 @@ IAsyncOperation> IStorageFolderQueryOperations.GetFil public abstract IAsyncOperation GetFolderAsync(string name); IAsyncOperation IStorageFolder.GetFolderAsync(string name) - { + { return AsyncInfo.Run(async (cancellationToken) => await (await GetFolderAsync(name)).ToStorageFolderAsync()); diff --git a/src/Files.App/Utils/Storage/StorageBaseItems/IBaseStorageFolder.cs b/src/Files.App/Utils/Storage/StorageBaseItems/IBaseStorageFolder.cs index 48b8fcf1b913..44827c86732b 100644 --- a/src/Files.App/Utils/Storage/StorageBaseItems/IBaseStorageFolder.cs +++ b/src/Files.App/Utils/Storage/StorageBaseItems/IBaseStorageFolder.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.IO; using Windows.Foundation; using Windows.Storage; using Windows.Storage.FileProperties; diff --git a/src/Files.App/Utils/Storage/StorageBaseItems/IPasswordProtectedItem.cs b/src/Files.App/Utils/Storage/StorageBaseItems/IPasswordProtectedItem.cs index 318c41787a16..7278d390cd27 100644 --- a/src/Files.App/Utils/Storage/StorageBaseItems/IPasswordProtectedItem.cs +++ b/src/Files.App/Utils/Storage/StorageBaseItems/IPasswordProtectedItem.cs @@ -1,11 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using FluentFTP; using FluentFTP.Exceptions; using SevenZip; -using System; -using Windows.Storage; namespace Files.App.Utils.Storage { diff --git a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs index 42cb8309e7c6..ea2b0dc0b711 100644 --- a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFile.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Storage.Storables; using FluentFTP; using System.IO; using System.Net; diff --git a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFolder.cs b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFolder.cs index 4a3bc2a8b7df..48ddd3d47394 100644 --- a/src/Files.App/Utils/Storage/StorageItems/FtpStorageFolder.cs +++ b/src/Files.App/Utils/Storage/StorageItems/FtpStorageFolder.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Storage.Storables; using FluentFTP; using System.IO; using System.Net; diff --git a/src/Files.App/Utils/Storage/StorageItems/ShellStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/ShellStorageFile.cs index 395f8ab72b36..1ef3e7343109 100644 --- a/src/Files.App/Utils/Storage/StorageItems/ShellStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/ShellStorageFile.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using System.Runtime.InteropServices.WindowsRuntime; -using Vanara.PInvoke; using Windows.Foundation; using Windows.Storage; using Windows.Storage.FileProperties; diff --git a/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs b/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs index 3f0aee8f4fee..4efdfcc6699e 100644 --- a/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs +++ b/src/Files.App/Utils/Storage/StorageItems/VirtualStorageItem.cs @@ -6,7 +6,6 @@ using Windows.Foundation; using Windows.Storage; using Windows.Storage.FileProperties; -using static Files.App.Helpers.Win32Helper; namespace Files.App.Utils.Storage { diff --git a/src/Files.App/ViewModels/Dialogs/AddItemDialog/AddItemDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/AddItemDialog/AddItemDialogViewModel.cs index 4665d89c7007..9d5e459a7c06 100644 --- a/src/Files.App/ViewModels/Dialogs/AddItemDialog/AddItemDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/AddItemDialog/AddItemDialogViewModel.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.Shared; using Files.Shared.Utils; namespace Files.App.ViewModels.Dialogs.AddItemDialog diff --git a/src/Files.App/ViewModels/Dialogs/BulkRenameDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/BulkRenameDialogViewModel.cs index ca72363a51fb..654cf23b9508 100644 --- a/src/Files.App/ViewModels/Dialogs/BulkRenameDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/BulkRenameDialogViewModel.cs @@ -55,7 +55,8 @@ await context.ShellPage.FilesystemHelpers.RenameAsync( true, false ); - }; + } + ; } } diff --git a/src/Files.App/ViewModels/Dialogs/CreateItemDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/CreateItemDialogViewModel.cs index 329a7b3037ed..15ceb3dc223b 100644 --- a/src/Files.App/ViewModels/Dialogs/CreateItemDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/CreateItemDialogViewModel.cs @@ -4,12 +4,12 @@ namespace Files.App.ViewModels.Dialogs { partial class CreateItemDialogViewModel : ObservableObject - { + { private bool isNameInvalid; public bool IsNameInvalid { get => isNameInvalid; set => SetProperty(ref isNameInvalid, value); } - } + } } diff --git a/src/Files.App/ViewModels/Dialogs/CreateShortcutDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/CreateShortcutDialogViewModel.cs index 0bec2b9be957..591a2c26529c 100644 --- a/src/Files.App/ViewModels/Dialogs/CreateShortcutDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/CreateShortcutDialogViewModel.cs @@ -1,11 +1,11 @@ // Copyright (c) Files Community // Licensed under the MIT License. +using Files.Shared.Helpers; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Input; -using Files.Shared.Helpers; namespace Files.App.ViewModels.Dialogs { @@ -38,7 +38,7 @@ public sealed partial class CreateShortcutDialogViewModel : ObservableObject private string _shortcutName; public string ShortcutName { - get => _shortcutName; + get => _shortcutName; set { if (SetProperty(ref _shortcutName, value)) @@ -195,7 +195,7 @@ public bool IsLocationValid set { if (SetProperty(ref _isLocationValid, value)) - { + { OnPropertyChanged(nameof(ShowWarningTip)); OnPropertyChanged(nameof(IsShortcutValid)); } diff --git a/src/Files.App/ViewModels/Dialogs/DecompressArchiveDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/DecompressArchiveDialogViewModel.cs index 63ea6b6ca442..131ae481234e 100644 --- a/src/Files.App/ViewModels/Dialogs/DecompressArchiveDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/DecompressArchiveDialogViewModel.cs @@ -48,7 +48,8 @@ public bool IsArchiveEncodingUndetermined public Encoding? DetectedEncoding { get => detectedEncoding; - set { + set + { SetProperty(ref detectedEncoding, value); RefreshEncodingOptions(); } @@ -71,7 +72,7 @@ void RefreshEncodingOptions() { EncodingOptions = EncodingItem.Defaults .Prepend(new EncodingItem( - detectedEncoding, + detectedEncoding, string.Format(Strings.EncodingDetected.GetLocalizedResource(), detectedEncoding.EncodingName) )) .ToArray(); @@ -83,7 +84,7 @@ void RefreshEncodingOptions() SelectedEncoding = EncodingOptions.FirstOrDefault(); } - + public IRelayCommand PrimaryButtonClickCommand { get; private set; } diff --git a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogConflictItemViewModel.cs b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogConflictItemViewModel.cs index 64fc9e6ba313..a73f44352f73 100644 --- a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogConflictItemViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogConflictItemViewModel.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Enums; using System.IO; namespace Files.App.ViewModels.Dialogs.FileSystemDialog diff --git a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs index ef4f0f93991f..9de1dbedcf24 100644 --- a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs @@ -1,10 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Enums; -using Files.Shared.Extensions; -using System.Text; - namespace Files.App.ViewModels.Dialogs.FileSystemDialog { public sealed partial class FileSystemDialogViewModel : BaseDialogViewModel, IRecipient diff --git a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/IFileSystemDialogConflictItemViewModel.cs b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/IFileSystemDialogConflictItemViewModel.cs index 07718d27e6bf..a03d3b339105 100644 --- a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/IFileSystemDialogConflictItemViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/IFileSystemDialogConflictItemViewModel.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Enums; - namespace Files.App.ViewModels.Dialogs.FileSystemDialog { public interface IFileSystemDialogConflictItemViewModel diff --git a/src/Files.App/ViewModels/Dialogs/FileTooLargeDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/FileTooLargeDialogViewModel.cs index a0ff9419bb9f..5e2ae9669e54 100644 --- a/src/Files.App/ViewModels/Dialogs/FileTooLargeDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/FileTooLargeDialogViewModel.cs @@ -3,12 +3,12 @@ namespace Files.App.ViewModels.Dialogs { - public sealed partial class FileTooLargeDialogViewModel: ObservableObject + public sealed partial class FileTooLargeDialogViewModel : ObservableObject { public IEnumerable Paths { get; private set; } - public FileTooLargeDialogViewModel(IEnumerable paths) - { + public FileTooLargeDialogViewModel(IEnumerable paths) + { Paths = paths; } } diff --git a/src/Files.App/ViewModels/Dialogs/IDialog.cs b/src/Files.App/ViewModels/Dialogs/IDialog.cs index 999a7d44210d..ffeaafdf6dce 100644 --- a/src/Files.App/ViewModels/Dialogs/IDialog.cs +++ b/src/Files.App/ViewModels/Dialogs/IDialog.cs @@ -1,8 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Enums; - namespace Files.App.ViewModels.Dialogs { public interface IDialog diff --git a/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs index 37ddb169000d..f4f90ffc4ba1 100644 --- a/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/ReorderSidebarItemsDialogViewModel.cs @@ -16,7 +16,7 @@ public sealed partial class ReorderSidebarItemsDialogViewModel : ObservableObjec .Where(x => x is LocationItem loc && loc.Section is SectionType.Pinned && !loc.IsHeader) .Cast()); - public ReorderSidebarItemsDialogViewModel() + public ReorderSidebarItemsDialogViewModel() { //App.Logger.LogWarning(string.Join(", ", SidebarPinnedFolderItems.Select(x => x.Path))); PrimaryButtonCommand = new RelayCommand(SaveChanges); diff --git a/src/Files.App/ViewModels/HomeViewModel.cs b/src/Files.App/ViewModels/HomeViewModel.cs index a511b580154c..7d25ee7b448f 100644 --- a/src/Files.App/ViewModels/HomeViewModel.cs +++ b/src/Files.App/ViewModels/HomeViewModel.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using System.Windows.Input; namespace Files.App.ViewModels diff --git a/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs b/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs index ea436c4f654e..c204b74af287 100644 --- a/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/BaseProperties.cs @@ -4,7 +4,6 @@ using Microsoft.UI.Dispatching; using System.IO; using Windows.Storage.FileProperties; -using static Files.App.Helpers.Win32Helper; using FileAttributes = System.IO.FileAttributes; namespace Files.App.ViewModels.Properties diff --git a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs index 5b49a6a626ec..22e2cc40d3eb 100644 --- a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs @@ -1,14 +1,6 @@ -using Files.App.Extensions; -using Files.App.Utils; -using Files.App.Helpers; using Microsoft.Extensions.Logging; using Microsoft.UI.Dispatching; -using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; using Windows.Storage; namespace Files.App.ViewModels.Properties diff --git a/src/Files.App/ViewModels/Properties/Items/DriveProperties.cs b/src/Files.App/ViewModels/Properties/Items/DriveProperties.cs index c07138a6ce33..8489450903e1 100644 --- a/src/Files.App/ViewModels/Properties/Items/DriveProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/DriveProperties.cs @@ -1,11 +1,4 @@ -using Files.App.Data.Items; -using Files.App.Extensions; -using Files.App.Utils; -using Files.App.Helpers; using Microsoft.Extensions.Logging; -using System; -using System.Threading.Tasks; -using Windows.Storage.FileProperties; namespace Files.App.ViewModels.Properties { diff --git a/src/Files.App/ViewModels/Properties/Items/FilePropertySection.cs b/src/Files.App/ViewModels/Properties/Items/FilePropertySection.cs index a8333dc130cb..058ac2a1e839 100644 --- a/src/Files.App/ViewModels/Properties/Items/FilePropertySection.cs +++ b/src/Files.App/ViewModels/Properties/Items/FilePropertySection.cs @@ -1,6 +1,4 @@ -using Files.App.Extensions; using Microsoft.UI.Xaml; -using System.Collections.Generic; namespace Files.App.ViewModels.Properties { diff --git a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs index b09b7462f021..6d85b79e8224 100644 --- a/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/FolderProperties.cs @@ -83,7 +83,7 @@ public async override Task GetSpecialPropertiesAsync() Constants.ShellIconSizes.ExtraLarge, true, IconOptions.UseCurrentScale); - + if (result is not null) { ViewModel.IconData = result; @@ -120,7 +120,7 @@ public async override Task GetSpecialPropertiesAsync() GetOtherPropertiesAsync(storageFolder.Properties); // Only load the size for items on the device - if (Item.SyncStatusUI.SyncStatus is not CloudDriveSyncStatus.FileOnline and not + if (Item.SyncStatusUI.SyncStatus is not CloudDriveSyncStatus.FileOnline and not CloudDriveSyncStatus.FolderOnline and not CloudDriveSyncStatus.FolderOfflinePartial) GetFolderSizeAsync(storageFolder.Path, TokenSource.Token); diff --git a/src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs b/src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs index d6883f436593..0b02b62c0ba3 100644 --- a/src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs @@ -55,7 +55,7 @@ public async override Task GetSpecialPropertiesAsync() Constants.ShellIconSizes.ExtraLarge, true, IconOptions.UseCurrentScale); - + if (result is not null) { ViewModel.IconData = result; diff --git a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs index 14a7922e0115..c95b9b60b056 100644 --- a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs +++ b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs @@ -33,14 +33,14 @@ public NavigationViewItemButtonStyleItem SelectedNavigationViewItem var page = value.ItemType switch { - PropertiesNavigationViewItemType.General => typeof(GeneralPage), - PropertiesNavigationViewItemType.Shortcut => typeof(ShortcutPage), - PropertiesNavigationViewItemType.Library => typeof(LibraryPage), - PropertiesNavigationViewItemType.Details => typeof(DetailsPage), - PropertiesNavigationViewItemType.Security => typeof(SecurityPage), + PropertiesNavigationViewItemType.General => typeof(GeneralPage), + PropertiesNavigationViewItemType.Shortcut => typeof(ShortcutPage), + PropertiesNavigationViewItemType.Library => typeof(LibraryPage), + PropertiesNavigationViewItemType.Details => typeof(DetailsPage), + PropertiesNavigationViewItemType.Security => typeof(SecurityPage), PropertiesNavigationViewItemType.Customization => typeof(CustomizationPage), PropertiesNavigationViewItemType.Compatibility => typeof(CompatibilityPage), - PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), + PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), _ => typeof(GeneralPage), }; diff --git a/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs b/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs index 3201b42c06a7..367e8b4aaee5 100644 --- a/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Properties/SecurityAdvancedViewModel.cs @@ -69,7 +69,7 @@ public AccessControlEntry? SelectedAccessControlEntry if (SetProperty(ref _SelectedAccessControlEntry, value)) { - if(value is not null) + if (value is not null) value.IsSelected = true; OnPropertyChanged(nameof(IsDeleteAccessControlEntryButtonEnabled)); @@ -143,7 +143,8 @@ public SecurityAdvancedViewModel(PropertiesPageNavigationParameter parameter) _path = defaultlistedItem.ItemPath; _isFolder = defaultlistedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !defaultlistedItem.IsShortcut; break; - }; + } + ; LoadShieldIconResource(); @@ -179,7 +180,7 @@ private void LoadAccessControlEntry() if (error is WIN32_ERROR.ERROR_ACCESS_DENIED) { - ErrorMessage = + ErrorMessage = Strings.SecurityRequireReadPermissions.GetLocalizedResource() + "\r\n\r\n" + Strings.SecuritySuggestToTakeOwnership.GetLocalizedResource(); diff --git a/src/Files.App/ViewModels/Properties/SecurityViewModel.cs b/src/Files.App/ViewModels/Properties/SecurityViewModel.cs index 388ac13faa5e..30da282c7d7d 100644 --- a/src/Files.App/ViewModels/Properties/SecurityViewModel.cs +++ b/src/Files.App/ViewModels/Properties/SecurityViewModel.cs @@ -89,7 +89,8 @@ public SecurityViewModel(PropertiesPageNavigationParameter parameter) _path = defaultlistedItem.ItemPath; _isFolder = defaultlistedItem.PrimaryItemAttribute == StorageItemTypes.Folder && !defaultlistedItem.IsShortcut; break; - }; + } + ; var error = StorageSecurityService.GetAcl(_path, _isFolder, out _AccessControlList); _SelectedAccessControlEntry = AccessControlList.AccessControlEntries.FirstOrDefault(); diff --git a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs index e8dd09d35b09..2d8344bffaf2 100644 --- a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs @@ -10,7 +10,6 @@ using Windows.ApplicationModel; using Windows.Storage; using Windows.Storage.Pickers; -using Windows.System; using Windows.Win32.Storage.FileSystem; namespace Files.App.ViewModels.Settings @@ -195,7 +194,7 @@ private async Task ImportSettingsAsync() private async Task ExportSettingsAsync() { - string[] extensions = [Strings.ZipFileCapitalized.GetLocalizedResource(), "*.zip" ]; + string[] extensions = [Strings.ZipFileCapitalized.GetLocalizedResource(), "*.zip"]; bool result = CommonDialogService.Open_FileSaveDialog(MainWindow.Instance.WindowHandle, false, extensions, Environment.SpecialFolder.Desktop, out var filePath); if (!result) return; @@ -327,7 +326,7 @@ public bool LeaveAppRunning } } } - + public bool ShowSystemTrayIcon { get => UserSettingsService.GeneralSettingsService.ShowSystemTrayIcon; diff --git a/src/Files.App/ViewModels/Settings/LayoutViewModel.cs b/src/Files.App/ViewModels/Settings/LayoutViewModel.cs index f6f16bf0665c..f65656655edc 100644 --- a/src/Files.App/ViewModels/Settings/LayoutViewModel.cs +++ b/src/Files.App/ViewModels/Settings/LayoutViewModel.cs @@ -19,7 +19,7 @@ public LayoutViewModel() // Sorting options SelectedDefaultSortingIndex = UserSettingsService.LayoutSettingsService.DefaultSortOption == SortOption.FileTag ? FileTagSortingIndex : (int)UserSettingsService.LayoutSettingsService.DefaultSortOption; SelectedDefaultSortPriorityIndex = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles ? 2 : UserSettingsService.LayoutSettingsService.DefaultSortFilesFirst ? 1 : 0; - + // Grouping options SelectedDefaultGroupingIndex = UserSettingsService.LayoutSettingsService.DefaultGroupOption == GroupOption.FileTag ? FileTagGroupingIndex : (int)UserSettingsService.LayoutSettingsService.DefaultGroupOption; SelectedDefaultGroupByDateUnitIndex = (int)UserSettingsService.LayoutSettingsService.DefaultGroupByDateUnit; @@ -110,7 +110,7 @@ public bool SortInDescendingOrder } } - + private int selectedDefaultSortPriorityIndex; public int SelectedDefaultSortPriorityIndex { diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index e3b7b968c59f..8c683fe71885 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -8,7 +8,6 @@ using Microsoft.UI.Dispatching; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Media.Imaging; using System.IO; diff --git a/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs index e8be3e2b0905..63839ade64d8 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs @@ -4,7 +4,6 @@ using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media.Imaging; -using Windows.Storage.FileProperties; namespace Files.App.ViewModels.Previews { @@ -89,7 +88,7 @@ public async virtual Task> LoadPreviewAndDetailsAsync() Constants.ShellIconSizes.Jumbo, false, IconOptions.None); - + if (result is not null) await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () => FileImage = await result.ToBitmapAsync()); else diff --git a/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs index 0f59e3fa07ac..4ad8d1f71f26 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/CodePreviewViewModel.cs @@ -1,9 +1,9 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Frozen; using ColorCode; using Files.App.ViewModels.Properties; +using System.Collections.Frozen; namespace Files.App.ViewModels.Previews { diff --git a/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs index f4a2d746a3d1..f80160e0f2a1 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/FolderPreviewViewModel.cs @@ -32,7 +32,7 @@ private async Task LoadPreviewAndDetailsAsync() Constants.ShellIconSizes.Jumbo, true, IconOptions.None); - + if (result is not null) Thumbnail = await result.ToBitmapAsync(); @@ -59,7 +59,7 @@ private async Task LoadPreviewAndDetailsAsync() var headName = (await GitHelpers.GetRepositoryHead(gitDirectory))?.Name ?? string.Empty; var repositoryName = GitHelpers.GetOriginRepositoryName(gitDirectory); - if(!string.IsNullOrEmpty(gitDirectory)) + if (!string.IsNullOrEmpty(gitDirectory)) Item.FileDetails.Add(GetFileProperty("GitOriginRepositoryName", repositoryName)); if (!string.IsNullOrWhiteSpace(headName)) diff --git a/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs index 582cdb372726..6a323b90e1d6 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/ImagePreviewViewModel.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI; using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Media.Imaging; diff --git a/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs b/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs index d386744a3891..fa1d08dc7698 100644 --- a/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Previews/PDFPreviewViewModel.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI; using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Media.Imaging; diff --git a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs index f5fdc8f62a10..8b80c2b61e93 100644 --- a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs @@ -1,8 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.Collections.Specialized; using Files.Shared.Utils; +using System.Collections.Specialized; namespace Files.App.ViewModels.UserControls { @@ -38,49 +38,49 @@ private async void Items_CollectionChanged(object? sender, NotifyCollectionChang switch (e.Action) { case NotifyCollectionChangedAction.Add when e.NewItems is not null: - { - if (e.NewItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (_watchers.TryGetValue(parentPath, out var reference)) { - // Only increase the reference count if the watcher already exists - reference.Item2++; - return; + if (e.NewItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (_watchers.TryGetValue(parentPath, out var reference)) + { + // Only increase the reference count if the watcher already exists + reference.Item2++; + return; + } + + if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) + return; + + // Register new watcher + var watcher = await mutableFolder.GetFolderWatcherAsync(); + watcher.CollectionChanged += Watcher_CollectionChanged; + + _watchers.Add(parentPath, (watcher, 1)); + break; } - - if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) - return; - - // Register new watcher - var watcher = await mutableFolder.GetFolderWatcherAsync(); - watcher.CollectionChanged += Watcher_CollectionChanged; - - _watchers.Add(parentPath, (watcher, 1)); - break; - } case NotifyCollectionChangedAction.Remove when e.OldItems is not null: - { - if (e.OldItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (!_watchers.TryGetValue(parentPath, out var reference)) - return; - - // Decrease the reference count and remove the watcher if no references are present - reference.Item2--; - if (reference.Item2 < 1) { - reference.Item1.CollectionChanged -= Watcher_CollectionChanged; - reference.Item1.Dispose(); - _watchers.Remove(parentPath); + if (e.OldItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (!_watchers.TryGetValue(parentPath, out var reference)) + return; + + // Decrease the reference count and remove the watcher if no references are present + reference.Item2--; + if (reference.Item2 < 1) + { + reference.Item1.CollectionChanged -= Watcher_CollectionChanged; + reference.Item1.Dispose(); + _watchers.Remove(parentPath); + } + + break; } - - break; - } } } @@ -92,16 +92,16 @@ private async void Watcher_CollectionChanged(object? sender, NotifyCollectionCha switch (e.Action) { case NotifyCollectionChangedAction.Remove when e.OldItems is not null: - { - // Remove the matching item notified from the watcher - var item = e.OldItems.Cast().ElementAt(0); - var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); - if (itemToRemove is null) - return; - - await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); - break; - } + { + // Remove the matching item notified from the watcher + var item = e.OldItems.Cast().ElementAt(0); + var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); + if (itemToRemove is null) + return; + + await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); + break; + } } } } diff --git a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs index 37c13ec64a7e..507d7b3d819a 100644 --- a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs @@ -16,7 +16,6 @@ using Windows.Storage; using Windows.System; using Windows.UI.Core; -using OwlCore.Storage; namespace Files.App.ViewModels.UserControls { diff --git a/src/Files.App/ViewModels/UserControls/Widgets/NetworkLocationsWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/NetworkLocationsWidgetViewModel.cs index eb0b71e66414..17995df491f3 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/NetworkLocationsWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/NetworkLocationsWidgetViewModel.cs @@ -7,7 +7,6 @@ using System.Windows.Input; using Windows.System; using Windows.UI.Core; -using OwlCore.Storage; namespace Files.App.ViewModels.UserControls.Widgets { @@ -249,7 +248,7 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () => IsNoNetworkLocations = !Items.Any(); }); - } + } // Event methods diff --git a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs index 14c87e12a590..2d867c252741 100644 --- a/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseGroupableLayoutPage.cs @@ -289,7 +289,7 @@ protected virtual async void RenameTextBox_LostFocus(object sender, RoutedEventA catch (COMException) { - } + } } // Methods diff --git a/src/Files.App/Views/Layouts/BaseLayoutPage.cs b/src/Files.App/Views/Layouts/BaseLayoutPage.cs index 6b77a095a662..277bd8df7815 100644 --- a/src/Files.App/Views/Layouts/BaseLayoutPage.cs +++ b/src/Files.App/Views/Layouts/BaseLayoutPage.cs @@ -940,7 +940,7 @@ private async Task AddShellMenuItemsAsync(List s // Filter mainShellMenuItems that have a non-null LoadSubMenuAction var mainItemsWithSubMenu = mainShellMenuItems.Where(x => x.LoadSubMenuAction is not null); - + var mainSubMenuTasks = mainItemsWithSubMenu.Select(async item => { await item.LoadSubMenuAction(); @@ -955,7 +955,7 @@ private async Task AddShellMenuItemsAsync(List s await item.LoadSubMenuAction(); ShellContextFlyoutFactory.AddItemsToOverflowMenu(overflowItem, item); }); - + itemsControl?.Items.OfType().ForEach(item => { // Enable CharacterEllipsis text trimming for menu items @@ -981,7 +981,7 @@ private async Task AddShellMenuItemsAsync(List s clickAction(flyout.Items); } }); - + await Task.WhenAll(mainSubMenuTasks.Concat(overflowSubMenuTasks)); } diff --git a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs index a5fe0b31466b..eac0f3da62f3 100644 --- a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using CommunityToolkit.WinUI; -using CommunityToolkit.WinUI.Controls; using Files.App.Controls; using Files.App.ViewModels.Layouts; using Microsoft.UI.Xaml; diff --git a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs index 51feed73cacb..b2f10c3c4cdf 100644 --- a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs @@ -131,7 +131,7 @@ public sealed partial class GridLayoutPage : BaseGroupableLayoutPage /// /// Gets the visibility for the contextual property string in the Cards View layout. /// - public bool CardsViewShowContextualProperty=> + public bool CardsViewShowContextualProperty => LayoutSettingsService.CardsViewSize != CardsViewSizeKind.Small; /// diff --git a/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs b/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs index 8d4ffec387fc..0134b6a391ee 100644 --- a/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs +++ b/src/Files.App/Views/Properties/CompatibilityPage.xaml.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. using Files.App.ViewModels.Properties; -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Navigation; namespace Files.App.Views.Properties diff --git a/src/Files.App/Views/Properties/CustomizationPage.xaml.cs b/src/Files.App/Views/Properties/CustomizationPage.xaml.cs index 63e6b5702215..084970c73253 100644 --- a/src/Files.App/Views/Properties/CustomizationPage.xaml.cs +++ b/src/Files.App/Views/Properties/CustomizationPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Parameters; using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml.Navigation; diff --git a/src/Files.App/Views/Properties/GeneralPage.xaml.cs b/src/Files.App/Views/Properties/GeneralPage.xaml.cs index 61474e91a49b..4ce97aadcad8 100644 --- a/src/Files.App/Views/Properties/GeneralPage.xaml.cs +++ b/src/Files.App/Views/Properties/GeneralPage.xaml.cs @@ -8,7 +8,6 @@ using System.IO; using Windows.Storage; using Windows.Win32; -using Files.App.Helpers; namespace Files.App.Views.Properties { diff --git a/src/Files.App/Views/Properties/SecurityAdvancedPage.xaml.cs b/src/Files.App/Views/Properties/SecurityAdvancedPage.xaml.cs index 6b5d0e1d352e..f2aa0fd60bbb 100644 --- a/src/Files.App/Views/Properties/SecurityAdvancedPage.xaml.cs +++ b/src/Files.App/Views/Properties/SecurityAdvancedPage.xaml.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Items; -using Files.App.Data.Parameters; -using Files.App.Utils; using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml.Navigation; diff --git a/src/Files.App/Views/Properties/SecurityPage.xaml.cs b/src/Files.App/Views/Properties/SecurityPage.xaml.cs index 51479fd022d4..b04b1b43ca3c 100644 --- a/src/Files.App/Views/Properties/SecurityPage.xaml.cs +++ b/src/Files.App/Views/Properties/SecurityPage.xaml.cs @@ -1,9 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Files.App.Data.Items; -using Files.App.Data.Parameters; -using Files.App.Utils; using Files.App.ViewModels.Properties; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Navigation; diff --git a/src/Files.App/Views/ReleaseNotesPage.xaml.cs b/src/Files.App/Views/ReleaseNotesPage.xaml.cs index 67edb1a06d03..d93f7b5965f0 100644 --- a/src/Files.App/Views/ReleaseNotesPage.xaml.cs +++ b/src/Files.App/Views/ReleaseNotesPage.xaml.cs @@ -3,9 +3,9 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Navigation; using Microsoft.Web.WebView2.Core; using Windows.System; -using Microsoft.UI.Xaml.Navigation; namespace Files.App.Views { diff --git a/src/Files.App/Views/Settings/TagsPage.xaml.cs b/src/Files.App/Views/Settings/TagsPage.xaml.cs index 8d06c714b11e..43e5ae345d40 100644 --- a/src/Files.App/Views/Settings/TagsPage.xaml.cs +++ b/src/Files.App/Views/Settings/TagsPage.xaml.cs @@ -88,7 +88,7 @@ private void PreRemoveTag_Click(object sender, RoutedEventArgs e) private void CancelRemoveTag_Click(object sender, RoutedEventArgs e) { deleteItemFlyout?.Hide(); - } + } private void RemoveTag_Click(object sender, RoutedEventArgs e) { diff --git a/src/Files.App/Views/ShellPanesPage.xaml.cs b/src/Files.App/Views/ShellPanesPage.xaml.cs index 560708820a80..7acc6a47c6c9 100644 --- a/src/Files.App/Views/ShellPanesPage.xaml.cs +++ b/src/Files.App/Views/ShellPanesPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using CommunityToolkit.WinUI.Controls; using Files.App.Controls; using Microsoft.UI.Input; using Microsoft.UI.Xaml; diff --git a/src/Files.App/Views/Shells/BaseShellPage.cs b/src/Files.App/Views/Shells/BaseShellPage.cs index f4d8f5b9769b..78429f89c3d0 100644 --- a/src/Files.App/Views/Shells/BaseShellPage.cs +++ b/src/Files.App/Views/Shells/BaseShellPage.cs @@ -5,7 +5,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; -using Microsoft.UI.Xaml.Media.Animation; using Microsoft.UI.Xaml.Navigation; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; diff --git a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs index 9aeba6830f10..fa941ac4b5d9 100644 --- a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs +++ b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs @@ -4,9 +4,7 @@ using CommunityToolkit.WinUI; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Navigation; -using Windows.System; namespace Files.App.Views.Shells { @@ -105,7 +103,7 @@ protected override async void ViewModel_WorkingDirectoryModified(object sender, private async void ItemDisplayFrame_Navigated(object sender, NavigationEventArgs e) { ContentPage = await GetContentOrNullAsync(); - + if (ItemDisplayFrame.CurrentSourcePageType == typeof(ColumnLayoutPage)) { // Reset DataGrid Rows that may be in "cut" command mode @@ -155,7 +153,7 @@ public override void NavigateHome() { this.FindAscendant()?.ParentShellPageInstance?.NavigateHome(); } - + public override void NavigateToReleaseNotes() { this.FindAscendant()?.ParentShellPageInstance?.NavigateToReleaseNotes(); diff --git a/src/Files.Core.SourceGenerator/GlobalUsings.cs b/src/Files.Core.SourceGenerator/GlobalUsings.cs index 3a4d77484ca0..4bb4c7f1546b 100644 --- a/src/Files.Core.SourceGenerator/GlobalUsings.cs +++ b/src/Files.Core.SourceGenerator/GlobalUsings.cs @@ -27,4 +27,4 @@ global using global::System.Linq; global using global::System.Text; global using global::System.Threading.Tasks; -global using SystemIO = global::System.IO; \ No newline at end of file +global using SystemIO = global::System.IO; diff --git a/src/Files.Core.SourceGenerator/Parser/ReswParser.cs b/src/Files.Core.SourceGenerator/Parser/ReswParser.cs index 63780ab1609d..8584c885e092 100644 --- a/src/Files.Core.SourceGenerator/Parser/ReswParser.cs +++ b/src/Files.Core.SourceGenerator/Parser/ReswParser.cs @@ -21,10 +21,12 @@ internal static IEnumerable GetKeys(AdditionalText file) var document = XDocument.Load(file.Path); var keys = document .Descendants("data") - .Select(element => new ParserItem { + .Select(element => new ParserItem + { Key = element.Attribute("name")?.Value.Replace('.', ConstantSeparator)!, Value = element.Element("value")?.Value ?? string.Empty, - Comment = element.Element("comment")?.Value }) + Comment = element.Element("comment")?.Value + }) .Where(item => !string.IsNullOrEmpty(item.Key)); return keys is not null diff --git a/src/Files.Core.Storage/Extensions/StorageExtensions.File.cs b/src/Files.Core.Storage/Extensions/StorageExtensions.File.cs index a63151c041b9..ab94995a6f24 100644 --- a/src/Files.Core.Storage/Extensions/StorageExtensions.File.cs +++ b/src/Files.Core.Storage/Extensions/StorageExtensions.File.cs @@ -1,8 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using System.IO; using OwlCore.Storage.System.IO; +using System.IO; namespace Files.Core.Storage.Extensions { diff --git a/src/Files.Core.Storage/GlobalUsings.cs b/src/Files.Core.Storage/GlobalUsings.cs index 88fe6c99dc37..766a80e03127 100644 --- a/src/Files.Core.Storage/GlobalUsings.cs +++ b/src/Files.Core.Storage/GlobalUsings.cs @@ -2,25 +2,11 @@ // Licensed under the MIT License. // System -global using global::System; -global using global::System.Collections; -global using global::System.Collections.Generic; -global using global::System.Collections.ObjectModel; -global using global::System.Linq; -global using global::System.Threading; -global using global::System.Threading.Tasks; -global using global::System.ComponentModel; -global using global::System.Diagnostics; -global using global::System.Text.Json; -global using global::System.Text.Json.Serialization; -global using SystemIO = global::System.IO; - // Files.Core.Storage -global using global::Files.Core.Storage; -global using global::Files.Core.Storage.Contracts; -global using global::Files.Core.Storage.Storables; -global using global::Files.Core.Storage.Enums; global using global::Files.Core.Storage.EventArguments; -global using global::Files.Core.Storage.Extensions; global using global::OwlCore.Storage; +global using global::System; +global using global::System.Threading; +global using global::System.Threading.Tasks; +global using SystemIO = global::System.IO; diff --git a/src/Files.Core.Storage/Storables/DirectStorage/IDirectCopy.cs b/src/Files.Core.Storage/Storables/DirectStorage/IDirectCopy.cs index 97e91c075724..98231b9326c9 100644 --- a/src/Files.Core.Storage/Storables/DirectStorage/IDirectCopy.cs +++ b/src/Files.Core.Storage/Storables/DirectStorage/IDirectCopy.cs @@ -7,10 +7,10 @@ namespace Files.Core.Storage.Storables /// Provides direct copy operation of storage objects. /// public interface IDirectCopy : IModifiableFolder - { - /// - /// Creates a copy of the provided storable item in this folder. - /// - Task CreateCopyOfAsync(IStorableChild itemToCopy, bool overwrite = default, CancellationToken cancellationToken = default); - } + { + /// + /// Creates a copy of the provided storable item in this folder. + /// + Task CreateCopyOfAsync(IStorableChild itemToCopy, bool overwrite = default, CancellationToken cancellationToken = default); + } } diff --git a/src/Files.Core.Storage/Storables/DirectStorage/IDirectMove.cs b/src/Files.Core.Storage/Storables/DirectStorage/IDirectMove.cs index 9049a09cfb04..2b3a4e948441 100644 --- a/src/Files.Core.Storage/Storables/DirectStorage/IDirectMove.cs +++ b/src/Files.Core.Storage/Storables/DirectStorage/IDirectMove.cs @@ -7,10 +7,10 @@ namespace Files.Core.Storage.Storables /// Provides direct move operation of storage objects. /// public interface IDirectMove : IModifiableFolder - { - /// - /// Moves a storable item out of the provided folder, and into this folder. Returns the new item that resides in this folder. - /// - Task MoveFromAsync(IStorableChild itemToMove, IModifiableFolder source, bool overwrite = default, CancellationToken cancellationToken = default); - } + { + /// + /// Moves a storable item out of the provided folder, and into this folder. Returns the new item that resides in this folder. + /// + Task MoveFromAsync(IStorableChild itemToMove, IModifiableFolder source, bool overwrite = default, CancellationToken cancellationToken = default); + } } diff --git a/tests/Files.App.UITests/Views/MainPage.xaml.cs b/tests/Files.App.UITests/Views/MainPage.xaml.cs index 80cd478254bb..ca9b51c8b97d 100644 --- a/tests/Files.App.UITests/Views/MainPage.xaml.cs +++ b/tests/Files.App.UITests/Views/MainPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace Files.App.UITests.Views diff --git a/tests/Files.App.UITests/Views/OmnibarPage.xaml.cs b/tests/Files.App.UITests/Views/OmnibarPage.xaml.cs index 0fd9bc89e01e..89cf603520c8 100644 --- a/tests/Files.App.UITests/Views/OmnibarPage.xaml.cs +++ b/tests/Files.App.UITests/Views/OmnibarPage.xaml.cs @@ -4,7 +4,6 @@ using CommunityToolkit.WinUI; using Files.App.Controls; using Files.App.UITests.Data; -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using System.Collections.ObjectModel; diff --git a/tests/Files.App.UITests/Views/StorageControlsPage.xaml.cs b/tests/Files.App.UITests/Views/StorageControlsPage.xaml.cs index 0bc51d7e6ac5..85aa38a0769a 100644 --- a/tests/Files.App.UITests/Views/StorageControlsPage.xaml.cs +++ b/tests/Files.App.UITests/Views/StorageControlsPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace Files.App.UITests.Views diff --git a/tests/Files.App.UITests/Views/ThemedIconPage.xaml.cs b/tests/Files.App.UITests/Views/ThemedIconPage.xaml.cs index cfcee70e7791..c6a98f94af80 100644 --- a/tests/Files.App.UITests/Views/ThemedIconPage.xaml.cs +++ b/tests/Files.App.UITests/Views/ThemedIconPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace Files.App.UITests.Views diff --git a/tests/Files.App.UITests/Views/ToolbarPage.xaml.cs b/tests/Files.App.UITests/Views/ToolbarPage.xaml.cs index ae8e5bdd48fa..f5aa6dbda7bd 100644 --- a/tests/Files.App.UITests/Views/ToolbarPage.xaml.cs +++ b/tests/Files.App.UITests/Views/ToolbarPage.xaml.cs @@ -1,7 +1,6 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace Files.App.UITests.Views diff --git a/tests/Files.InteractionTests/Tests/SettingsTests.cs b/tests/Files.InteractionTests/Tests/SettingsTests.cs index fc19e80971aa..1a9fae510cda 100644 --- a/tests/Files.InteractionTests/Tests/SettingsTests.cs +++ b/tests/Files.InteractionTests/Tests/SettingsTests.cs @@ -2,8 +2,6 @@ // Licensed under the MIT License. using OpenQA.Selenium.Interactions; -using System; -using System.Threading; namespace Files.InteractionTests.Tests { From c64b914af4d08eb8819dcfed5fb8f6312dabb9f1 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 22:50:18 -0400 Subject: [PATCH 074/107] Code Quality: Prevent exception when AppModel.LastSelectedTabIndex is set before MainPage is loaded (#17309) Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com> --- src/Files.App/Data/Models/AppModel.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Files.App/Data/Models/AppModel.cs b/src/Files.App/Data/Models/AppModel.cs index 8b7e213ab34a..96a537e463e5 100644 --- a/src/Files.App/Data/Models/AppModel.cs +++ b/src/Files.App/Data/Models/AppModel.cs @@ -43,8 +43,10 @@ public int TabStripSelectedIndex if (value >= 0 && value < MainPageViewModel.AppInstances.Count) { var rootFrame = (Frame)MainWindow.Instance.Content; - var mainView = (MainPage)rootFrame.Content; - mainView.ViewModel.SelectedTabItem = MainPageViewModel.AppInstances[value]; + if (rootFrame.Content is MainPage mainView) + { + mainView.ViewModel.SelectedTabItem = MainPageViewModel.AppInstances[value]; + } } } catch (COMException) From 2f5ee4764208f438a7df2a1d6e7fc0f0e811c264 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 22:55:54 -0400 Subject: [PATCH 075/107] Code Quality: Prevent crash when sync root info is null (#17318) Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com> --- src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs b/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs index 4573df64e0d9..e49eb08c3f05 100644 --- a/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs +++ b/src/Files.App/Utils/Storage/Helpers/SyncRootHelpers.cs @@ -60,6 +60,11 @@ private static unsafe (bool Success, ulong Capacity, ulong Used) GetSyncRootQuot return (false, 0, 0); } + if (syncRootInfo is null) + { + return (false, 0, 0); + } + return GetSyncRootQuotaFromSyncRootId(syncRootInfo.Id); } } From 28ce3cf80b14c95ab84b736cbdaaf3bd517a9cc8 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 10:30:08 -0400 Subject: [PATCH 076/107] Fix: Added null check for op before calling Unadvise (#17315) --- src/Files.App/Utils/Shell/ShellFileOperations2.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/Utils/Shell/ShellFileOperations2.cs b/src/Files.App/Utils/Shell/ShellFileOperations2.cs index daf610d95fc9..59512f57091d 100644 --- a/src/Files.App/Utils/Shell/ShellFileOperations2.cs +++ b/src/Files.App/Utils/Shell/ShellFileOperations2.cs @@ -576,7 +576,7 @@ protected virtual void Dispose(bool disposing) // Dispose managed state (managed objects). } - if (sink != null) + if (sink != null && op != null) { op.Unadvise(sinkCookie); } From 9b806b384eb3315b588734712f09be13fb639c0b Mon Sep 17 00:00:00 2001 From: hishitetsu <66369541+hishitetsu@users.noreply.github.com> Date: Sun, 27 Jul 2025 11:09:01 +0900 Subject: [PATCH 077/107] Code Quality: Don't wait canceled git fetch (#17330) --- src/Files.App/Utils/Git/GitHelpers.cs | 12 +++++++++++- src/Files.App/Views/Shells/BaseShellPage.cs | 9 +++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Files.App/Utils/Git/GitHelpers.cs b/src/Files.App/Utils/Git/GitHelpers.cs index 59d6b4589e60..340e9395f89c 100644 --- a/src/Files.App/Utils/Git/GitHelpers.cs +++ b/src/Files.App/Utils/Git/GitHelpers.cs @@ -333,7 +333,7 @@ public static bool ValidateBranchNameForRepository(string branchName, string rep branch.FriendlyName.Equals(branchName, StringComparison.OrdinalIgnoreCase)); } - public static async void FetchOrigin(string? repositoryPath) + public static async void FetchOrigin(string? repositoryPath, CancellationToken cancellationToken = default) { if (string.IsNullOrWhiteSpace(repositoryPath)) return; @@ -359,11 +359,15 @@ public static async void FetchOrigin(string? repositoryPath) await DoGitOperationAsync(() => { + cancellationToken.ThrowIfCancellationRequested(); + var result = GitOperationResult.Success; try { foreach (var remote in repository.Network.Remotes) { + cancellationToken.ThrowIfCancellationRequested(); + LibGit2Sharp.Commands.Fetch( repository, remote.Name, @@ -371,6 +375,8 @@ await DoGitOperationAsync(() => _fetchOptions, "git fetch updated a ref"); } + + cancellationToken.ThrowIfCancellationRequested(); } catch (Exception ex) { @@ -384,6 +390,10 @@ await DoGitOperationAsync(() => MainWindow.Instance.DispatcherQueue.TryEnqueue(() => { + if (cancellationToken.IsCancellationRequested) + // Do nothing because the operation was cancelled and another fetch may be in progress + return; + IsExecutingGitAction = false; GitFetchCompleted?.Invoke(null, EventArgs.Empty); }); diff --git a/src/Files.App/Views/Shells/BaseShellPage.cs b/src/Files.App/Views/Shells/BaseShellPage.cs index 78429f89c3d0..a63a8447c1a0 100644 --- a/src/Files.App/Views/Shells/BaseShellPage.cs +++ b/src/Files.App/Views/Shells/BaseShellPage.cs @@ -238,16 +238,17 @@ protected async void FilesystemViewModel_DirectoryInfoUpdated(object sender, Eve ? headBranch.Name : string.Empty; + var isGitFetchCanceled = false; if (!_gitFetch.IsCompleted) { _gitFetchToken.Cancel(); - await _gitFetch; - _gitFetchToken.TryReset(); + _gitFetchToken = new CancellationTokenSource(); + isGitFetchCanceled = true; } - if (InstanceViewModel.IsGitRepository && !GitHelpers.IsExecutingGitAction) + if (InstanceViewModel.IsGitRepository && (!GitHelpers.IsExecutingGitAction || isGitFetchCanceled)) { _gitFetch = Task.Run( - () => GitHelpers.FetchOrigin(InstanceViewModel.GitRepositoryPath), + () => GitHelpers.FetchOrigin(InstanceViewModel.GitRepositoryPath, _gitFetchToken.Token), _gitFetchToken.Token); } } From 9d879a956886154dff151647fe4dc9a8361f8b5e Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Sat, 26 Jul 2025 22:12:44 -0400 Subject: [PATCH 078/107] Code Quality: Fixed Omnibar navigation in search results (#17304) --- .../ViewModels/UserControls/NavigationToolbarViewModel.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 8c683fe71885..e45120940a4e 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -499,12 +499,13 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync( public async Task HandleItemNavigationAsync(string path) { - if (ContentPageContext.ShellPage is null || PathComponents.LastOrDefault()?.Path is not { } currentPath) + if (ContentPageContext.ShellPage is null) return; + var currentPath = PathComponents.LastOrDefault()?.Path; var isFtp = FtpHelpers.IsFtpPath(path); var normalizedInput = NormalizePathInput(path, isFtp); - if (currentPath.Equals(normalizedInput, StringComparison.OrdinalIgnoreCase) || + if (currentPath is not null && currentPath.Equals(normalizedInput, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(normalizedInput)) return; @@ -533,7 +534,7 @@ public async Task HandleItemNavigationAsync(string path) else { normalizedInput = StorageFileExtensions.GetResolvedPath(normalizedInput, isFtp); - if (currentPath.Equals(normalizedInput, StringComparison.OrdinalIgnoreCase)) + if (currentPath is not null && currentPath.Equals(normalizedInput, StringComparison.OrdinalIgnoreCase)) return; var item = await FilesystemTasks.Wrap(() => DriveHelpers.GetRootFromPathAsync(normalizedInput)); From d3c6d87b1edaab206d18da2b57aa4e98c3e9946f Mon Sep 17 00:00:00 2001 From: hishitetsu <66369541+hishitetsu@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:10:10 +0900 Subject: [PATCH 079/107] Code Quality: Unsubscribe events in MediaPreview (#17335) --- .../UserControls/FilePreviews/MediaPreview.xaml.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs index 65f79818924f..78005c148ec0 100644 --- a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs @@ -17,6 +17,7 @@ public MediaPreview(MediaPreviewViewModel model) ViewModel = model; InitializeComponent(); PlayerContext.Loaded += PlayerContext_Loaded; + PlayerContext.Unloaded += PlayerContext_Unloaded; Unloaded += MediaPreview_Unloaded; } @@ -29,6 +30,12 @@ private void PlayerContext_Loaded(object sender, RoutedEventArgs e) ViewModel.TogglePlaybackRequested += TogglePlaybackRequestInvoked; } + private void PlayerContext_Unloaded(object sender, RoutedEventArgs e) + { + PlayerContext.MediaPlayer.VolumeChanged -= MediaPlayer_VolumeChanged; + ViewModel.TogglePlaybackRequested -= TogglePlaybackRequestInvoked; + } + private void MediaPreview_Unloaded(object sender, RoutedEventArgs e) { // The MediaPlayerElement isn't properly disposed by Windows so we set the source to null @@ -36,6 +43,7 @@ private void MediaPreview_Unloaded(object sender, RoutedEventArgs e) PlayerContext.Source = null; PlayerContext.Loaded -= PlayerContext_Loaded; + PlayerContext.Unloaded -= PlayerContext_Unloaded; Unloaded -= MediaPreview_Unloaded; } @@ -47,7 +55,7 @@ private void MediaPlayer_VolumeChanged(MediaPlayer sender, object args) } } - private void TogglePlaybackRequestInvoked(object sender, EventArgs e) + private void TogglePlaybackRequestInvoked(object? sender, EventArgs e) { if (PlayerContext.MediaPlayer.PlaybackSession.PlaybackState is not MediaPlaybackState.Playing) { From 27d9db171da1cc4a335b5dbb69fc8ec579190fd5 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:30:03 -0400 Subject: [PATCH 080/107] Code Quality: Properly handle cancellation and null shell items in WindowsDialogService (#17310) --- .../Services/Windows/WindowsDialogService.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Files.App/Services/Windows/WindowsDialogService.cs b/src/Files.App/Services/Windows/WindowsDialogService.cs index 60ee67f767c6..57b16c37e0fe 100644 --- a/src/Files.App/Services/Windows/WindowsDialogService.cs +++ b/src/Files.App/Services/Windows/WindowsDialogService.cs @@ -65,13 +65,17 @@ public unsafe bool Open_FileOpenDialog(nint hWnd, bool pickFoldersOnly, string[] pDialog.Get()->SetDefaultFolder(pDefaultFolderShellItem.Get()); // Show the dialog - pDialog.Get()->Show(new HWND(hWnd)); + hr = pDialog.Get()->Show(new HWND(hWnd)); + if (hr.Value == unchecked((int)0x800704C7)) // HRESULT_FROM_WIN32(ERROR_CANCELLED) + return false; + + hr.ThrowOnFailure(); // Get the file that user chose using ComPtr pResultShellItem = default; pDialog.Get()->GetResult(pResultShellItem.GetAddressOf()); - if (pResultShellItem.Get() == null) - throw new COMException("FileSaveDialog returned invalid shell item."); + if (pResultShellItem.Get() is null) + throw new COMException("FileOpenDialog returned invalid shell item."); pResultShellItem.Get()->GetDisplayName(SIGDN.SIGDN_FILESYSPATH, out var lpFilePath); filePath = lpFilePath.ToString(); @@ -135,12 +139,16 @@ public unsafe bool Open_FileSaveDialog(nint hWnd, bool pickFoldersOnly, string[] pDialog.Get()->SetDefaultFolder(pDefaultFolderShellItem.Get()); // Show the dialog - pDialog.Get()->Show(new HWND(hWnd)); + hr = pDialog.Get()->Show(new HWND(hWnd)); + if (hr.Value == unchecked((int)0x800704C7)) // HRESULT_FROM_WIN32(ERROR_CANCELLED) + return false; + + hr.ThrowOnFailure(); // Get the file that user chose using ComPtr pResultShellItem = default; pDialog.Get()->GetResult(pResultShellItem.GetAddressOf()); - if (pResultShellItem.Get() == null) + if (pResultShellItem.Get() is null) throw new COMException("FileSaveDialog returned invalid shell item."); pResultShellItem.Get()->GetDisplayName(SIGDN.SIGDN_FILESYSPATH, out var lpFilePath); filePath = lpFilePath.ToString(); From 7b4325ab9b0a8b3c1d9e9f9a87c9b3728ccb9b9f Mon Sep 17 00:00:00 2001 From: hishitetsu <66369541+hishitetsu@users.noreply.github.com> Date: Tue, 29 Jul 2025 00:01:38 +0900 Subject: [PATCH 081/107] Code Quality: Fixed an issue where the fix in #17335 didn't work (#17337) --- .../UserControls/FilePreviews/MediaPreview.xaml.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs index 78005c148ec0..a71c7d30baa1 100644 --- a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs @@ -17,7 +17,6 @@ public MediaPreview(MediaPreviewViewModel model) ViewModel = model; InitializeComponent(); PlayerContext.Loaded += PlayerContext_Loaded; - PlayerContext.Unloaded += PlayerContext_Unloaded; Unloaded += MediaPreview_Unloaded; } @@ -30,12 +29,6 @@ private void PlayerContext_Loaded(object sender, RoutedEventArgs e) ViewModel.TogglePlaybackRequested += TogglePlaybackRequestInvoked; } - private void PlayerContext_Unloaded(object sender, RoutedEventArgs e) - { - PlayerContext.MediaPlayer.VolumeChanged -= MediaPlayer_VolumeChanged; - ViewModel.TogglePlaybackRequested -= TogglePlaybackRequestInvoked; - } - private void MediaPreview_Unloaded(object sender, RoutedEventArgs e) { // The MediaPlayerElement isn't properly disposed by Windows so we set the source to null @@ -43,8 +36,10 @@ private void MediaPreview_Unloaded(object sender, RoutedEventArgs e) PlayerContext.Source = null; PlayerContext.Loaded -= PlayerContext_Loaded; - PlayerContext.Unloaded -= PlayerContext_Unloaded; Unloaded -= MediaPreview_Unloaded; + + PlayerContext.MediaPlayer.VolumeChanged -= MediaPlayer_VolumeChanged; + ViewModel.TogglePlaybackRequested -= TogglePlaybackRequestInvoked; } private void MediaPlayer_VolumeChanged(MediaPlayer sender, object args) From 72030071cb2e44508819f17cfe26c41fa449024b Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Tue, 29 Jul 2025 06:54:37 +0900 Subject: [PATCH 082/107] Code Quality: Re-organize the structure of Files.App.Storage (#17340) --- .../{Storables/FtpStorage => Ftp}/FtpHelpers.cs | 2 +- .../{Storables/FtpStorage => Ftp}/FtpManager.cs | 2 +- .../{Storables/FtpStorage => Ftp}/FtpStorable.cs | 2 +- .../{Storables/FtpStorage => Ftp}/FtpStorageFile.cs | 2 +- .../{Storables/FtpStorage => Ftp}/FtpStorageFolder.cs | 2 +- .../{Storables/FtpStorage => Ftp}/FtpStorageService.cs | 2 +- .../{Storables => Legacy}/HomeFolder/HomeFolder.cs | 0 .../{Storables => Legacy}/HomeFolder/IHomeFolder.cs | 0 .../NativeStorageLegacy/NativeStorageService.cs | 0 .../{Watchers => Legacy}/RecycleBinWatcher.cs | 0 .../Storables/WindowsStorage/IFolderSettings.cs | 6 ------ .../Helpers}/WindowsStorableHelpers.Icon.cs | 0 .../Helpers}/WindowsStorableHelpers.PowerShell.cs | 0 .../Helpers}/WindowsStorableHelpers.Process.cs | 0 .../Helpers}/WindowsStorableHelpers.Shell.cs | 8 ++++---- .../Helpers}/WindowsStorableHelpers.Storage.cs | 0 .../{Storables/WindowsStorage => Windows}/IWindowsFile.cs | 0 .../WindowsStorage => Windows}/IWindowsFolder.cs | 0 .../WindowsStorage => Windows}/IWindowsStorable.cs | 0 .../Managers}/JumpListDestinationType.cs | 0 .../WindowsStorage => Windows/Managers}/JumpListItem.cs | 0 .../Managers}/JumpListItemType.cs | 0 .../Managers}/JumpListManager.cs | 0 .../WindowsStorage => Windows/Managers}/STATask.cs | 0 .../Managers}/SystemTrayManager.cs | 0 .../WindowsStorage => Windows/Managers}/TaskbarManager.cs | 0 .../Managers/WindowsContextMenuItem.cs} | 4 ++-- .../Managers/WindowsContextMenuType.cs} | 2 +- .../WindowsStorage => Windows}/WindowsBulkOperations.cs | 0 .../WindowsBulkOperationsEventArgs.cs | 0 .../WindowsBulkOperationsSink.Methods.cs | 0 .../WindowsBulkOperationsSink.VTable.cs | 0 .../{Storables/WindowsStorage => Windows}/WindowsFile.cs | 0 .../WindowsStorage => Windows}/WindowsFolder.cs | 0 .../WindowsStorage => Windows}/WindowsStorable.cs | 6 ++++++ 35 files changed, 19 insertions(+), 19 deletions(-) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpHelpers.cs (98%) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpManager.cs (88%) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpStorable.cs (95%) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpStorageFile.cs (95%) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpStorageFolder.cs (99%) rename src/Files.App.Storage/{Storables/FtpStorage => Ftp}/FtpStorageService.cs (97%) rename src/Files.App.Storage/{Storables => Legacy}/HomeFolder/HomeFolder.cs (100%) rename src/Files.App.Storage/{Storables => Legacy}/HomeFolder/IHomeFolder.cs (100%) rename src/Files.App.Storage/{Storables => Legacy}/NativeStorageLegacy/NativeStorageService.cs (100%) rename src/Files.App.Storage/{Watchers => Legacy}/RecycleBinWatcher.cs (100%) delete mode 100644 src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Helpers}/WindowsStorableHelpers.Icon.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Helpers}/WindowsStorableHelpers.PowerShell.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Helpers}/WindowsStorableHelpers.Process.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Helpers}/WindowsStorableHelpers.Shell.cs (97%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Helpers}/WindowsStorableHelpers.Storage.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/IWindowsFile.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/IWindowsFolder.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/IWindowsStorable.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/JumpListDestinationType.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/JumpListItem.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/JumpListItemType.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/JumpListManager.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/STATask.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/SystemTrayManager.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows/Managers}/TaskbarManager.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage/ContextMenuItem.cs => Windows/Managers/WindowsContextMenuItem.cs} (75%) rename src/Files.App.Storage/{Storables/WindowsStorage/ContextMenuType.cs => Windows/Managers/WindowsContextMenuType.cs} (86%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsBulkOperations.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsBulkOperationsEventArgs.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsBulkOperationsSink.Methods.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsBulkOperationsSink.VTable.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsFile.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsFolder.cs (100%) rename src/Files.App.Storage/{Storables/WindowsStorage => Windows}/WindowsStorable.cs (95%) diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpHelpers.cs b/src/Files.App.Storage/Ftp/FtpHelpers.cs similarity index 98% rename from src/Files.App.Storage/Storables/FtpStorage/FtpHelpers.cs rename to src/Files.App.Storage/Ftp/FtpHelpers.cs index 15d0d920c773..6c2cec698daf 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpHelpers.cs +++ b/src/Files.App.Storage/Ftp/FtpHelpers.cs @@ -4,7 +4,7 @@ using Files.Shared.Extensions; using FluentFTP; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { internal static class FtpHelpers { diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpManager.cs b/src/Files.App.Storage/Ftp/FtpManager.cs similarity index 88% rename from src/Files.App.Storage/Storables/FtpStorage/FtpManager.cs rename to src/Files.App.Storage/Ftp/FtpManager.cs index 5a9efb6fc595..db737c199771 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpManager.cs +++ b/src/Files.App.Storage/Ftp/FtpManager.cs @@ -3,7 +3,7 @@ using System.Net; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { public static class FtpManager { diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs b/src/Files.App.Storage/Ftp/FtpStorable.cs similarity index 95% rename from src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs rename to src/Files.App.Storage/Ftp/FtpStorable.cs index 3d927df0de68..9cf6f855b2ee 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpStorable.cs +++ b/src/Files.App.Storage/Ftp/FtpStorable.cs @@ -3,7 +3,7 @@ using FluentFTP; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { public abstract class FtpStorable : IStorableChild { diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageFile.cs b/src/Files.App.Storage/Ftp/FtpStorageFile.cs similarity index 95% rename from src/Files.App.Storage/Storables/FtpStorage/FtpStorageFile.cs rename to src/Files.App.Storage/Ftp/FtpStorageFile.cs index 35ecb890e9c0..decfdcaabfd6 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageFile.cs +++ b/src/Files.App.Storage/Ftp/FtpStorageFile.cs @@ -3,7 +3,7 @@ using System.IO; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { public sealed class FtpStorageFile : FtpStorable, IChildFile { diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageFolder.cs b/src/Files.App.Storage/Ftp/FtpStorageFolder.cs similarity index 99% rename from src/Files.App.Storage/Storables/FtpStorage/FtpStorageFolder.cs rename to src/Files.App.Storage/Ftp/FtpStorageFolder.cs index 3a5d838079fa..83b01dccaa88 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageFolder.cs +++ b/src/Files.App.Storage/Ftp/FtpStorageFolder.cs @@ -6,7 +6,7 @@ using System.IO; using System.Runtime.CompilerServices; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { public sealed class FtpStorageFolder : FtpStorable, IModifiableFolder, IChildFolder, IDirectCopy, IDirectMove, IGetFirstByName { diff --git a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageService.cs b/src/Files.App.Storage/Ftp/FtpStorageService.cs similarity index 97% rename from src/Files.App.Storage/Storables/FtpStorage/FtpStorageService.cs rename to src/Files.App.Storage/Ftp/FtpStorageService.cs index 7e97f7e07d3f..20df207f45f1 100644 --- a/src/Files.App.Storage/Storables/FtpStorage/FtpStorageService.cs +++ b/src/Files.App.Storage/Ftp/FtpStorageService.cs @@ -4,7 +4,7 @@ using FluentFTP; using System.IO; -namespace Files.App.Storage.Storables +namespace Files.App.Storage { /// public sealed class FtpStorageService : IFtpStorageService diff --git a/src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs b/src/Files.App.Storage/Legacy/HomeFolder/HomeFolder.cs similarity index 100% rename from src/Files.App.Storage/Storables/HomeFolder/HomeFolder.cs rename to src/Files.App.Storage/Legacy/HomeFolder/HomeFolder.cs diff --git a/src/Files.App.Storage/Storables/HomeFolder/IHomeFolder.cs b/src/Files.App.Storage/Legacy/HomeFolder/IHomeFolder.cs similarity index 100% rename from src/Files.App.Storage/Storables/HomeFolder/IHomeFolder.cs rename to src/Files.App.Storage/Legacy/HomeFolder/IHomeFolder.cs diff --git a/src/Files.App.Storage/Storables/NativeStorageLegacy/NativeStorageService.cs b/src/Files.App.Storage/Legacy/NativeStorageLegacy/NativeStorageService.cs similarity index 100% rename from src/Files.App.Storage/Storables/NativeStorageLegacy/NativeStorageService.cs rename to src/Files.App.Storage/Legacy/NativeStorageLegacy/NativeStorageService.cs diff --git a/src/Files.App.Storage/Watchers/RecycleBinWatcher.cs b/src/Files.App.Storage/Legacy/RecycleBinWatcher.cs similarity index 100% rename from src/Files.App.Storage/Watchers/RecycleBinWatcher.cs rename to src/Files.App.Storage/Legacy/RecycleBinWatcher.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs b/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs deleted file mode 100644 index 55a16c37bc58..000000000000 --- a/src/Files.App.Storage/Storables/WindowsStorage/IFolderSettings.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Files.App.Storage -{ - public interface IFolderSettings - { - } -} diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Icon.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Icon.cs rename to src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Icon.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.PowerShell.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.PowerShell.cs rename to src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.PowerShell.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Process.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Process.cs rename to src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Process.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Shell.cs similarity index 97% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs rename to src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Shell.cs index f63a2502009b..41eb10877af7 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Shell.cs +++ b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Shell.cs @@ -201,7 +201,7 @@ public static HRESULT TryUnpinFolderFromQuickAccess(this IWindowsFolder @this) return HRESULT.S_OK; } - public static IEnumerable GetShellNewItems(this IWindowsFolder @this) + public static IEnumerable GetShellNewItems(this IWindowsFolder @this) { HRESULT hr = default; @@ -249,7 +249,7 @@ public static IEnumerable GetShellNewItems(this IWindowsFolder return []; // Enumerates and populates the list - List shellNewItems = []; + List shellNewItems = []; for (uint dwIndex = 0; dwIndex < dwCount; dwIndex++) { MENUITEMINFOW mii = default; @@ -264,7 +264,7 @@ public static IEnumerable GetShellNewItems(this IWindowsFolder { Id = mii.wID, Name = mii.dwTypeData.ToString(), - Type = (ContextMenuType)mii.fState, + Type = (WindowsContextMenuType)mii.fState, }); } @@ -274,7 +274,7 @@ public static IEnumerable GetShellNewItems(this IWindowsFolder return shellNewItems; } - public static bool InvokeShellNewItem(this IWindowsFolder @this, ContextMenuItem item) + public static bool InvokeShellNewItem(this IWindowsFolder @this, WindowsContextMenuItem item) { HRESULT hr = default; diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs b/src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Storage.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorableHelpers.Storage.cs rename to src/Files.App.Storage/Windows/Helpers/WindowsStorableHelpers.Storage.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs b/src/Files.App.Storage/Windows/IWindowsFile.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/IWindowsFile.cs rename to src/Files.App.Storage/Windows/IWindowsFile.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs b/src/Files.App.Storage/Windows/IWindowsFolder.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/IWindowsFolder.cs rename to src/Files.App.Storage/Windows/IWindowsFolder.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs b/src/Files.App.Storage/Windows/IWindowsStorable.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/IWindowsStorable.cs rename to src/Files.App.Storage/Windows/IWindowsStorable.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs b/src/Files.App.Storage/Windows/Managers/JumpListDestinationType.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/JumpListDestinationType.cs rename to src/Files.App.Storage/Windows/Managers/JumpListDestinationType.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListItem.cs b/src/Files.App.Storage/Windows/Managers/JumpListItem.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/JumpListItem.cs rename to src/Files.App.Storage/Windows/Managers/JumpListItem.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListItemType.cs b/src/Files.App.Storage/Windows/Managers/JumpListItemType.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/JumpListItemType.cs rename to src/Files.App.Storage/Windows/Managers/JumpListItemType.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs b/src/Files.App.Storage/Windows/Managers/JumpListManager.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/JumpListManager.cs rename to src/Files.App.Storage/Windows/Managers/JumpListManager.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/STATask.cs b/src/Files.App.Storage/Windows/Managers/STATask.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/STATask.cs rename to src/Files.App.Storage/Windows/Managers/STATask.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs b/src/Files.App.Storage/Windows/Managers/SystemTrayManager.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/SystemTrayManager.cs rename to src/Files.App.Storage/Windows/Managers/SystemTrayManager.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/TaskbarManager.cs b/src/Files.App.Storage/Windows/Managers/TaskbarManager.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/TaskbarManager.cs rename to src/Files.App.Storage/Windows/Managers/TaskbarManager.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs b/src/Files.App.Storage/Windows/Managers/WindowsContextMenuItem.cs similarity index 75% rename from src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs rename to src/Files.App.Storage/Windows/Managers/WindowsContextMenuItem.cs index 179f6d83b75a..03af85e6a03e 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuItem.cs +++ b/src/Files.App.Storage/Windows/Managers/WindowsContextMenuItem.cs @@ -6,9 +6,9 @@ namespace Files.App.Storage /// /// Represents a Windows Shell ContextMenu item. /// - public partial class ContextMenuItem + public partial class WindowsContextMenuItem { - public ContextMenuType Type { get; set; } + public WindowsContextMenuType Type { get; set; } public uint Id { get; set; } diff --git a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs b/src/Files.App.Storage/Windows/Managers/WindowsContextMenuType.cs similarity index 86% rename from src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs rename to src/Files.App.Storage/Windows/Managers/WindowsContextMenuType.cs index 31e3b939a30f..904a089fac19 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/ContextMenuType.cs +++ b/src/Files.App.Storage/Windows/Managers/WindowsContextMenuType.cs @@ -3,7 +3,7 @@ namespace Files.App.Storage { - public enum ContextMenuType + public enum WindowsContextMenuType { Normal = 0x00000000, diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs b/src/Files.App.Storage/Windows/WindowsBulkOperations.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperations.cs rename to src/Files.App.Storage/Windows/WindowsBulkOperations.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsEventArgs.cs b/src/Files.App.Storage/Windows/WindowsBulkOperationsEventArgs.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsEventArgs.cs rename to src/Files.App.Storage/Windows/WindowsBulkOperationsEventArgs.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsSink.Methods.cs b/src/Files.App.Storage/Windows/WindowsBulkOperationsSink.Methods.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsSink.Methods.cs rename to src/Files.App.Storage/Windows/WindowsBulkOperationsSink.Methods.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsSink.VTable.cs b/src/Files.App.Storage/Windows/WindowsBulkOperationsSink.VTable.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsBulkOperationsSink.VTable.cs rename to src/Files.App.Storage/Windows/WindowsBulkOperationsSink.VTable.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs b/src/Files.App.Storage/Windows/WindowsFile.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsFile.cs rename to src/Files.App.Storage/Windows/WindowsFile.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs b/src/Files.App.Storage/Windows/WindowsFolder.cs similarity index 100% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsFolder.cs rename to src/Files.App.Storage/Windows/WindowsFolder.cs diff --git a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs b/src/Files.App.Storage/Windows/WindowsStorable.cs similarity index 95% rename from src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs rename to src/Files.App.Storage/Windows/WindowsStorable.cs index bde2995b6490..d7ed69cc2f31 100644 --- a/src/Files.App.Storage/Storables/WindowsStorage/WindowsStorable.cs +++ b/src/Files.App.Storage/Windows/WindowsStorable.cs @@ -11,6 +11,7 @@ namespace Files.App.Storage { public unsafe abstract class WindowsStorable : IWindowsStorable { + /// public IShellItem* ThisPtr { [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -20,6 +21,7 @@ public IShellItem* ThisPtr set; } + /// public IContextMenu* ContextMenu { [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -29,8 +31,10 @@ public IContextMenu* ContextMenu set; } + /// public string Id => this.GetDisplayName(SIGDN.SIGDN_FILESYSPATH); + /// public string Name => this.GetDisplayName(SIGDN.SIGDN_PARENTRELATIVEFORUI); public static WindowsStorable? TryParse(string szPath) @@ -54,6 +58,7 @@ public IContextMenu* ContextMenu return isFolder ? new WindowsFolder(pShellItem) : new WindowsFile(pShellItem); } + /// public unsafe Task GetParentAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -72,6 +77,7 @@ public override bool Equals(object? obj) return Equals(obj as IWindowsStorable); } + /// public override int GetHashCode() { return HashCode.Combine(Id, Name); From f8b3725a13ec57aeef303e02dd18eea13a3e9118 Mon Sep 17 00:00:00 2001 From: Filippo Ferrario <102259289+ferrariofilippo@users.noreply.github.com> Date: Tue, 29 Jul 2025 17:17:48 +0200 Subject: [PATCH 083/107] Fix: Fixed issue where delete key wouldn't work after removing item from selection (#17348) --- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 12 +++++++++++- src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs | 14 +++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 40121e1ea23d..8ec82e44f150 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -884,8 +884,18 @@ private void ItemSelected_Checked(object sender, RoutedEventArgs e) private void ItemSelected_Unchecked(object sender, RoutedEventArgs e) { - if (sender is CheckBox checkBox && checkBox.DataContext is ListedItem item && FileList.SelectedItems.Contains(item)) + if (sender is not CheckBox checkBox) + return; + + if (checkBox.DataContext is ListedItem item && FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Remove(item); + + // Workaround for #17298 + checkBox.IsTabStop = false; + checkBox.IsEnabled = false; + checkBox.IsEnabled = true; + checkBox.IsTabStop = true; + FileList.Focus(FocusState.Programmatic); } private new void FileList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) diff --git a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs index b2f10c3c4cdf..a62cddccbf4a 100644 --- a/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs @@ -670,10 +670,18 @@ checkBox.DataContext is ListedItem item && private void ItemSelected_Unchecked(object sender, RoutedEventArgs e) { - if (sender is CheckBox checkBox && - checkBox.DataContext is ListedItem item && - FileList.SelectedItems.Contains(item)) + if (sender is not CheckBox checkBox) + return; + + if (checkBox.DataContext is ListedItem item && FileList.SelectedItems.Contains(item)) FileList.SelectedItems.Remove(item); + + // Workaround for #17298 + checkBox.IsTabStop = false; + checkBox.IsEnabled = false; + checkBox.IsEnabled = true; + checkBox.IsTabStop = true; + FileList.Focus(FocusState.Programmatic); } private new void FileList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) From 10de56c7831f7125579e7bf7a6e6d721ad50372a Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:39:43 -0400 Subject: [PATCH 084/107] Feature: Added an option to hide 'Open in Terminal' from the context menu (#17349) --- .../Data/Contracts/IGeneralSettingsService.cs | 5 +++++ .../Factories/ContentPageContextFlyoutFactory.cs | 8 +++++--- .../Services/Settings/GeneralSettingsService.cs | 6 ++++++ src/Files.App/Strings/en-US/Resources.resw | 3 +++ .../ViewModels/Settings/GeneralViewModel.cs | 13 +++++++++++++ .../ViewModels/UserControls/SidebarViewModel.cs | 7 +++++-- .../UserControls/Widgets/DrivesWidgetViewModel.cs | 7 +++++-- .../UserControls/Widgets/FileTagsWidgetViewModel.cs | 7 +++++-- .../Widgets/QuickAccessWidgetViewModel.cs | 7 +++++-- src/Files.App/Views/Settings/GeneralPage.xaml | 5 +++++ 10 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index e473508791fe..068f4f088fda 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -215,6 +215,11 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// bool ShowOpenInNewPane { get; set; } + /// + /// Gets or sets a value indicating whether or not to show the option to open folders in Windows Terminal. + /// + bool ShowOpenTerminal { get; set; } + /// /// Gets or sets a value indicating whether or not to show the option to copy an items path. /// diff --git a/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs b/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs index 1916e8e7d049..cf4531b71e2c 100644 --- a/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs +++ b/src/Files.App/Data/Factories/ContentPageContextFlyoutFactory.cs @@ -612,14 +612,16 @@ public static List GetBaseItemMenuItems( new ContextMenuFlyoutItemViewModel() { ItemType = ContextMenuFlyoutItemType.Separator, - ShowItem = (!itemsSelected && Commands.OpenTerminal.IsExecutable) || - (areAllItemsFolders && Commands.OpenTerminal.IsExecutable) || + ShowItem = (!itemsSelected && Commands.OpenTerminal.IsExecutable && UserSettingsService.GeneralSettingsService.ShowOpenTerminal) || + (areAllItemsFolders && Commands.OpenTerminal.IsExecutable && UserSettingsService.GeneralSettingsService.ShowOpenTerminal) || Commands.OpenStorageSense.IsExecutable || Commands.FormatDrive.IsExecutable }, new ContextMenuFlyoutItemViewModelBuilder(Commands.OpenTerminal) { - IsVisible = (!itemsSelected && Commands.OpenTerminal.IsExecutable) || (areAllItemsFolders && Commands.OpenTerminal.IsExecutable) + IsVisible = (!itemsSelected || areAllItemsFolders) && + Commands.OpenTerminal.IsExecutable && + UserSettingsService.GeneralSettingsService.ShowOpenTerminal }.Build(), new ContextMenuFlyoutItemViewModelBuilder(Commands.OpenStorageSense).Build(), new ContextMenuFlyoutItemViewModelBuilder(Commands.FormatDrive).Build(), diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index addc268ce18a..f692a3b416b5 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -281,6 +281,12 @@ public bool ShowOpenInNewPane set => Set(value); } + public bool ShowOpenTerminal + { + get => Get(true); + set => Set(value); + } + public bool ShowCopyPath { get => Get(true); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index 0f191c20aee3..c43a98eb994a 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs index 14f49ce7d186..11cd979ce6a6 100644 --- a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs +++ b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs @@ -521,6 +521,19 @@ public bool ShowOpenInNewWindow } } + public bool ShowOpenTerminal + { + get => UserSettingsService.GeneralSettingsService.ShowOpenTerminal; + set + { + if (value != UserSettingsService.GeneralSettingsService.ShowOpenTerminal) + { + UserSettingsService.GeneralSettingsService.ShowOpenTerminal = value; + OnPropertyChanged(); + } + } + } + private string selectedShellPaneArrangementType; public string SelectedShellPaneArrangementType { diff --git a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs index 507d7b3d819a..31698a3a9c46 100644 --- a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs @@ -1043,11 +1043,14 @@ private List GetLocationItemMenuItems(INavigatio new ContextMenuFlyoutItemViewModel() { ItemType = ContextMenuFlyoutItemType.Separator, - ShowItem = Commands.OpenTerminalFromSidebar.IsExecutable || + ShowItem = (UserSettingsService.GeneralSettingsService.ShowOpenTerminal && Commands.OpenTerminalFromSidebar.IsExecutable) || Commands.OpenStorageSenseFromSidebar.IsExecutable || Commands.FormatDriveFromSidebar.IsExecutable }, - new ContextMenuFlyoutItemViewModelBuilder(Commands.OpenTerminalFromSidebar).Build(), + new ContextMenuFlyoutItemViewModelBuilder(Commands.OpenTerminalFromSidebar) + { + IsVisible = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && Commands.OpenTerminalFromSidebar.IsExecutable + }.Build(), new ContextMenuFlyoutItemViewModelBuilder(Commands.OpenStorageSenseFromSidebar).Build(), new ContextMenuFlyoutItemViewModelBuilder(Commands.FormatDriveFromSidebar).Build(), new ContextMenuFlyoutItemViewModel() diff --git a/src/Files.App/ViewModels/UserControls/Widgets/DrivesWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/DrivesWidgetViewModel.cs index 5faf80c57720..1e64bb52ad53 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/DrivesWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/DrivesWidgetViewModel.cs @@ -153,11 +153,14 @@ public override List GetItemMenuItems(WidgetCard new ContextMenuFlyoutItemViewModel() { ItemType = ContextMenuFlyoutItemType.Separator, - ShowItem = CommandManager.OpenTerminalFromHome.IsExecutable || + ShowItem = (UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable) || CommandManager.OpenStorageSenseFromHome.IsExecutable || CommandManager.FormatDriveFromHome.IsExecutable }, - new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome).Build(), + new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome) + { + IsVisible = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable + }.Build(), new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenStorageSenseFromHome).Build(), new ContextMenuFlyoutItemViewModelBuilder(CommandManager.FormatDriveFromHome).Build(), new() diff --git a/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs index 2969012c52e4..479c6fbf2b6d 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/FileTagsWidgetViewModel.cs @@ -154,9 +154,12 @@ public override List GetItemMenuItems(WidgetCard new ContextMenuFlyoutItemViewModel() { ItemType = ContextMenuFlyoutItemType.Separator, - ShowItem = CommandManager.OpenTerminalFromHome.IsExecutable + ShowItem = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable, }, - new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome).Build(), + new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome) + { + IsVisible = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable + }.Build(), new() { ItemType = ContextMenuFlyoutItemType.Separator, diff --git a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs index fc447eedbe95..4e83dcadd5eb 100644 --- a/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/Widgets/QuickAccessWidgetViewModel.cs @@ -136,9 +136,12 @@ public override List GetItemMenuItems(WidgetCard new ContextMenuFlyoutItemViewModel() { ItemType = ContextMenuFlyoutItemType.Separator, - ShowItem = CommandManager.OpenTerminalFromHome.IsExecutable + ShowItem = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable }, - new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome).Build(), + new ContextMenuFlyoutItemViewModelBuilder(CommandManager.OpenTerminalFromHome) + { + IsVisible = UserSettingsService.GeneralSettingsService.ShowOpenTerminal && CommandManager.OpenTerminalFromHome.IsExecutable + }.Build(), new() { ItemType = ContextMenuFlyoutItemType.Separator, diff --git a/src/Files.App/Views/Settings/GeneralPage.xaml b/src/Files.App/Views/Settings/GeneralPage.xaml index e8f302df9f82..848db39fa124 100644 --- a/src/Files.App/Views/Settings/GeneralPage.xaml +++ b/src/Files.App/Views/Settings/GeneralPage.xaml @@ -300,6 +300,11 @@ + + + + + From 94f01817b7f3eb9243805142df7d1ac0aacd3304 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 29 Jul 2025 17:27:27 -0400 Subject: [PATCH 085/107] Code Quality: Updated translations (#17353) --- src/Files.App/Strings/af/Resources.resw | 79 +- src/Files.App/Strings/ar/Resources.resw | 79 +- src/Files.App/Strings/be-BY/Resources.resw | 79 +- src/Files.App/Strings/bg/Resources.resw | 79 +- src/Files.App/Strings/ca/Resources.resw | 79 +- src/Files.App/Strings/cs-CZ/Resources.resw | 81 +- src/Files.App/Strings/da/Resources.resw | 135 +- src/Files.App/Strings/de-DE/Resources.resw | 81 +- src/Files.App/Strings/el/Resources.resw | 79 +- src/Files.App/Strings/en-GB/Resources.resw | 79 +- src/Files.App/Strings/es-419/Resources.resw | 87 +- src/Files.App/Strings/es-ES/Resources.resw | 103 +- src/Files.App/Strings/fa-IR/Resources.resw | 79 +- src/Files.App/Strings/fi-FI/Resources.resw | 79 +- src/Files.App/Strings/fil-PH/Resources.resw | 79 +- src/Files.App/Strings/fr-FR/Resources.resw | 89 +- src/Files.App/Strings/he-IL/Resources.resw | 79 +- src/Files.App/Strings/hi-IN/Resources.resw | 79 +- src/Files.App/Strings/hr-HR/Resources.resw | 79 +- src/Files.App/Strings/hu-HU/Resources.resw | 79 +- src/Files.App/Strings/hy-AM/Resources.resw | 79 +- src/Files.App/Strings/id-ID/Resources.resw | 79 +- src/Files.App/Strings/it-IT/Resources.resw | 133 +- src/Files.App/Strings/ja-JP/Resources.resw | 135 +- src/Files.App/Strings/ka/Resources.resw | 79 +- src/Files.App/Strings/km-KH/Resources.resw | 85 +- src/Files.App/Strings/ko-KR/Resources.resw | 79 +- src/Files.App/Strings/lt-LT/Resources.resw | 79 +- src/Files.App/Strings/lv-LV/Resources.resw | 79 +- src/Files.App/Strings/ms-MY/Resources.resw | 79 +- src/Files.App/Strings/nb-NO/Resources.resw | 79 +- src/Files.App/Strings/nl-NL/Resources.resw | 79 +- src/Files.App/Strings/pl-PL/Resources.resw | 179 +-- src/Files.App/Strings/pt-BR/Resources.resw | 79 +- src/Files.App/Strings/pt-PT/Resources.resw | 89 +- src/Files.App/Strings/ro-RO/Resources.resw | 1199 +++++++++--------- src/Files.App/Strings/ru-RU/Resources.resw | 79 +- src/Files.App/Strings/sk-SK/Resources.resw | 79 +- src/Files.App/Strings/sq-AL/Resources.resw | 79 +- src/Files.App/Strings/sr-Cyrl/Resources.resw | 79 +- src/Files.App/Strings/sv-SE/Resources.resw | 79 +- src/Files.App/Strings/ta/Resources.resw | 81 +- src/Files.App/Strings/th-TH/Resources.resw | 79 +- src/Files.App/Strings/tr-TR/Resources.resw | 99 +- src/Files.App/Strings/uk-UA/Resources.resw | 79 +- src/Files.App/Strings/vi/Resources.resw | 129 +- src/Files.App/Strings/zh-Hans/Resources.resw | 131 +- src/Files.App/Strings/zh-Hant/Resources.resw | 79 +- 48 files changed, 2754 insertions(+), 2610 deletions(-) diff --git a/src/Files.App/Strings/af/Resources.resw b/src/Files.App/Strings/af/Resources.resw index de531f032872..2b25d61fde2b 100644 --- a/src/Files.App/Strings/af/Resources.resw +++ b/src/Files.App/Strings/af/Resources.resw @@ -3491,27 +3491,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3551,63 +3551,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3643,55 +3643,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4224,9 +4224,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4260,7 +4257,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4274,4 +4274,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/ar/Resources.resw b/src/Files.App/Strings/ar/Resources.resw index 6b2b64552a1c..5d5b8db97fb7 100644 --- a/src/Files.App/Strings/ar/Resources.resw +++ b/src/Files.App/Strings/ar/Resources.resw @@ -3491,27 +3491,27 @@ Shown in a StatusCenter card. - تم ضغط {0} عنصر إلى "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تم ضغط {0} عنصر من "{1}" إلى "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - حدث خطأ خلال ضغط {0} عنصر إلى "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - فشل في ضغط عنصر {0} من "{1}" إلى "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - يتم ضغط {0} عنصر إلى "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - يتم ضغط {0} عنصر من "{1}" إلى "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3551,63 +3551,63 @@ Shown in a StatusCenter card. - تم إلغاء تثبيت {0} خط من "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - تم تثبيت {0} خط + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - تم تثبيت {0} خط من "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - خطأ في تثبيت {0} خط + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - تعذر حذف {0} عنصر من "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - جارى تثبيت {0} خط + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - جارى تثبيت {0} خط من "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - إلغاء نسخ {0} عنصر (عناصر) إلى "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - إلغاء نسخ {0} عنصر (عناصر) من "{1}" إلى "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - تم نسخ العنصر {0} إلى "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تم نسخ {0} عنصر من "{1}" إلى "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - حدث خطأ خلال نسخ {0} عنصر إلى "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تعذر نسخ {0} عنصر من "{1}" إلى "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - يتم نسخ {0} عنصر إلى "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - يتم نسخ {0} عنصر من "{1}" إلى "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3643,55 +3643,55 @@ Shown in a StatusCenter card. - تم إلغاء حذف {0} عنصر من "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - تم حذف {0} عنصر من "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - حدث خطأ خلال حذف {0} عنصر من "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - تعذر حذف {0} عنصر من "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - يتم حذف {0} عنصر من "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - تم إلغاء نقل {0} عنصر إلى "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تم إلغاء نقل {0} عنصر من "{1}" إلى "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - تم نقل {0} عنصر إلى "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تم نقل {0} عنصر من "{1}" إلى "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - يتم نقل {0} عنصر إلى "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - يتم نقل {0} عنصر من "{1}" إلى "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - حدث خطأ خلال نقل {0} عنصر إلى "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - تعذر نقل {0} عنصر من "{1}" إلى "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4224,9 +4224,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4260,7 +4257,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4274,4 +4274,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/be-BY/Resources.resw b/src/Files.App/Strings/be-BY/Resources.resw index 604717ee0191..4cd7099cb86f 100644 --- a/src/Files.App/Strings/be-BY/Resources.resw +++ b/src/Files.App/Strings/be-BY/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/bg/Resources.resw b/src/Files.App/Strings/bg/Resources.resw index 7b9cd9d7605b..7dc7646f9b35 100644 --- a/src/Files.App/Strings/bg/Resources.resw +++ b/src/Files.App/Strings/bg/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Компресирани {0} елемент(а) в "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Компресирани {0} елемент(а) от "{1}" в "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Грешка, компресирайки {0} елемент(а) в "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Неуспешно компресиране на {0} елемент(а) от "{1}" в "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Компресиране на {0} елемент(а) в "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Компресиране на {0} елемент(а) от "{1}" в "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Отменено копиране на {0} елемент(а) към "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Отменено копиране на {0} елемент(а) от "{1}" към "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Копирани {0} елемент(а) в "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Копирани {0} елемент(а) от "{1}" в "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Грешка, копирайки {0} елемент(а) в "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Неуспешно копиране на {0} елемент(а) от "{1}" в "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Копиране на {0} елемент(а) в "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Копиране на {0} елемент(а) от "{1}" в "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Отмяна на изтриването на {0} елемент(а) от "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Изтрити {0} елемент(а) от "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Грешка, изтривайки {0} елемент(а) от "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Неуспешно изтриване на {0} елемент(а) от "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Изтриване на {0} елемент(а) от "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Отменено преместване на {0} елемент(а) към "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Отменено преместване на {0} елемент(а) от "{1}" към "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Преместени {0} елемент(а) към "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Преместване на {0} елемент(а) от "{1}" към "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Преместване на {0} елемент(а) в "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Преместване на {0} елемент(а) от "{1}" към "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Грешка, премествайки {0} елемент(а) в "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Неуспешно преместване на {0} елемент(а) от "{1}" към "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/ca/Resources.resw b/src/Files.App/Strings/ca/Resources.resw index d314b91da035..0e0f11ad820a 100644 --- a/src/Files.App/Strings/ca/Resources.resw +++ b/src/Files.App/Strings/ca/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - S'han comprimit {0} elements a "{1}" + {0, plural, one {# element comprimit} other {# elements comprimits}} a «{1}» Shown in a StatusCenter card. - S'han comprimit {0} elements de "{1}" a "{2}" + {0, plural, one {# element comprimit} other {# elements comprimits}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'ha produït un error en comprimir {0} elements a "{1}" + Error en comprimir {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - No s'han pogut comprimir {0} elements de "{1}" a "{2}" + No s'ha pogut comprimir {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'estan comprimint {0} elements a "{1}" + S'està comprimint {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'estan comprimint {0} elements de "{1}" a "{2}" + S'està comprimint {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - S'ha cancel·lat la instal·lació de {0} fonts de «{1}» + S'ha cancel·lat la instal·lació de {0, plural, one {# origen} other {# origens}} de «{1}» Shown in a StatusCenter card. - S'han instal·lat {0} fonts + {0, plural, one {# origen instal·lat} other {# origens instal·lats}} Shown in a StatusCenter card. - S'han instal·lat {0} fonts de «{1}» + {0, plural, one {# font} other {# fonts}} de «{1}» Shown in a StatusCenter card. - S'ha produït un error en instal·lar {0} font(s) + S'ha produït un error instal·lant {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - No s'han pogut instal·lar {0} fonts de «{1}» + No s'ha pogut instal·lar {0, plural, one {# font} other {# fonts}} de «{1}» Shown in a StatusCenter card. - S'estan instal·lant {0} fonts + S'està instal·lant {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - S'estan instal·lant {0} fonts de «{1}» + S'està instal·lant {0, plural, one {# font} other {# fonts}} de «{1}» Shown in a StatusCenter card. - S'ha cancel·lat la còpia de {0} elements a "{1}" + S'ha cancel·lat la còpia de {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'ha cancel·lat la còpia de {0} elements de "{1}" a "{2}" + S'ha cancel·lat la còpia de {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'han copiat {0} elements a "{1}" + S'ha copiat {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'han copiat {0} elements de "{1}" a "{2}" + S'ha copiat {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'ha produït un error en copiar {0} elements a "{1}" + S'ha produït un error en copiar {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - No s'han pogut copiar {0} elements de "{1}" a "{2}" + No s'ha pogut copiar {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'estan copiant {0} elements a "{1}" + S'està copiant {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'estan copiant {0} elements de "{1}" a "{2}" + S'està copiant {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - S'ha cancel·lat la supressió de {0} elements de "{1}" + S'ha cancel·lat l'eliminació de {0, plural, one {# element} other {# elements}} de «{1}» Shown in a StatusCenter card. - S'han suprimit {0} elements de "{1}" + S'ha eliminat {0, plural, one {# element} other {# elements}} de «{1}» Shown in a StatusCenter card. - S'ha produït un error en suprimir {0} elements de "{1}" + S'ha produït un error en eliminar {0, plural, one {# element} other {# elements}} de «{1}» Shown in a StatusCenter card. - No s'han pogut suprimir {0} elements de "{1}" + No s'ha pogut eliminar {0, plural, one {# element} other {# elements}} de «{1}» Shown in a StatusCenter card. - S'estan suprimint {0} elements de "{1}" + S'està eliminant {0, plural, one {# element} other {# elements}} de «{1}» Shown in a StatusCenter card. - S'ha cancel·lat el moviment de {0} elements a "{1}" + S'ha cancel·lat el moviment de {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'ha cancel·lat el moviment de {0} elements de "{1}" a "{2}" + S'ha cancel·lat el moviment de {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'han mogut {0} elements a "{1}" + S'ha mogut {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'han mogut {0} elements de "{1}" a "{2}" + S'ha mogut {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'estan movent {0} elements a "{1}" + S'està movent {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - S'està movent {0} elements de "{1}" a "{2}" + S'està movent {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. - S'ha produït un error en moure {0} elements a "{1}" + S'ha produït un error en moure {0, plural, one {# element} other {# elements}} a «{1}» Shown in a StatusCenter card. - No s'han pogut moure {0} elements de "{1}" a "{2}" + No s'ha pogut moure {0, plural, one {# element} other {# elements}} de «{1}» a «{2}» Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Activa l'Omnibar - Podeu afegir seccions a la barra lateral fent clic amb el botó dret i seleccionant les seccions que voleu afegir @@ -4259,7 +4256,10 @@ Mostra la ruta de navegació de la ruta replegada - Mostra les carpetes secundàries + Mostra les carpetes a {0} + + + Mostra les carpetes a l'inici No hi ha cap ordre que contingui {0} @@ -4273,4 +4273,7 @@ Nom del fitxer + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/cs-CZ/Resources.resw b/src/Files.App/Strings/cs-CZ/Resources.resw index 93eac4c51b96..813f9b58e858 100644 --- a/src/Files.App/Strings/cs-CZ/Resources.resw +++ b/src/Files.App/Strings/cs-CZ/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Komprimováno {0} položek do "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Komprimováno {0} položek z "{1}" do "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Chyba při komprimování {0} položek do "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nepodařilo se zkomprimovat {0} položek z {1} do {2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Komprimování {0} položek do "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Komprimování {0} položek z "{1}" do "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Instalace písma {0} z "{1}" byla zrušena + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Písmo {0} bylo nainstalováno + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Písmo {0} z "{1}" bylo nainstalováno + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Chyba při instalaci {0} písma + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Nepodařilo se nainstalovat {0} písmo z "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Instalace {0} písma + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Instalace {0} písma z "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Zrušeno kopírování {0} položky(položek) do "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Zrušeno kopírování {0} položky(položek) z "{1}" do "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopírováno {0} položky(položek) do "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopírováno {0} položek z "{1}" do "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Chyba při kopírování {0} položky(položek) do "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nepodařilo se zkopírovat {0} položek z {1} do {2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopírování {0} položky(položek) do "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopírování {0} položky(položek) z "{1}" do "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Zrušeno mazání {0} položek z "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Smazáno {0} položek z "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Chyba při mazání {0} položek z "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Nepodařilo se smazat {0} položek z {1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Mazání {0} položek z "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Zrušeno přesouvání {0} položek do "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Zrušeno přesouvání {0} položek z "{1}" do "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Přesunuto {0} položek do "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Přesunuto {0} položek z "{1}" do "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Přesouvání {0} položek(y) do "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Přesouvání {0} položek z "{1}" do "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Chyba při přesouvání {0} položek do "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nepodařilo se přesunout {0} položek z "{1}" do "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Desetinný - - Povolit Omnibar - Do postranního panelu můžete přidat sekce kliknutím pravým tlačítkem myši a výběrem sekcí, které chcete přidat @@ -4259,7 +4256,10 @@ Zobrazit zjednodušenou cestu - Zobrazit podsložky + Show folders in {0} + + + Show folders in Home Nebyly nalezeny žádné příkazy obsahující {0} @@ -4271,6 +4271,9 @@ Filtering for - Filename + Název souboru + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/da/Resources.resw b/src/Files.App/Strings/da/Resources.resw index ee5b5296a118..e5bcab015e04 100644 --- a/src/Files.App/Strings/da/Resources.resw +++ b/src/Files.App/Strings/da/Resources.resw @@ -190,7 +190,7 @@ Søg - Tidligere tilgåede filer vil dukke op her + Tidligere tilgåede filer vil fremgå her Fjern dette emne @@ -217,7 +217,7 @@ Vis skjulte filer og mapper - Show dot files + Vis punktum-filer Udseende @@ -226,7 +226,7 @@ Baggrundsfarve - Advanceret + Avanceret Fortsæt fra hvor man slap @@ -379,10 +379,10 @@ Har du slettet denne mappe? - Filen, der forsøges tilgået, bruges i øjeblikket af {0} + Filen, der forsøges tilgået, anvendes p.t. af {0} - Filen, der forsøges tilgået, bruges i øjeblikket af en anden applikation + Filen, der forsøges tilgået, anvendes p.t. af en anden applikation Fil er i brug @@ -1089,7 +1089,7 @@ Slå inforuden til/fra - Toggle visibility of the detail/preview panes + Slå synlighed af detalje-/forhåndsvisningsruder til/fra Vis/skjul værktøjslinje @@ -1098,10 +1098,10 @@ Slå synligheden af værktøjslinjen til/fra - Toggle filter header + Slå filterheader til/fra - Toggle visibility of the filter header + Slå synlighed af filterheaderen til/fra Ingen forhåndsvisning tilgængelig @@ -2019,22 +2019,22 @@ Adfærd - Hello! + Hej! - Enjoying Files? Please consider reviewing in the Microsoft Store. + Synes om Files? Overvej at bedømme den i Microsoft Store. - Enjoying Files? Please consider supporting the project on GitHub. + Synes om Files? Overvej at støtte projektet på GitHub. - Sponsor + Sponsorér - Rate us + Bedøm os - Dismiss + Afvis Anvend som baggrund @@ -2439,31 +2439,31 @@ Vis/Skjul sidebjælke - Copy selected {0, plural, one {item} other {items}} + Kopiér {0, plural, one {valgt emne} other {valgte emner}} - Copy path of the current directory + Kopiér sti til aktuel mappe - Copy path of selected items + Kopiér sti til valgte emner - Copy path of selected items with quotes + Kopiér sti til valgte emner med anførselstegn - Copy path of the current directory with quotes + Kopiér sti til aktuel mappe med anførselstegn - Cut selected {0, plural, one {item} other {items}} + Klip {0, plural, one {valgt emne} other {valgte emner}} - Paste items to the current folder + Indsæt emner i den aktuelle mappe - Paste items to the current folder as shortcuts + Indsæt emner i den aktuelle mappe som genveje - Paste items to the selected folder + Indsæt emner i den aktuelle mappe Indsæt i den valgte mappe @@ -2586,13 +2586,13 @@ Opret ZIP-arkiv med {0, plural, one {valgt emne} other {valgte emner}} - Extract selected {0, plural, one {archive} other {archives}} to any folder + Udpak {0, plural, one {valgt arkiv} other {valgte arkiver}} til en mappe - Extract selected {0, plural, one {archive} other {archives}} to the current folder + Udpak {0, plural, one {valgt arkiv} other {valgte arkiver}} til den aktuelle mappe - Extract selected {0, plural, one {archive} other {archives}} to new folder + Udpak {0, plural, one {valgt arkiv} other {valgte arkiver}} til ny mappe Rotér {0, plural, one {valgt billede} other {valgte billeder}} venstre om @@ -2733,7 +2733,7 @@ Dublér aktuel fane - Dublér valgte fane + Dublér valgt fane Luk faner til venstre for aktuel fane @@ -3320,7 +3320,7 @@ Åbn den valgte mappe i en ny fane - Åbn den valgte mappe i et nyt vindue + Åbn valgt mappe i et nyt vindue Åbn alle @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Komprimerede {0} emne(r) til "{1}" + Komprimeret {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Komprimerede {0} emne(r) fra "{1}" til "{2}" + Komprimeret {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Fejl under komprimeringen af {0} emne(r) til "{1}" + Fejl under komprimering af {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Kunne ikke komprimere {0} emne(r) fra {1} til {2}" + Mislykkedes at komprimere {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Komprimerer {0} emne(r) til "{1}" + Komprimerer {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Komprimerer {0} emne(r) fra "{1}" til "{2}" + Komprimerer {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Afbrudt installation af {0} skrifttype(r) fra "{1}" + Afbrød installationen af {0, plural, one {# skrifttype} other {# skrifttyper}} fra "{1}" Shown in a StatusCenter card. - Installeret {0} skrifttype(r) + Installerede {0, plural, one {# skrifttype} other {# skrifttyper}} Shown in a StatusCenter card. - Installeret {0} skrifttype(r) fra "{1}" + Installerede {0, plural, one {# skrifttype} other {# skrifttyper}} fra "{1}" Shown in a StatusCenter card. - Fejl under installation af {0} skrifttype(r) + Fejl under installationen af {0, plural, one {# skrifttype} other {# skrifttyper}} Shown in a StatusCenter card. - Mislykkedes at installere {0} skrifttype(r) fra "{1}" + Mislykkedes at installere {0, plural, one {# skrifttype} other {# skrifttyper}} fra "{1}" Shown in a StatusCenter card. - Installerer {0} skrifttype(r) + Installerer {0, plural, one {# skrifttype} other {# skrifttyper}} Shown in a StatusCenter card. - Installerer {0} skrifttype(r) fra "{1}" + Installerer {0, plural, one {# skrifttype} other {# skrifttyper}} fra "{1}" Shown in a StatusCenter card. - Annullerede kopieringen af {0} emne(r) til "{1}" + Afbrød kopieringen af {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Annullerede kopieringen af {0} vare(r) fra "{1}" til "{2}" + Afbrød kopieringen af {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Kopierede {0} emne(r) til "{1}" + Kopieret {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Kopierede {0} emne(r) fra "{1}" til "{2}" + Kopieret {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Fejl under kopieringen af {0} emne(r) til "{1}" + Fejl under komprimeringen af {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Mislykkedes at kopiere {0} emne(r) fra "{1}" til "{2}" + Mislykkedes at kopiere {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Kopierer {0} emne(r) til "{1}" + Kopierer {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Kopierer {0} emne(r) fra "{1}" til "{2}" + Kopierer {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Annullerede sletningen af {0} emne(r) fra "{1}" + Afbrød sletningen af {0, plural, one {# emne} other {# emner}} fra "{1}" Shown in a StatusCenter card. - Slettede {0} emne(r) fra "{1}" + Slettede {0, plural, one {# emne} other {# emner}} fra "{1}" Shown in a StatusCenter card. - Fejl under sletningen af {0} emne(r) fra "{1}" + Fejl under sletningen af {0, plural, one {# emne} other {# emner}} fra "{1}" Shown in a StatusCenter card. - Mislykkedes at slette {0} emne(r) fra "{1}" + Mislykkedes at slette {0, plural, one {# emne} other {# emner}} fra "{1}" Shown in a StatusCenter card. - Sletter {0} emne(r) fra "{1}" + Sletter {0, plural, one {# emne} other {# emner}} fra "{1}" Shown in a StatusCenter card. - Annullerede flytningen af {0} emne(r) til "{1}" + Afbrød flytningen af {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Annullerede flytningen af {0} emne(r) fra "{1}" til "{2}" + Afbrød flytningen af {0, plural, one {# emne} other {# emner}} fra "{1}" til "{2}" Shown in a StatusCenter card. - Flyttede {0} emne(r) til "{1}" + Flyttet {0, plural, one {# emne} other {# emner}} til "{1}" Shown in a StatusCenter card. - Flyttede {0} emne(r) fra "{1}" til "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Flytter {0} emne(r) til "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Flytter {0} emne(r) fra "{1}" til "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fejl under flytningen af {0} emne(r) til "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kunne ikke flytte {0} emne(r) fra "{1}" til "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Aktivér OmniBar - Afsnit kan føjes til sidepanelet via højreklik og valg af de ønskede afsnit @@ -4259,7 +4256,10 @@ Vis brødkrummer for sammenfoldet sti - Vis undermapper + Show folders in {0} + + + Show folders in Home Der er ingen kommandoer indeholdende {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/de-DE/Resources.resw b/src/Files.App/Strings/de-DE/Resources.resw index 83ee640f6869..c01196a236b4 100644 --- a/src/Files.App/Strings/de-DE/Resources.resw +++ b/src/Files.App/Strings/de-DE/Resources.resw @@ -1641,7 +1641,7 @@ Lädt die Datei aus der Cloud herunter und lädt die Vorschau - {0, plural, one {# Element } other {# Elemente }} ({1, plural, one {# Datei} other {# Dateien}}, {2, plural, one {# Ordner} other {# Ordner}}) + {0, plural, one {# Element} other {# Elemente}} ({1, plural, one {# Datei} other {# Dateien}}, {2, plural, one {# Ordner} other {# Ordner}}) Unkomprimierte Größe @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} Element(e) nach "{1}" komprimiert + {0, plural, one {# Element} other {# Elemente}} nach "{1}" komprimiert Shown in a StatusCenter card. - {0} Element(e) von "{1}" nach "{2}" komprimiert + {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" komprimiert Shown in a StatusCenter card. - Fehler beim Komprimieren von {0} Element(en) nach "{1}" + Fehler beim Komprimieren von {0, plural, one {# Element} other {# Elementen}} nach "{1}" Shown in a StatusCenter card. - Komprimieren von {0} Element(en) von "{1}" nach "{2}" ist fehlgeschlagen + Fehler beim Komprimieren von {0, plural, one {# Element} other {# Elementen}} von "{1}" nach "{2}" Shown in a StatusCenter card. - {0} Element(e) wird/werden nach "{1}" komprimiert + Komprimiere {0, plural, one {# Element} other {# Elemente}} nach "{1}" Shown in a StatusCenter card. - {0} Element(e) wird/werden von "{1}" nach "{2}" komprimiert + Komprimiere {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Installation von {0} Schriftart(en) von "{1} " abgebrochen + Installieren von {0, plural, one {# Schriftart} other {# Schriftarten}} aus "{1}" abgebrochen Shown in a StatusCenter card. - {0} Schriftart(en) installiert + {0, plural, one {# Schriftart} other {# Schriftarten}} installiert Shown in a StatusCenter card. - {0} Schriftart(en) von "{1}" installiert + {0, plural, one {# Schriftart} other {# Schriftarten}} aus "{1}" installiert Shown in a StatusCenter card. - Fehler bei der Installation der {0} Schriftart(en) + Fehler beim Installieren von {0, plural, one {# Schriftart} other {# Schriftarten}} Shown in a StatusCenter card. - Fehler bei der Installation der {0} Schriftart(en) von "{1}" + Fehler beim Installieren von {0, plural, one {# Schriftart} other {# Schriftarten}} aus "{1}" Shown in a StatusCenter card. - Installiere {0} Schriftart(en) + Installiere {0, plural, one {# Schriftart} other {# Schriftarten}} Shown in a StatusCenter card. - Installiere {0} Schriftart(en) von "{1}" + Installiere {0, plural, one {# Schriftart} other {# Schriftarten}} aus "{1}" Shown in a StatusCenter card. - Kopieren von {0} Element(en) nach "{1}" abgebrochen + Kopieren von {0, plural, one {# Element} other {# Elementen}} nach "{1}" abgebrochen Shown in a StatusCenter card. - Kopieren von {0} Element(en) von "{1}" nach "{2}" abgebrochen + Kopieren von {0, plural, one {# Element} other {# Elementen}} von "{1}" nach "{2}" abgebrochen Shown in a StatusCenter card. - {0} Element(e) nach "{1}" kopiert + {0, plural, one {# Element} other {# Elemente}} nach "{1}" kopiert Shown in a StatusCenter card. - {0} Element(e) von "{1}" nach "{2}" kopiert + {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" kopiert Shown in a StatusCenter card. - Fehler beim Kopieren von {0} Element(en) nach "{1}" + Fehler beim Kopieren von {0, plural, one {# Element} other {# Elementen}} nach "{1}" Shown in a StatusCenter card. - Kopieren von {0} Element(en) von "{1}" nach "{2}" ist fehlgeschlagen + Fehler beim Kopieren von {0, plural, one {# Element} other {# Elementen}} von "{1}" nach "{2}" Shown in a StatusCenter card. - {0} Element(e) wird/werden nach "{1}" kopiert + Kopiere {0, plural, one {# Element} other {# Elemente}} nach "{1}" Shown in a StatusCenter card. - {0} Element(e) wird/werden von "{1}" nach "{2}" kopiert + Kopiere {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Löschen von {0} Element(en) aus "{1}" abgebrochen + Löschen von {0, plural, one {# Element} other {# Elementen}} aus "{1}" abgebrochen Shown in a StatusCenter card. - {0} Element(e) aus "{1}" gelöscht + {0, plural, one {# Element} other {# Elemente}} aus "{1}" gelöscht Shown in a StatusCenter card. - Fehler beim Löschen von {0} Element(en) aus "{1}" + Fehler beim Löschen von {0, plural, one {# Element} other {# Elementen}} aus "{1}" Shown in a StatusCenter card. - Löschen von {0} Element(en) aus "{1}" fehlgeschlagen + Fehler beim Löschen von {0, plural, one {# Element} other {# Elementen}} aus "{1}" Shown in a StatusCenter card. - {0} Element(e) werden aus "{1}" gelöscht + Lösche {0, plural, one {# Element} other {# Elemente}} aus "{1}" Shown in a StatusCenter card. - Verschieben von {0} Element(en) nach "{1}" abgebrochen + Verschieben von {0, plural, one {# Element} other {# Elementen}} nach "{1}" abgebrochen Shown in a StatusCenter card. - Verschieben von {0} Element(en) von "{1}" nach "{2}" abgebrochen + Verschieben von {0, plural, one {# Element} other {# Elementen}} von "{1}" nach "{2}" abgebrochen Shown in a StatusCenter card. - {0} Element(e) nach "{1}" verschoben + {0, plural, one {# Element} other {# Elemente}} nach "{1}" verschoben Shown in a StatusCenter card. - {0} Element(e) von "{1}" nach "{2}" verschoben + {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" verschoben Shown in a StatusCenter card. - {0} Element(e) werden nach "{1}" verschoben + Verschiebe {0, plural, one {# Element} other {# Elemente}} nach "{1}" Shown in a StatusCenter card. - {0} Element(e) werden von "{1}" nach "{2}" verschoben + Verschiebe {0, plural, one {# Element} other {# Elemente}} von "{1}" nach "{2}" Shown in a StatusCenter card. - Fehler beim Verschieben von {0} Element(en) nach "{1}" + Fehler beim Verschieben von {0, plural, one {# Element} other {# Elementen}} nach "{1}" Shown in a StatusCenter card. - {0} Element(e) konnte(n) nicht von "{1}" nach "{2}" verschoben werden + Fehler beim Verschieben von {0, plural, one {# Element} other {# Elementen}} von "{1}" nach "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Dezimal - - Omnibar aktivieren - Du kannst Abschnitte zur Seitenleiste hinzufügen, indem du mit der rechten Maustaste klickst und die gewünschten Abschnitte auswählst @@ -4259,7 +4256,10 @@ Zusammengeklappte Pfadnavigation anzeigen - Unterordner anzeigen + Ordner in {0} anzeigen + + + Ordner auf der Startseite anzeigen Es gibt keine Befehle, die {0} enthalten @@ -4273,4 +4273,7 @@ Dateiname + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/el/Resources.resw b/src/Files.App/Strings/el/Resources.resw index d1490c2bee16..f9037b1e3880 100644 --- a/src/Files.App/Strings/el/Resources.resw +++ b/src/Files.App/Strings/el/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Έγινε συμπίεση {0} στοιχείου(ων) σε «{1}» + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Συμπιεσμένο(α) στοιχείο(α) {0} από "{1}" σε "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Σφάλμα κατά τη συμπίεση στοιχείου(ων) {0} σε "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Απέτυχε η αντιγραφή {0} στοιχείου(ων) από {1} προς {2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Συμπίεση στοιχείου(ων) από {0} σε "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Συμπίεση στοιχείου(ων) {0} από "{1}" σε "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Ακυρώθηκε η αντιγραφή {0} στοιχείου(ων) στο "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Ακυρώθηκε η αντιγραφή {0} στοιχείου(ων) από "{1}" στο "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Αντιγραφή {0} αντικειμένου(ων) στο "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Αντιγραφή {0} στοιχείου(ων) από το "{1}" στο "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Σφάλμα αντιγραφής {0} στοιχείου(ων) στο "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Απέτυχε η αντιγραφή {0} στοιχείου(ων) από το "{1}" στο "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Αντιγραφή {0} στοιχείου(ων) στο "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Αντιγραφή {0} στοιχείου(ων) από το "{1}" στο "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Ακυρώθηκε η διαγραφή {0} στοιχείου(ων) από το "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Διαγράφηκε {0} στοιχείου(α) από το "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Σφάλμα διαγραφής {0} αντικειμένου(ων) από το "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Απέτυχε η διαγραφή {0} αντικειμένου(ων) από το "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Διαγραφή {0} αντικειμένου(ων) από το "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Ακυρώθηκε η μετακίνηση {0} αντικειμένου(ων) στο "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Ακυρώθηκε η μετακίνηση {0} αντικειμένου(ων) από "{1}" σε "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Μεταφέρθηκε {0} αντικείμενο(α) στο "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Μεταφέρθηκε {0} αντικείμενο(α) από το "{1}" στο "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Μετακίνηση {0} αντικειμένου(ων) στο "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Μετακίνηση {0} αντικειμένου(ων) από το "{1}" στο "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Σφάλμα κατά τη μετακίνηση αντικειμένου(ων) {0} στο "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Η μετακίνηση {0} αντικείμενου(ων) από "{1}" σε "{2}" απέτυχε + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/en-GB/Resources.resw b/src/Files.App/Strings/en-GB/Resources.resw index 83bedff28922..5fdaf8c7455d 100644 --- a/src/Files.App/Strings/en-GB/Resources.resw +++ b/src/Files.App/Strings/en-GB/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Cancelled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Cancelled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Cancelled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Cancelled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Cancelled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Cancelled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/es-419/Resources.resw b/src/Files.App/Strings/es-419/Resources.resw index a0a4c09c646b..d961adc3cc4f 100644 --- a/src/Files.App/Strings/es-419/Resources.resw +++ b/src/Files.App/Strings/es-419/Resources.resw @@ -1098,10 +1098,10 @@ Cambiar la visibilidad de la barra de herramientas - Toggle filter header + Mostrar/Ocultar cuadro del filtro - Toggle visibility of the filter header + Cambiar la visibilidad del cuadro del filtro No hay vista previa disponible @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Comprimido(s) {0} elemento(s) en "{1}" + Comprimido {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - Comprimido(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Comprimido # elemento} other {Comprimidos # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al comprimir {0} elemento(s) en "{1}" + Error comprimiendo {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - No se pudo comprimir {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo comprimir # elemento} other {No se pudieron comprimir # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Comprimiendo {0} elemento(s) en "{1}" + Comprimiendo {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - Comprimiendo {0} elemento(s) desde "{1}" a "{2}" + Comprimiendo {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Cancelada la instalación de {0} fuente(s) desde "{1}" + Cancelada la instalación de {0, plural, one {# fuente} other {# fuentes}} desde "{1}" Shown in a StatusCenter card. - Instalada(s) {0} fuente(s) + {0, plural, one {# Fuente instalada} other {# Fuentes instaladas}} Shown in a StatusCenter card. - Instalada(s) {0} fuente(s) desde "{1}" + {0, plural, one {# Fuente instalada} other {# Fuentes instaladas}} desde "{1}" Shown in a StatusCenter card. - Error instalando {0} fuente(s) + Error instalando {0, plural, one {# fuente} other {# fuentes}} Shown in a StatusCenter card. - No se ha(n) podido instalar {0} fuente(s) desde "{1}" + {0, plural, one {No se pudo instalar # fuente} other {No se pudieron instalar # fuentes}} desde "{1}" Shown in a StatusCenter card. - Instalando {0} fuente(s) + Instalando {0, plural, one {# fuente} other {# fuentes}} Shown in a StatusCenter card. - Instalando {0} fuente(s) desde "{1}" + Instalando {0, plural, one {# fuente} other {# fuentes}} desde "{1}" Shown in a StatusCenter card. - Cancelada la copia de {0} elemento(s) en "{1}" + Cancelada la copia de {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Cancelada la copia de {0} elemento(s) desde "{1}" a "{2}" + Cancelada la copia de {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Copiado(s) {0} elemento(s) en "{1}" + {0, plural, one {Copiado # elemento} other {Copiados # elementos}} a "{1}" Shown in a StatusCenter card. - Copiado(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Copiado # elemento} other {Copiados # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al copiar {0} elemento(s) en "{1}" + Error copiando {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - No se pudo copiar {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo copiar # elemento} other {No se pudieron copiar # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Copiando {0} elemento(s) en "{1}" + Copiando {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Copiando {0} elemento(s) desde "{1}" a "{2}" + Copiando {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Cancelada la eliminación de {0} elemento(s) desde "{1}" + Cancelada la eleiminación de {0, plural, one {# elemento} other {# elementos}} de "{1}" Shown in a StatusCenter card. - Eliminado(s) {0} elemento(s) desde "{1}" + {0, plural, one {Eliminado # elemento} other {Eliminados # elementos}} de "{1}" Shown in a StatusCenter card. - Error al eliminar {0} elemento(s) desde "{1}" + Error eliminando {0, plural, one {# elemento} other {# elementos}} de "{1}" Shown in a StatusCenter card. - No se ha(n) podido eliminar {0} elemento(s) desde {1}" + {0, plural, one {No se pudo eliminar # elemento} other {No se pudieron eliminar # elementos}} de "{1}" Shown in a StatusCenter card. - Eliminando {0} elemento(s) desde "{1}" + Eliminando {0, plural, one {# elemento} other {# elementos}} desde "{1}" Shown in a StatusCenter card. - Cancelado el movimiento de {0} elemento(s) a "{1}" + Cancelado el movimiento de {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Cancelado el movimiento de {0} elemento(s) desde "{1}" a "{2}" + Cancelado el movimiento de {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Movido(s) {0} elemento(s) a "{1}" + {0, plural, one {Movido # elemento} other {Movidos # elementos}} a "{1}" Shown in a StatusCenter card. - Movido(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Movido # elemento} other {Movidos # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Moviendo {0} elemento(s) a "{1}" + Moviendo {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Moviendo {0} elemento(s) desde "{1}" a "{2}" + Moviendo {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al mover {0} elemento(s) a "{1}" + Error moviendo {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - No se pudo mover {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo mover # elemento} other {No se pudieron mover # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Activar la barra de búsqueda unificada (omnibar) - Puede agregar secciones a la barra lateral haciendo clic derecho y seleccionando las secciones que desea agregar @@ -4259,7 +4256,10 @@ Muestra la ruta de navegación contraída - Mostrar subcarpetas + Mostrar carpetas en {0} + + + Mostrar carpetas en Inicio No hay comandos que contengan {0} @@ -4268,9 +4268,12 @@ Ver más - Filtering for + Filtrar por - Filename + Nombre del archivo + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/es-ES/Resources.resw b/src/Files.App/Strings/es-ES/Resources.resw index 52cc2aab7b47..b0ca26c42b5e 100644 --- a/src/Files.App/Strings/es-ES/Resources.resw +++ b/src/Files.App/Strings/es-ES/Resources.resw @@ -1098,10 +1098,10 @@ Cambiar la visibilidad de la barra de herramientas - Toggle filter header + Mostrar/Ocultar cuadro del filtro - Toggle visibility of the filter header + Cambiar la visibilidad del cuadro del filtro No hay vista previa disponible @@ -2232,7 +2232,7 @@ Notas de la versión - Abre notas de la versión + Abrir notas de la versión Crear un acceso directo en esta ubicación requiere privilegios de administrador @@ -2493,7 +2493,7 @@ Restaurar todos los elementos de la papelera de reciclaje - Abre {0, plural, one {elemento} other {elementos}} + Abrir {0, plural, one {elemento} other {elementos}} Abre {0, plural, one {elemento} other {elementos}} con la aplicación seleccionada @@ -2523,16 +2523,16 @@ Comparte {0, plural, one {archivo seleccionado} other {archivos seleccionados}} con otros - Ancla {0, plural, one {elemento} other {elementos}} al Menú Inicio + Anclar {0, plural, one {elemento} other {elementos}} al Menú Inicio Desanclar {0, plural, one {elemento} other {elementos}} del Menú Inicio - Ancla {0, plural, one {carpeta} other {carpetas}} a la Barra lateral + Anclar {0, plural, one {carpeta} other {carpetas}} a la Barra lateral - Desancla {0, plural, one {carpeta} other {carpetas}} de la Barra lateral + Desanclar {0, plural, one {carpeta} other {carpetas}} de la Barra lateral Establecer imagen seleccionada como fondo de escritorio @@ -2577,13 +2577,13 @@ Abrir vista previa en ventana emergente - Crea archivo con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} + Crear archivo con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} - Crea archivo 7z con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} + Crear archivo 7z con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} - Crea archivo zip con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} + Crear archivo zip con {0, plural, one {elemento seleccionado} other {elementos seleccionados}} Extraer {0, plural, one {archivo seleccionado} other {archivos seleccionados}} en cualquier carpeta @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Comprimido(s) {0} elemento(s) en "{1}" + Comprimido {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - Comprimido(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Comprimido # elemento} other {Comprimidos # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al comprimir {0} elemento(s) en "{1}" + Error comprimiendo {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - No se ha(n) podido comprimir {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo comprimir # elemento} other {No se pudieron comprimir # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Comprimiendo {0} elemento(s) en "{1}" + Comprimiendo {0, plural, one {# elemento} other {# elementos}} en "{1}" Shown in a StatusCenter card. - Comprimiendo {0} elemento(s) desde "{1}" a "{2}" + Comprimiendo {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Cancelada la instalación de {0} fuente(s) desde "{1}" + Cancelada la instalación de {0, plural, one {# fuente} other {# fuentes}} desde "{1}" Shown in a StatusCenter card. - Instalada(s) {0} fuente(s) + {0, plural, one {# Fuente instalada} other {# Fuentes instaladas}} Shown in a StatusCenter card. - Instalada(s) {0} fuente(s) desde "{1}" + {0, plural, one {# Fuente instalada} other {# Fuentes instaladas}} desde "{1}" Shown in a StatusCenter card. - Error instalando {0} fuente(s) + Error instalando {0, plural, one {# fuente} other {# fuentes}} Shown in a StatusCenter card. - No se ha(n) podido instalar {0} fuente(s) desde "{1}" + {0, plural, one {No se pudo instalar # fuente} other {No se pudieron instalar # fuentes}} desde "{1}" Shown in a StatusCenter card. - Instalando {0} fuente(s) + Instalando {0, plural, one {# fuente} other {# fuentes}} Shown in a StatusCenter card. - Instalando {0} fuente(s) desde "{1}" + Instalando {0, plural, one {# fuente} other {# fuentes}} desde "{1}" Shown in a StatusCenter card. - Cancelada la copia de {0} elemento(s) en "{1}" + Cancelada la copia de {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Cancelada la copia de {0} elemento(s) desde "{1}" a "{2}" + Cancelada la copia de {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Copiado(s) {0} elemento(s) en "{1}" + {0, plural, one {Copiado # elemento} other {Copiados # elementos}} a "{1}" Shown in a StatusCenter card. - Copiado(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Copiado # elemento} other {Copiados # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al copiar {0} elemento(s) en "{1}" + Error copiando {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - No se ha(n) podido copiar {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo copiar # elemento} other {No se pudieron copiar # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Copiando {0} elemento(s) en "{1}" + Copiando {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Copiando {0} elemento(s) desde "{1}" a "{2}" + Copiando {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Cancelada la eliminación de {0} elemento(s) desde "{1}" + Cancelada la eleiminación de {0, plural, one {# elemento} other {# elementos}} de "{1}" Shown in a StatusCenter card. - Eliminado(s) {0} elemento(s) desde "{1}" + {0, plural, one {Eliminado # elemento} other {Eliminados # elementos}} de "{1}" Shown in a StatusCenter card. - Error al eliminar {0} elemento(s) desde "{1}" + Error eliminando {0, plural, one {# elemento} other {# elementos}} de "{1}" Shown in a StatusCenter card. - No se ha(n) podido eliminar {0} elemento(s) desde {1}" + {0, plural, one {No se pudo eliminar # elemento} other {No se pudieron eliminar # elementos}} de "{1}" Shown in a StatusCenter card. - Eliminando {0} elemento(s) desde "{1}" + Eliminando {0, plural, one {# elemento} other {# elementos}} desde "{1}" Shown in a StatusCenter card. - Cancelado el movimiento de {0} elemento(s) a "{1}" + Cancelado el movimiento de {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Cancelado el movimiento de {0} elemento(s) desde "{1}" a "{2}" + Cancelado el movimiento de {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Movido(s) {0} elemento(s) a "{1}" + {0, plural, one {Movido # elemento} other {Movidos # elementos}} a "{1}" Shown in a StatusCenter card. - Movido(s) {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {Movido # elemento} other {Movidos # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Moviendo {0} elemento(s) a "{1}" + Moviendo {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - Moviendo {0} elemento(s) desde "{1}" a "{2}" + Moviendo {0, plural, one {# elemento} other {# elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. - Error al mover {0} elemento(s) a "{1}" + Error moviendo {0, plural, one {# elemento} other {# elementos}} a "{1}" Shown in a StatusCenter card. - No se ha(n) podido mover {0} elemento(s) desde "{1}" a "{2}" + {0, plural, one {No se pudo mover # elemento} other {No se pudieron mover # elementos}} desde "{1}" a "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Activar la barra de búsqueda unificada (omnibar) - Puede agregar secciones a la barra lateral haciendo clic derecho y seleccionando las secciones que desea agregar @@ -4259,7 +4256,10 @@ Muestra la ruta de navegación contraída - Mostrar subcarpetas + Mostrar carpetas en {0} + + + Mostrar carpetas en Inicio No hay comandos que contengan {0} @@ -4268,9 +4268,12 @@ Ver más - Filtering for + Filtrar por - Filename + Nombre del archivo + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/fa-IR/Resources.resw b/src/Files.App/Strings/fa-IR/Resources.resw index 04769aa453ae..0a3966312650 100644 --- a/src/Files.App/Strings/fa-IR/Resources.resw +++ b/src/Files.App/Strings/fa-IR/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - فشرده سازی {0} آیتم از «{1}» به «{2}» انجام نشد + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - کپی {0} آیتم از «{1}» به «{2}» لغو شد + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/fi-FI/Resources.resw b/src/Files.App/Strings/fi-FI/Resources.resw index 286ff114c4ec..73665df82c6a 100644 --- a/src/Files.App/Strings/fi-FI/Resources.resw +++ b/src/Files.App/Strings/fi-FI/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Pakattu {0} kohdetta kansioon "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Pakattu {0} kohdetta kansiosta "{1}" kansioon "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Virhe pakattaessa {0} kohdetta kansioon "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} kohteen pakkaaminen epäonnistui kansiosta "{1}" kansioon "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Pakataan {0} kohdetta kansioon "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Pakataan {0} kohdetta kansiosta "{1}" kansioon "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - {0} fontin asennus peruutettu kohteesta "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} fontti(a) asennettu + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Asennettu {0} fontti(a) kohteesta "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Virhe asennettaessa {0} fonttia + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - {0} fontin asennus epäonnistui kohteesta "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Asennetaan {0} fontti(a) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Asennetaan {0} fontti(a) kohteesta "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} kohteen kopiointi peruutettu kansioon "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} kohteen kopiointi peruutettu kansiosta "{1}" kansioon "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopioitu {0} kohdetta kansioon "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopioitu {0} kohdetta kansiosta "{1}" kansioon "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Virhe kopioitaessa {0} kohdetta kansioon "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} kohteen kopiointi epäonnistui kansiosta "{1}" kansioon "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopioidaan {0} kohdetta kansioon "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopioidaan {0} kohdetta kansiosta "{1}" kansioon "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Peruutettu {0} kohteen poisto kansiosta "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Poistettu {0} kohde(tta) kansiosta "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Virhe poistettaessa {0} kohde(tta) kansiosta "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} kohteen poistaminen epäonnistui kansiosta "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Poistetaan {0} kohde(tta) kansiosta "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Peruutettiin {0} kohteen siirtäminen kansioon "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Peruutettiin {0} kohteen siirtäminen kansiosta "{1}" kansioon "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Siirrettiin {0} kohdetta kansioon "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Siirrettiin {0} kohdetta kansiosta "{1}" kansioon "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Siirretään {0} kohdetta kansioon "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Siirretään {0} kohdetta kansiosta "{1}" kansioon "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Virhe siirrettäessä {0} kohdetta kansioon "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} kohteen siirtäminen kansiosta "{1}" kansioon "{2}" epäonnistui + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - Voit lisätä osioita sivupalkkiin napsauttamalla hiiren oikealla painikkeella ja valitsemalla ne @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/fil-PH/Resources.resw b/src/Files.App/Strings/fil-PH/Resources.resw index 9ec0370bb012..7f68741c05d5 100644 --- a/src/Files.App/Strings/fil-PH/Resources.resw +++ b/src/Files.App/Strings/fil-PH/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/fr-FR/Resources.resw b/src/Files.App/Strings/fr-FR/Resources.resw index 9cd5f5c2eb6a..5b140c56fd80 100644 --- a/src/Files.App/Strings/fr-FR/Resources.resw +++ b/src/Files.App/Strings/fr-FR/Resources.resw @@ -1098,10 +1098,10 @@ Activer/Désactiver la visibilité de la barre d'outils - Activer/Désactiver l'en-tête du filtre + Afficher/Masquer l'en-tête de filtrage - Activer/Désactiver la visibilité de l'en-tête du filtre + Activer/Désactiver la visibilité de l'en-tête de filtrage Pas d'aperçu disponible @@ -2004,10 +2004,10 @@ Adapter la largeur des colonnes - Adaptatif + Disposition adaptative - Adaptatif (Ctrl+Maj+7) + Adaptative (Ctrl+Maj+7) Ctrl+Maj+7 @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} élément(s) compressé(s) vers "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} élément(s) compressé(s) de "{1}" vers "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Erreur lors de la compression de {0} élément(s) vers "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Échec de la compression de {0} élément(s) de "{1}" vers "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compression de {0} élément(s) vers "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compression de {0} élément(s) de "{1}" vers "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Installation de {0} police(s) depuis "{1}" annulée + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} police(s) installée(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - {0} police(s) installée(s) depuis "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Erreur lors de l'installation de {0} police(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Échec de l'installation de {0} police(s) depuis "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installation de {0} police(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installation de {0} police(s) depuis "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Copie de {0} élément(s) vers "{1}" annulée + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copie de {0} élément(s) de "{1}" vers "{2}" annulée + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} élément(s) copié(s) vers "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} élément(s) copié(s) de "{1}" vers "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Erreur lors de la copie de {0} élément(s) vers "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Échec de la copie de {0} élément(s) de "{1}" vers "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copie de {0} élément(s) vers "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copie de {0} élément(s) de "{1}" vers "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Suppression de {0} élément(s) depuis "{1}" annulée + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} élément(s) supprimé(s) depuis "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Erreur lors de la suppression de {0} élément(s) depuis "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Échec de la suppression de {0} élément(s) depuis "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Suppression de {0} élément(s) depuis "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Déplacement de {0} élément(s) vers "{1}" annulé + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Déplacement de {0} élément(s) de "{1}" vers "{2}" annulé + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} élément(s) déplacé(s) vers "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} élément(s) déplacé(s) de "{1}" vers "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Déplacement de {0} élément(s) vers "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Déplacement de {0} élément(s) depuis "{1}" vers "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Erreur lors du déplacement de {0} élément(s) vers "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Échec du déplacement de {0} élément(s) depuis "{1}" vers "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Décimal - - Activer l'Omnibar - Vous pouvez ajouter des sections à la barre latérale en effectuant un clic droit et en sélectionnant les sections que vous souhaitez ajouter @@ -4259,7 +4256,10 @@ Afficher le fil d'Ariane du chemin réduit - Afficher les sous-dossiers + Show folders in {0} + + + Show folders in Home Il n'y a aucune commande contenant {0} @@ -4268,9 +4268,12 @@ Voir plus - Filtering for + Filtrer par Nom du fichier + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/he-IL/Resources.resw b/src/Files.App/Strings/he-IL/Resources.resw index 28bdef9330c6..f380a111348c 100644 --- a/src/Files.App/Strings/he-IL/Resources.resw +++ b/src/Files.App/Strings/he-IL/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/hi-IN/Resources.resw b/src/Files.App/Strings/hi-IN/Resources.resw index 8f5b5f4fa386..0aa012284700 100644 --- a/src/Files.App/Strings/hi-IN/Resources.resw +++ b/src/Files.App/Strings/hi-IN/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/hr-HR/Resources.resw b/src/Files.App/Strings/hr-HR/Resources.resw index 2bc719d579aa..62b1eac92438 100644 --- a/src/Files.App/Strings/hr-HR/Resources.resw +++ b/src/Files.App/Strings/hr-HR/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/hu-HU/Resources.resw b/src/Files.App/Strings/hu-HU/Resources.resw index 0f8e8c78a048..85d95744047b 100644 --- a/src/Files.App/Strings/hu-HU/Resources.resw +++ b/src/Files.App/Strings/hu-HU/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} elem tömörítve ide: "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem(ek) tömörítése "{1}"-ről "{2}"-re + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Nem sikerült {0} elemet tömöríteni ide: "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nem sikerült {0} elem(ek) tömörítése "{1}"-ről "{2}"-re + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} elem tömörítése ide: "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem(ek) tömörítése "{1}"-ről "{2}"-re + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} elem átmásolása ide: "{1}" megszakítva + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem átmásolása innen: "{1}" ide: "{2}" megszakítva + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} elem másolva ide: "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem átmásolva innen: "{1}" ide: "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Nem sikerült {0} elemet másolni ide: "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nem sikerült átmásolni {0} elemet innen: "{1}" ide: "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} elem másolása ide: "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem átmásolása innen: "{1}" ide: "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - {0} elem törlése innen: "{1}" megszakítva + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} elem törölve innen: "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Nem sikerült {0} elemet törölni innen: "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Nem sikerült törölni {0} elemet innen: "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} elem törlése innen: "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} elem áthelyezése ide: "{1}" megszakítva + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem átmásolása innen: "{1}" ide: "{2}" megszakítva + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} elem áthelyezve ide: "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem áthelyezve innen: "{1}" ide: "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} elem áthelyezése ide: "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} elem áthelyezése innen: "{1}" ide: "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Nem sikerült {0} elemet áthelyezni ide: "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nem sikerült áthelyezni {0} elemet innen: "{1}" ide: "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/hy-AM/Resources.resw b/src/Files.App/Strings/hy-AM/Resources.resw index f563899b21f8..4bd875d90159 100644 --- a/src/Files.App/Strings/hy-AM/Resources.resw +++ b/src/Files.App/Strings/hy-AM/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Չեղարկվեց {0} տարրի պատճենումը դեպի «{1}» + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Պատճենվել է {0} տարր դեպի «{1}» + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Պատճենում է {0} տարր դեպի «{1}» + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Տեղափողվել է {0} տարր դեպի «{1}» + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Տեղափողվել է {0} տարր դեպի «{1}» + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/id-ID/Resources.resw b/src/Files.App/Strings/id-ID/Resources.resw index effca47a2c37..4d717032eb62 100644 --- a/src/Files.App/Strings/id-ID/Resources.resw +++ b/src/Files.App/Strings/id-ID/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Kompres {0} item(s) ke "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kompres {0} item(s) dari "{1}" ke "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Gagal mengkompresi {0} item(s) ke "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Gagal mengkompres {0} item(s) dari "{1}" ke "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kompres {0} item(s) ke "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Mengompres {0} item(s) dari "{1}" ke "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Membatalkan penyalinan {0} item(s) ke "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Membatalkan penyalinan {0} item(s) dari "{1}" ke "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Disalin {0} item(s) ke "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Disalin {0} item(s) dari "{1}" ke "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error menyalin {0} item(s) ke "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Gagal untuk menyalin {0} item(s) dari "{1}" ke "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Menyalin {0} item(s) ke "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Menyalin {0} item(s) dari "{1}" ke "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Membatalkan penghapusan {0} item(s) dari "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Dihapus {0} item(s) dari "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error menghapus {0} item(s) dari "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Gagal menghapus {0} item(s) dari {1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Menghapus {0} item(s) dari "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Dibatalkan pemindahan {0} item(s) ke "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Dibatalkan pemindahan {0} item(s) dari "{1}" ke "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Terpindah {0} item(s) ke "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Terpindah {0} item(s) dari "{1}" ke "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Memindah {0} item(s) ke "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Memindah {0} item(s) dari "{1}" ke "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error memindah {0} item(s) ke "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Gagal untuk memindah {0} item(s) dari "{1}" ke "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/it-IT/Resources.resw b/src/Files.App/Strings/it-IT/Resources.resw index 7d22cdc048e7..cbbad93ecccf 100644 --- a/src/Files.App/Strings/it-IT/Resources.resw +++ b/src/Files.App/Strings/it-IT/Resources.resw @@ -124,7 +124,7 @@ Copia percorso - Copy item path + Copia percorso elemento Copia percorso con virgolette @@ -166,7 +166,7 @@ Salta - Select all + Seleziona tutti Inverti selezione @@ -1404,7 +1404,7 @@ {0} elementi - Reopen tab + Riapri scheda Rinomina @@ -1611,7 +1611,7 @@ Sostituisci tutte le voci delle autorizzazioni degli oggetti figlio con le voci delle autorizzazioni ereditabili da questo oggetto - Close pane + Chiudi pannello Entra in modalità Overlay Compatto @@ -2124,7 +2124,7 @@ Codifica - {0} (detected) + {0} (rilevato) Percorso @@ -2313,7 +2313,7 @@ Opzioni del menu contestuale - File extensions + Estensioni file Formato @@ -2322,13 +2322,13 @@ Aiuto - Full screen + Schermo intero Sei sicuro/a di voler eliminare questo tag? - Play + Riproduci Altezza @@ -2493,10 +2493,10 @@ Ripristina tutti gli elementi nel cestino - Open {0, plural, one {item} other {items}} + Apri {0, plural, one {elemento} other {elementi}} - Open {0, plural, one {item} other {items}} with selected application + Apri {0, plural, one {elemento} other {elementi}} con l'applicazione selezionata Apri la cartella superiore dell'elemento cercato @@ -2511,7 +2511,7 @@ Seleziona tutti gli elementi - Invert selected items + Inverti elementi selezionati Clear selected items @@ -2520,7 +2520,7 @@ Inverti la selezione degli elementi - Share selected {0, plural, one {file} other {files}} with others + Condividi {0, plural, one {il file selezionato} other {i file selezionati}} con altri Pin {0, plural, one {item} other {items}} to the Start Menu @@ -2547,22 +2547,22 @@ Imposta l'immagine selezionata come sfondo dell'app - Install font + Installa Font - Install driver + Installa driver - Install certificate + Installa certificato - Install selected {0, plural, one {font} other {fonts}} + Installa font {0, plural, one {selezionato} other {selezionati}} Install {0, plural, one {driver} other {drivers}} using selected inf {0, plural, one {file} other {files}} - Install selected {0, plural, one {certificate} other {certificates}} + Installa {0, plural, one {il certificato selezionato} other {i certificati selezionati}} Esegui l'applicazione selezionata come amministratore @@ -2983,13 +2983,13 @@ Senza etichetta - Previous tab + Scheda precedente - Next tab + Scheda successiva - Close tab + Chiudi scheda Modifica percorso @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressi {0} elemento/i in "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressi {0} elemento/i da "{1}" in "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Errore nella compressione di {0} elemento/i in "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Errore nella compressione di {0} elemento/i da "{1}" in "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressione di {0} elemento/i in "{1}" in corso + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressione di {0} elemento/i da "{1}" in "{2}" in corso + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Annullata l'installazione di {0} caratteri da "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installati {0} caratteri + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installati {0} caratteri da "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Errore nell'installazione di {0} caratteri + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installazione di {0} caratteri da "{1}" fallita + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installazione di {0} caratteri + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installazione di {0} caratteri da "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Annullata copia di {0} elemento/i in "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Annullata copia di {0} elemento/i da "{1}" a "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copiati {0} elemento/i in "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copiati {0} elemento/i da "{1}" a "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Errore nella copia di {0} elemento/i in "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Errore nella copia di {0} elemento/i da "{1}" a "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copia di {0} elemento/i in "{1}" in corso + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copia di {0} elemento/i da "{1}" a "{2}" in corso + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Annullata eliminazione di {0} elemento/i da "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Eliminati {0} elemento/i da "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Errore nell'eliminazione di {0} elemento/i da "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Eliminazione di {0} elementi da "{1}" non riuscita + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Eliminazione di {0} elemento/i da "{1}" in corso + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Annullato spostamento di {0} elemento/i in "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Annullato spostamento di {0} elemento/i da "{1}" in "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Spostati {0} elemento/i in "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Spostati {0} elemento/i da "{1}" in "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Spostamento di {0} elemento/i in "{1}" in corso + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Spostamento di {0} elemento/i da "{1}" in "{2}" in corso + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Errore nello spostamento di {0} elemento/i in "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Errore nello spostamento di {0} elemento/i da "{1}" in "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3718,7 +3718,7 @@ Shown in a StatusCenter card. - {0}/{1} {0, plural, one {item} other {items}} processed + {0}/{1} {0, plural, one {elemento elaborato} other {elementi elaborati}} Shown in a StatusCenter card. Used as "8/20 items processed" @@ -3764,7 +3764,7 @@ Si è verificato un errore durante l'applicazione di quest'etichetta - Extract selected {0, plural, one {archive} other {archives}} here for single-item or to new folder for multi-item + Estrai {0, plural, one {l'archivio selezionato} other {gli archivi selezionati}} qui per un singolo elemento o per una nuova cartella per un oggetto multiplo Estrai qui (Smart) @@ -4223,9 +4223,6 @@ Decimale - - Attiva Omnibar - È possibile aggiungere sezioni alla barra laterale facendo clic con il tasto destro del mouse e selezionando le sezioni che si desidera aggiungere @@ -4233,19 +4230,19 @@ Trascina qui i file o le cartelle per interagire con loro attraverso schede diverse - Enter a path to navigate to... + Inserisci un percorso per navigare a... - Find features and commands... + Trova funzionalità e comandi... - Search for files and folders... + Cerca per file e cartelle... - During file operations + Durante le operazioni dei file - Show status center button + Mostra il pulsante centro di stato Anello di avanzamento dello stato centrale @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Mostra cartelle figlie + Mostra cartelle in {0} + + + Mostra cartelle in Home Non ci sono comandi contenenti {0} @@ -4273,4 +4273,7 @@ Nome file + + Mostra l'opzione per aprire le cartelle nel terminale di Windows + diff --git a/src/Files.App/Strings/ja-JP/Resources.resw b/src/Files.App/Strings/ja-JP/Resources.resw index d14a402f3cc6..f6cf34726b6d 100644 --- a/src/Files.App/Strings/ja-JP/Resources.resw +++ b/src/Files.App/Strings/ja-JP/Resources.resw @@ -2721,10 +2721,10 @@ 新しいタブ - Navigate backward + 前に戻る - Navigate forward + 次へ進む 1つ上のフォルダーに移動する @@ -2757,7 +2757,7 @@ 現在のタブを含むすべてのタブを閉じる - Reopen recently closed tab + 最近閉じたタブを開く 前のタブに移動する @@ -2769,13 +2769,13 @@ 現在のタブを閉じる - Close the active pane + アクティブなペインを閉じる 別のペインに移動 - Switch focus to the other pane + 他のペインにフォーカスする サイドバーの表示を切り替える @@ -2983,13 +2983,13 @@ タグなし - Previous tab + 前のタブへ - Next tab + 次のタブへ - Close tab + タブを閉じる パスを編集 @@ -3151,7 +3151,7 @@ 新しいブランチに切り替える - Create a folder with the currently selected {0, plural, one {item} other {items}} + 選択された{0, plural, other {}}から新しいフォルダーを作成する プロパティ @@ -3299,7 +3299,7 @@ リポジトリの初期化 - Initialize current folder as a git repository + 今いる場所をGitリポジトリとして初期化する リモート リポジトリ名 @@ -3314,13 +3314,13 @@ 項目をパスで並べ替える - Open selected directory in a new pane + ディレクトリを新しいペインで開く - Open selected directory in a new tab + ディレクトリを新しいタブで開く - Open selected directory in a new window + ディレクトリを新しいウインドウで開く すべて開く @@ -3345,7 +3345,7 @@ コマンド {0} は現在実行できません。 - Command Palette + コマンドパレット Open Command Palette in the OmniBar @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} 項目を "{1}" へ圧縮しました + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ圧縮しました + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へ圧縮中にエラーが発生しました + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ圧縮できませんでした + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へ圧縮しています + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ圧縮しています + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - "{1}" からの {0} 個のフォントのインストールをキャンセルしました + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} 個のフォントをインストールしました + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - "{1}" から {0} 個のフォントをインストールしました + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} 個のフォントのインストール中にエラーが発生しました + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - "{1}" からの {0} 個のフォントをインストールできませんでした + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} 個のフォントをインストールしています + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - "{1}" からの {0} 個のフォントをインストールしています + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} 項目の "{1}" へのコピーをキャンセルしました + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目の "{1}" から "{2}" へのコピーをキャンセルしました + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へコピーしました + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へコピーしました + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へコピー中にエラーが発生しました + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へコピーできませんでした + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へコピーしています + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へコピーしています + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - {0} 項目の "{1}" からの削除をキャンセルしました + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から削除しました + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から削除中にエラーが発生しました + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から削除できませんでした + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から削除しています + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} 項目の "{1}" への移動をキャンセルしました + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目の "{1}" から "{2}" への移動をキャンセルしました + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へ移動しました + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ移動しました + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へ移動しています + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ移動しています + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} 項目を "{1}" へ移動中にエラーが発生しました + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} 項目を "{1}" から "{2}" へ移動できませんでした + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3718,7 +3718,7 @@ Shown in a StatusCenter card. - {0}/{1} {0, plural, one {item} other {items}} processed + {0}/{1}{0, plural, other {}} 完了 Shown in a StatusCenter card. Used as "8/20 items processed" @@ -4034,16 +4034,16 @@ タブ操作メニュー - Vertical pane + 垂直ペイン - Add vertical pane + 縦にペインを追加する - Horizontal pane + 水平ペイン - Add horizontal pane + 横にペインを追加する 縦に配置 @@ -4223,23 +4223,20 @@ 10進 - - オムニバーを有効にする - - You can add sections to the sidebar by right-clicking and selecting the sections you want to add + サイドバーを右クリックして、追加したいセクションを選ぶとサイドバーに追加することができます - Drag files or folders here to interact with them across different tabs + ここにファイルまたはフォルダをドラッグしてタブの間でファイルを操作します - Enter a path to navigate to... + 移動先のパスを入力… - Find features and commands... + 機能とコマンドを検索… - Search for files and folders... + ファイルとフォルダーを検索… During file operations @@ -4259,18 +4256,24 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home - There are no commands containing {0} + {0}を含むコマンドは存在しません - See more + もっと見る - Filtering for + 絞り込む - Filename + ファイル名 + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/ka/Resources.resw b/src/Files.App/Strings/ka/Resources.resw index 15867b7c5f4f..9ddaaf920615 100644 --- a/src/Files.App/Strings/ka/Resources.resw +++ b/src/Files.App/Strings/ka/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/km-KH/Resources.resw b/src/Files.App/Strings/km-KH/Resources.resw index cee1dd492f4f..88926145b8bb 100644 --- a/src/Files.App/Strings/km-KH/Resources.resw +++ b/src/Files.App/Strings/km-KH/Resources.resw @@ -1224,13 +1224,13 @@ Columns (Ctrl+Shift+6) - Pin to the Start Menu + ខ្ទាស់​ទៅ​បញ្ជី​ចាប់ផ្ដើម​ - Unpin from the Start Menu + ដក​ខ្ទាស់​ចេញ​ពី​បញ្ជី​ចាប់ផ្ដើម​ - Library + បណ្ណាល័យ​ Locations: @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/ko-KR/Resources.resw b/src/Files.App/Strings/ko-KR/Resources.resw index e32929da6961..48ab0aecd588 100644 --- a/src/Files.App/Strings/ko-KR/Resources.resw +++ b/src/Files.App/Strings/ko-KR/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 압축했습니다 + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 압축했습니다 + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 압축하는 작업 중 오류가 발생했습니다. + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 {1}에서 {2}(으)로 압축하지 못했습니다. + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 압축 중 + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 압축 중 + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 복사하는 작업을 취소했습니다 + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 복사하는 작업을 취소했습니다 + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 복사했습니다 + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 복사했습니다 + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 복사하는 작업 중 오류가 발생했습니다. + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 복사하지 못했습니다. + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 복사 중 + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 복사 중 + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 삭제하는 작업을 취소했습니다 + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 삭제했습니다 + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 삭제하는 작업 중 오류가 발생했습니다 + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 삭제하는 데 실패했습니다 + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 삭제 중 + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 이동하는 작업을 취소했습니다 + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 이동하는 작업을 취소했습니다 + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 이동했습니다 + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 이동했습니다 + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 이동 중 + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 이동 중 + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"(으)로 이동하는 작업 중 오류가 발생했습니다. + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 항목 {0}개를 "{1}"에서 "{2}"(으)로 이동하지 못했습니다. + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/lt-LT/Resources.resw b/src/Files.App/Strings/lt-LT/Resources.resw index d757d68a6865..2e8d8cb313d5 100644 --- a/src/Files.App/Strings/lt-LT/Resources.resw +++ b/src/Files.App/Strings/lt-LT/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/lv-LV/Resources.resw b/src/Files.App/Strings/lv-LV/Resources.resw index 7c7f7930305e..e4ef9e4011c9 100644 --- a/src/Files.App/Strings/lv-LV/Resources.resw +++ b/src/Files.App/Strings/lv-LV/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/ms-MY/Resources.resw b/src/Files.App/Strings/ms-MY/Resources.resw index 152f99cb6d5a..ea869a5720d5 100644 --- a/src/Files.App/Strings/ms-MY/Resources.resw +++ b/src/Files.App/Strings/ms-MY/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/nb-NO/Resources.resw b/src/Files.App/Strings/nb-NO/Resources.resw index d5dc6eb1c634..921c8614a1d8 100644 --- a/src/Files.App/Strings/nb-NO/Resources.resw +++ b/src/Files.App/Strings/nb-NO/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Kopierte {0} element(er) til "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopierte {0} element(er) fra "{1}til "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopierte {0} element(er) til "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopierer {0} element(er) til "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Kunne ikke slette {0} element(er) fra "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Sletter {0} element(er) fra "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Flyttet {0} element(er) til "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Flyttet {0} element(er) fra "{1}" til "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kunne ikke flytte {0} element(er) fra "{1}" til "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/nl-NL/Resources.resw b/src/Files.App/Strings/nl-NL/Resources.resw index dbcd294bd712..fd1448d8884d 100644 --- a/src/Files.App/Strings/nl-NL/Resources.resw +++ b/src/Files.App/Strings/nl-NL/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} item(s) naar "{1}" gecomprimeerd + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} item(s) van "{1}" naar "{2}" gecomprimeerd + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fout bij het comprimeren van {0} item(s) naar "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Comprimeren van {0} item(s) van "{1}" naar "{2}" mislukt + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} item(s) naar "{1}" comprimeren + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} item(s) van "{1}" naar "{2}" comprimeren + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - {0} lettertype(s) van "{1}" installeren geannuleerd + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} lettertype(s) geïnstalleerd + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - {0} lettertype(s) geïnstalleerd van "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Fout bij installeren van {0} lettertype(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Fout bij installeren van {0} lettertype(s) van "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} lettertype(s) installeren + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - {0} lettertype(s) installeren van "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Kopiëren {0} item(s) naar "{1}" geannuleerd + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopiëren {0} item(s) van "{1}" naar "{2}" geannuleerd + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} item(s) naar "{1}" gekopieerd + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} item(s) van "{1}" naar "{2}" gekopieerd + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fout bij het kopiëren van {0} item(s) naar "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopiëren van {0} item(s) van "{1}" naar "{2}" mislukt + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} item(s) naar "{1}" aan het kopiëren + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} item(s) van "{1}" naar "{2}" aan het kopiëren + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Verwijderen van {0} item(s) van "{1}" geannuleerd + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} Item(s) verwijderd van "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Fout bij verwijderen van {0} item(s) van "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Kan {0} item(s) niet verwijderen van "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} item(s) verwijderen van "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Verplaatsen {0} items(s) uit "{1}" geannuleerd + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Verplaatsen {0} items(s) van "{1}" naar "{2}" geannuleerd + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} item(s) verplaatst naar "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} item(s) van "{1}" naar "{2}" verplaatst + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} item(s) verplaatsen naar "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - "{0}" item(s) van "{1}" naar "{2}" verplaatsen + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fout tijdens verplaatsen van "{0}" item(s) naar "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Verplaatsen van {0} item(s) van "{1}" naar "{2}" mislukt + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimaal - - Omnibalk inschakelen - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/pl-PL/Resources.resw b/src/Files.App/Strings/pl-PL/Resources.resw index 96b94b3f5341..2b06786730a6 100644 --- a/src/Files.App/Strings/pl-PL/Resources.resw +++ b/src/Files.App/Strings/pl-PL/Resources.resw @@ -124,7 +124,7 @@ Kopiuj ścieżkę - Copy item path + Kopiuj ścieżkę pliku/folderu Kopiuj ścieżkę w cudzysłowie @@ -166,7 +166,7 @@ Pomiń - Select all + Zaznacz wszystko Odwróć zaznaczenie @@ -217,7 +217,7 @@ Pokaż ukryte pliki i foldery - Show dot files + Pokaż pliki rozpoczynające się kropką Wygląd @@ -1089,19 +1089,19 @@ Przełącz panel informacji - Toggle visibility of the detail/preview panes + Przełącz widoczność panelu szczegółów/podglądu - Toggle toolbar + Przełącz pasek narzędzi - Toggle visibility of the toolbar + Przełącz widoczność paska narzędzi - Toggle filter header + Przełącz nagłówek filtru - Toggle visibility of the filter header + Przełącz widoczność nagłówka filtru Podgląd niedostępny @@ -1404,7 +1404,7 @@ {0} elementy - Reopen tab + Ponownie otwórz zakładkę Zmień nazwę @@ -1611,7 +1611,7 @@ Zastąp wszystkie wpisy uprawnień obiektu podrzędnego wpisami uprawnień dziedzicznych z tego obiektu - Close pane + Zamknij panel Otwórz kompaktową nakładkę @@ -2019,22 +2019,22 @@ Zachowania - Hello! + Cześć! - Enjoying Files? Please consider reviewing in the Microsoft Store. + Podoba Ci się Files? Rozważ zostawienie recenzji w sklepie Microsoft. - Enjoying Files? Please consider supporting the project on GitHub. + Podoba Ci się Files? Rozważ wsparcie projektu na GitHub. - Sponsor + Sponsoruj - Rate us + Oceń nas - Dismiss + Odrzuć Ustaw jako tło @@ -2313,7 +2313,7 @@ Opcje menu kontekstowego - File extensions + Rozszerzenia plików Format @@ -2322,13 +2322,13 @@ Pomoc - Full screen + Pełny ekran Na pewno chcesz usunąć ten tag? - Play + Odtwórz Wysokość @@ -2388,7 +2388,7 @@ Zwiększ rozmiar - Sort direction + Kierunek sortowania Nieprawidłowa nazwa @@ -2400,37 +2400,37 @@ Wideo - Preview popup + Pokaż okno podglądu Przełącz kompaktową nakładkę - Open the online help page in your browser + Otwórz stronę pomocy w przeglądarce - Toggle full screen mode + Przełącz tryb pełnoekranowy - Enter compact overlay mode + Wejdź w tryb kompaktowy - Exit compact overlay mode + Wyjdź z trybu kompaktowego - Toggle compact overlay mode + Przełącz tryb kompaktowy - Start search in the OmniBar + Rozpocznij wyszukiwanie w OmniBar - Toggle visibility of hidden items + Przełącz widoczność plików ukrytych - Toggle visibility of dot files + Przełącz widoczność pilików zaczynających się kropką - Toggle visibility of file extensions + Przełącz widoczność rozszerzeń plików Przełącz panel podglądu, aby wyświetlić podgląd pliku @@ -2439,37 +2439,37 @@ Przełącz, czy wyświetlić pasek boczny - Copy selected {0, plural, one {item} other {items}} + Skopiuj {0, plural, one {wybrany plik/folder} other {wybrane pliki/foldery}} - Copy path of the current directory + Kopiuj ścieżkę do bieżącego folderu - Copy path of selected items + Kopiuj ścieżkę do zaznaczonych plików/folderów - Copy path of selected items with quotes + Kopiuj ścieżkę zaznaczonych elementów z cudzysłowami - Copy path of the current directory with quotes + Kopiuj ścieżkę do bieżącego folderu z cudzysłowami - Cut selected {0, plural, one {item} other {items}} + Wytnij {0, plural, one {wybrany plik/folder} other {pliki/foldery}} - Paste items to the current folder + Wklej pliki/foldery do bieżącego folderu - Paste items to the current folder as shortcuts + Wklej pliki/foldery do bieżącego folderu jako skróty - Paste items to the selected folder + Wklej pliki/foldery do wybranego folderu - Paste to selected folder + Wklej do wybranego folderu - Delete selected {0, plural, one {item} other {items}} + Usuń {0, plural, one {wybrany plik/folder} other {wybrane pliki/foldery}} Utwórz nowy folder @@ -2481,7 +2481,7 @@ Utwórz nowy skrót do dowolnego elementu - Empty the contents of Recycle Bin + Opróżnij zawartość kosza Otwórz menu "Formatuj dysk" dla wybranego elementu @@ -2511,10 +2511,10 @@ Zaznacz wszystkie elementy - Invert selected items + Odwróć zaznaczenie plików/folderów - Clear selected items + Odznacz pliki/foldery Przełącz wybór zaznaczenia @@ -2547,13 +2547,13 @@ Ustaw wybrane zdjęcie jako tło aplikacji - Install font + Instaluj czcionkę - Install driver + Instaluj sterownik - Install certificate + Instaluj certyfikat Zainstaluj {0, plural, one {wybraną czcionkę} other {wybrane czcionki}} @@ -2586,13 +2586,13 @@ Stwórz archiwum zip z {0, plural, one {wybranym przedmiotem} other {wybranymi przedmiotami}} - Extract selected {0, plural, one {archive} other {archives}} to any folder + Wyodrębnij wybrane {0, plural, one {achiwum} other {archiwa}} do dowolnego folderu - Extract selected {0, plural, one {archive} other {archives}} to the current folder + Wyodrębnij wybrane {0, plural, one {achiwum} other {archiwa}} do bieżączego folderu - Extract selected {0, plural, one {archive} other {archives}} to new folder + Wyodrębnij wybrane {0, plural, one {achiwum} other {archiwa}} do nowego folderu Obróć {0, plural, one {wybrany obraz} other {wybrane obrazy}} w lewo @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Skompresowano {0} plik(ów) do "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Skompresowano {0} plik(ów) z "{1}" do "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Błąd kompresowania {0} plik(ów) do "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Błąd kompresowania {0} plik(ów) z "{1}" do "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kompresowanie {0} plików do "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kompresowanie {0} plików z "{1}" do "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Anulowano usuwanie {0} czcionki/-ek z "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Zainstalowano {0} czcionkę/-i + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Zainstalowano {0} czcionkę/-ek z "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Błąd instalacji {0} czcionki/-ek + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Nie udało się usunąć {0} czcionki/-ek z "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Instalowanie {0} czcionki/-ek + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Instalowanie {0} czcionki/-ek z "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Anulowano kopiowanie {0} plik(ów) do "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Anulowano kopiowanie {0} plik(ów) z "{1}" do "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Skopiowano {0} plik(ów) do "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Skopiowano {0} plik(ów) z "{1}" do "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Błąd kopiowania {0} plików do "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Błąd kopiowania {0} plików z "{1}" do "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopiowanie {0} elementu/ów do "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Skopiowano {0} plik(ów) z "{1}" do "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Anulowano usuwanie {0} elementów z "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Usunięto {0} elementów z "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Błąd przy usuwaniu {0} elementów z "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Nie udało się usunąć {0} elementów z "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Usuwanie {0} elementów z "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Anulowano przenoszenie {0} plików do "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Anulowano przenoszenie {0} plików z "{1}" do "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Przeniesiono {0} element(y/ów) do "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Przeniesiono {0} element(y/ów) z "{1}" do "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Przenoszenie {0} elementu/ów do "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Przenoszenie {0} elementu/ów z "{1}" do "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Błąd przenoszenia {0} plików do "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Nie udało się przenieść {0} plików z "{1}" do "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Dziesiętny - - Włącz Omnipasek - Możesz dodać sekcje do paska bocznego, klikając prawym przyciskiem myszy i wybierając sekcje, które chcesz dodać @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/pt-BR/Resources.resw b/src/Files.App/Strings/pt-BR/Resources.resw index 78472da7d263..2365558a7ec4 100644 --- a/src/Files.App/Strings/pt-BR/Resources.resw +++ b/src/Files.App/Strings/pt-BR/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Itens {0} comprimidos para "{1}" + {0, plural, one {# item compactado} other {# items compactados}} para "{1}" Shown in a StatusCenter card. - Item(s) {0} comprimido(s) de "{1}" para "{2}" + {0, plural, one {# item compactado} other {# items compactados}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao comprimir item(s) {0} para "{1}" + Erro ao compactar {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao comprimir item(s) {0} de "{1}" para "{2}" + Falha ao compactar {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - Comprimindo {0} item(s) para "{1}" + Compactando {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Comprimindo item(s) {0} de "{1}" para "{2}" + Compactando {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Cancelada a instalação de {0} fonte(s) de "{1}" + Cancelado instalação de {0, plural, one {# fonte} other {# fontes}} de "{1}" Shown in a StatusCenter card. - {0} fonte(s) instalada(s) + {0, plural, one {# fonte instalada} other {# fontes instaladas}} Shown in a StatusCenter card. - {0} fonte(s) instalada(s) de "{1}" + {0, plural, one {# fonte instalada} other {# fontes instaladas}} de "{1}" Shown in a StatusCenter card. - Erro ao instalar {0} fonte(s) + Erro ao instalar {0, plural, one {# fonte} other {# fontes}} Shown in a StatusCenter card. - Falha ao instalar {0} fonte(s) de "{1}" + Falha ao instalar {0, plural, one {# fonte} other {# fontes}} de "{1}" Shown in a StatusCenter card. - Instalando {0} fonte(s) + Instalando {0, plural, one {# fonte} other {# fontes}} Shown in a StatusCenter card. - Instalando {0} fonte(s) de "{1}" + Instalando {0, plural, one {# fonte} other {# fontes}} de "{1}" Shown in a StatusCenter card. - Cancelando a cópia do item {0} para "{1}" + Cancelada a cópia de {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Cancelando a cópia de {0} item(s) de "{1}" para "{2}" + Cancelada a cópia de {0, plural, one {# item} other {# itens}} de "{1}" para "{2} " " Shown in a StatusCenter card. - Copiado(s) {0} item(s) para "{1}" + {0, plural, one {# item copiado} other {# itens copiados}} para "{1}" Shown in a StatusCenter card. - Copiado(s) {0} item(s) de "{1}" para "{2}" + Copiado {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao copiar item(s) {0} para "{1}" + Erro ao copiar {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao copiar item(s) {0} de "{1}" para "{2}" + Falha ao copiar {0, plural, one {# item} other {# itens}} de "{1}" para "{2} " " Shown in a StatusCenter card. - Copiando item(s) {0} para "{1}" + Copiando {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Copiando item(s) {0} de "{1}" para "{2}" + Copiando {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Exclusão cancelada do item {0} de "{1}" + Cancelada a exclusão de {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - {0} item(s) apagados de "{1}" + {0, plural, one {# item excluído} other {# itens excluídos}} de "{1}" Shown in a StatusCenter card. - Erro ao excluir item(s) {0} de "{1}" + Erro ao excluir {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - Falha em excluir {0} itens de {1}" + Falha ao excluir {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - Excluindo Item(s) {0} de "{1}" + Excluindo {0, plural, one {# item} other {# itens}} de "{1}" " Shown in a StatusCenter card. - Movimentação cancelada do(s) {0} item(s) para "{1}" + Cancelado mover {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Transferência cancelada do item {0} de "{1}" para "{2}" + Cancelado mover {0, plural, one {# item} other {# itens}} de "{1}" para "{2} " " Shown in a StatusCenter card. - {0} item(ns) Movido(s) para "{1}" + {0, plural, one {# item movido} other {# itens movidos}} para "{1}" Shown in a StatusCenter card. - {0} Movido(s) item(ns) de "{1}" para "{2}" + {0, plural, one {# item movido} other {# itens movidos}} de "{1}" para "{2}" Shown in a StatusCenter card. - Movendo {0} item(ns) para "{1}" + Movendo {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Movendo um item(s) {0} de "{1}" para "{2}" + Movendo {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao mover item(s) {0} para "{1}" + Erro ao mover {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao mover item(s) {0} de "{1}" para "{2}" + Falha ao mover {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Habilitar Omnibar - Você pode adicionar seções à barra lateral clicando com o botão direito e selecionando as seções que você deseja adicionar @@ -4259,7 +4256,10 @@ Mostrar trilhas de navegação recolhidas - Mostrar pastas filhas + Mostrar pastas em {0} + + + Mostrar pastas no Início Não há comandos contendo {0} @@ -4273,4 +4273,7 @@ Nome do arquivo + + Mostrar a opção de abrir pastas no Terminal do Windows + diff --git a/src/Files.App/Strings/pt-PT/Resources.resw b/src/Files.App/Strings/pt-PT/Resources.resw index 69a988d9fc7c..24c74075f5db 100644 --- a/src/Files.App/Strings/pt-PT/Resources.resw +++ b/src/Files.App/Strings/pt-PT/Resources.resw @@ -1098,7 +1098,7 @@ Mostra/oculta a exibição da barra de ferramentas - Comutar cabeçalho "Filtro" + Mostrar/ocultar cabeçalho "Filtro" Comutar exibição do cabeçalho "Filtro" @@ -2439,7 +2439,7 @@ Mostra/oculta a barra lateral - Copia {0, plural, one {o item selecionado} other {os items selecionados}} + Copia {0, plural, one {o item selecionado} other {os itens selecionados}} Copia o caminho da pasta atual @@ -2556,7 +2556,7 @@ Instalar certificado - Instalar {0, plural, one {tipo de letra selecionado} other {tipos de letra selecionados}} + Instala {0, plural, one {o tipo de letra selecionado} other {os tipos de letra selecionados}} Instalar {0, plural, one {controlador} other {controladores}} utilizando {0, plural, one {o ficheiro inf selecionado} other {os ficheiros inf selecionados}} @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} itens comprimidos para "{1}" + {0, plural, one {# item comprimido} other {# itens comprimidos}} para "{1}" Shown in a StatusCenter card. - {0} itens comprimidos de "{1}" para "{2}" + {0, plural, one {# item comprimido} other {# itens comprimidos}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao comprimir {0} itens para "{1}" + Erro ao comprimir {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao comprimir {0} itens de "{1}" para "{2}" + Falha ao comprimir {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - A comprimir {0} itens para "{1}" + A comprimir {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - A comprimir {0} itens de "{1}" para "{2}" + A comprimir {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -3546,67 +3546,67 @@ Shown in a StatusCenter card. - Cancelada a instalação de {0} tipo(s) de letra + Instalação cancelada de {0} tipo(s) de letra Shown in a StatusCenter card. - Cancelada a instalação de {0} tipo(s) de letra de “{1}” + Instalação cancelada de {0, plural, one {# tipo de letra} other {# tipos de letra}} de "{1}" Shown in a StatusCenter card. - Instalado {0} tipo(s) de letra + {0, plural, one {# tipo de letra instalado} other {# tipos de letra instalados}} Shown in a StatusCenter card. - Instalado {0} tipo(s) de letra de “{1}” + {0, plural, one {# tipo de letra instalado} other {# tipos de letra instalados}} de "{1}" Shown in a StatusCenter card. - Erro ao instalar {0} tipo(s) de letra + Erro ao instalar {0, plural, one {# tipo de letra} other {# tipos de letra}} Shown in a StatusCenter card. - Falha ao instalar {0} tipo(s) de letra de "{1}" + Falha ao instalar {0, plural, one {# tipo de letra} other {# tipos de letra}} de "{1}" Shown in a StatusCenter card. - A instalar {0} tipo(s) de letra + A instalar {0, plural, one {# tipo de letra} other {# tipos de letra}} Shown in a StatusCenter card. - A instalar {0} tipo(s) de letra de "{1}" + A instalar {0, plural, one {# tipo de letra} other {# tipos de letra}} de "{1}" Shown in a StatusCenter card. - Cancelou a cópia de {0} itens para "{1}" + Cópia cancelada de {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Cancelou a cópia de {0} itens de "{1}" para "{2}" + Cópia cancelada de {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - {0} itens copiados para "{1}" + {0, plural, one {# item copiado} other {# itens copiados}} para "{1}" Shown in a StatusCenter card. - {0} itens copiados de "{1}" para "{2}" + {0, plural, one {# item copiado} other {# itens copiados}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao copiar {0} itens para "{1}" + Erro ao copiar {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao copiar {0} itens de "{1}" para "{2}" + Falha ao copiar {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - A copiar {0} itens para "{1}" + A copiar {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - A copiar {0} itens de "{1}" para "{2}" + A copiar {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Cancelou a eliminação de {0} itens de "{1}" + Eliminação cancelada de {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - Eliminou {0} itens de "{1}" + {0, plural, one {# item eliminado} other {# itens eliminados}} de "{1}" Shown in a StatusCenter card. - Erro ao eliminar {0} itens de "{1}" + Erro ao eliminar {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - Falha ao eliminar {0} itens de "{1}" + Falha ao eliminar {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - A eliminar {0} itens de "{1}" + A eliminar {0, plural, one {# item} other {# itens}} de "{1}" Shown in a StatusCenter card. - Cancelou a movimentação de {0} itens para "{1}" + Movimentação cancelada de {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Cancelou a movimentação de {0} itens de "{1}" para "{2}" + Movimentação cancelada de {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - {0} itens movidos para "{1}" + {0, plural, one {# item movido} other {# itens movidos}} para "{1}" Shown in a StatusCenter card. - {0} itens movidos de "{1}" para "{2}" + {0, plural, one {# item movido} other {# itens movidos}} de "{1}" para "{2}" Shown in a StatusCenter card. - A mover {0} itens para "{1}" + A mover {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - A mover {0} itens de "{1}" para "{2}" + A mover {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. - Erro ao mover {0} itens para "{1}" + Erro ao mover {0, plural, one {# item} other {# itens}} para "{1}" Shown in a StatusCenter card. - Falha ao mover {0} itens de "{1}" para "{2}" + Falha ao mover {0, plural, one {# item} other {# itens}} de "{1}" para "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Ativar Omnibar - Pode adicionar secções à barra lateral clicando com o botão direito do rato e selecionando as que pretende adicionar @@ -4259,7 +4256,10 @@ Mostra os caminhos de navegação recolhidos - Mostrar subpastas + Mostrar pastas em {0} + + + Mostrar pastas em Início Não existem comandos que contenham {0} @@ -4271,6 +4271,9 @@ Filtrar por - Nome do ficheiro + Nome de ficheiro + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/ro-RO/Resources.resw b/src/Files.App/Strings/ro-RO/Resources.resw index 868ec5165b2c..43e912dc7218 100644 --- a/src/Files.App/Strings/ro-RO/Resources.resw +++ b/src/Files.App/Strings/ro-RO/Resources.resw @@ -124,7 +124,7 @@ Copiază calea - Copiere cale element + Copiază calea elementului Copiază calea cu ghilimele @@ -166,7 +166,7 @@ Omite - Selectați tot + Selectează tot Inversează selecția @@ -184,13 +184,13 @@ Elimină toate elementele - Introduceți o cale pentru a naviga sau tastați „>” pentru a deschide paleta de comenzi + Introdu o cale pentru a naviga sau tastează „>” pentru a deschide paleta de comenzi Căutare - Fișierele pe care le veți accesa vor apărea aici + Fișierele pe care le vei accesa vor apărea aici Elimină acest element @@ -229,7 +229,7 @@ Avansat - Continuați de unde ați rămas + Continuă de unde ai rămas Deschide o filă nouă @@ -256,16 +256,16 @@ Lipește - Lipire comandă rapidă + Lipește ca scurtătură - Nou + Creează Proprietăți - Deschidere + Deschide Deschide într-o filă nouă @@ -280,10 +280,10 @@ Decupează - Ștergere + Șterge - Fixare la Bara Laterală + Fixează la bara laterală Bun venit la Files! @@ -292,16 +292,16 @@ Acordă permisiunea - Pentru a începe, va trebui să ne acordați permisiunea de a vă afișa fișierele. Acest lucru va deschide o pagină de setări de unde ne puteți acorda permisiunea. Va trebui să reporniți aplicația după ce ați acordat permisiunea. + Pentru a începe, va trebui să ne acorzi permisiunea de a-ți afișa fișierele. Acest lucru va deschide o pagină de setări de unde ne poți acorda permisiunea. Va trebui să repornești aplicația după ce ai acordat permisiunea. Afișare - Introduceți un nume + Introdu un nume de element - Creare {0} nou + Creează {0} nou Luminoasă @@ -334,7 +334,7 @@ Sus - Reîmprospătare + Reîmprospătează Un element cu acest nume există deja în acest dosar. @@ -355,7 +355,7 @@ Nu am putut șterge acest element - Vă rugăm introduceți unitatea necesară pentru a accesa acest element. + Te rog introdu unitatea necesară pentru a accesa acest element. Unitate deconectată @@ -376,7 +376,7 @@ Dosarul pe care încerci să-l accesezi a fost mutat sau șters. - Ați șters acest dosar? + Ai șters acest dosar? Fișierul pe care încerci să-l accesezi este utilizat de {0} @@ -468,22 +468,22 @@ octeți - KB + KO - MB + MO - GB + GO - TB + TO - PB + PO - B + O {0, number} {0, plural, one {fișier} few {fișiere} other {de fișiere}}, {1, number} {1, plural, one {dosar} few {dosare} other {de dosare}} @@ -519,7 +519,7 @@ Recente - Mutați fila aici + Mută fila aici Stare @@ -582,10 +582,10 @@ Raportați această problemă - Fișierul la care s-a făcut referire este fie nevalid, fie inaccesibil.{0}Mesaj de eroare:{0}{1} + Fișierul la care s-a făcut referire este fie invalid, fie inaccesibil.{0}Mesaj de eroare:{0}{1} - Element nevalid + Element invalid Versiune: @@ -594,7 +594,7 @@ Nu este nimic de partajat acum... - Fișierul pe care l-ați selectat va fi partajat + Elementele pe care le-ai selectat vor fi partajate Elementul selectat va fi partajat @@ -606,70 +606,70 @@ Se partajează {0} {1} - Fișierul pe care încercați să îl redenumiți nu mai există. Verificați locația corectă a fișierului pe care trebuie să-l redenumiți. + Elementul pe care încerci să-l redenumești nu mai există. Verifică locația corectă a elementului pe care dorești să-l redenumești. Elementul nu mai există - Numele specificat a fost invalid. Vă rugăm să verificați numele fișierului dorit și încercați din nou. + Numele specificat este invalid. Te rog verifică numele elementului dorit și încearcă din nou. Nume element invalid - Lungimea numelui fișierului specificat depășește limita maximă. Vă rugăm să verificați numele dorit și încercați din nou. + Lungimea numelui elementului specificat depășește limita maximă. Te rog să verifici numele dorit și să încerci din nou. - Numele fișierului era prea lung + Numele elementului era prea lung Afișează mai multe opțiuni - Aplicația trebuie să repornească pentru a aplica aceste setări, doriți să reporniți aplicația? + Aplicația trebuie să fie repornită pentru a aplica aceste setări, dorești să repornești aplicația acum? - Sponsorizați-ne pe GitHub + Sponsorizează-ne pe GitHub - Nu am putut crea acest element + Nu s-a putut crea acest element - Acces Respins + Acces refuzat - Setați ca + Setează ca - Anulare + Anulează - Creați un element nou + Creează un element nou - Alege un tip pentru acest fișier nou mai jos + Alege un tip pentru acest element nou de mai jos Fișier - Creați un fișier gol + Creează un fișier gol Dosar - Creați un dosar gol + Creează un dosar gol - Reîmprospătați directorul + Reîmprospătează dosarul Limbă - Mutați extensiile shell într-un sub-meniu + Plasează extensiile shell-ului într-un sub-meniu Arată dialogul de confirmare înainte de a șterge @@ -738,7 +738,7 @@ Decimal Longitudine - Decimal latitudine + Latitudine zecimală Altitudine @@ -840,19 +840,19 @@ Editor - Calea Miniaturilor Mari + Calea miniaturilor mari - Calea Miniaturilor Uri + URI miniaturi mari - Calea Miniaturilor Mici + Calea miniaturi mici - Calea Miniaturilor Uri + URI miniaturi mici - URL web al utilizator + URL web utilizator Autor @@ -906,10 +906,10 @@ Codare Bitrate - Rată de Biți de Codificare Audio + Rată de biți codificare audio - Rată de Biți de Codificare Video + Rată de biți codificare video Compresie @@ -969,7 +969,7 @@ Unități - Mutați aici + Mută aici Sigur pentru a elimina hardware-ul @@ -978,16 +978,16 @@ Dispozitivul poate fi acum scos în siguranță din calculator. - Problemă la scoaterea dispozitivului + Problemă la eliminarea dispozitivului Acest dispozitiv este în prezent în uz. Închideți orice programe, ferestre sau file care ar putea utiliza dispozitivul și apoi încercați din nou. - Scoatere + Elimină în siguranță - Duplicare filă + Duplică fila Mută fila într-o fereastră nouă @@ -1002,10 +1002,10 @@ Ștergeți toate proprietățile - Verificați starea operațiunilor cu fișiere aici + Verifică starea operațiunilor cu fișiere de aici - Centru de stare + Centrul de operațiuni Rezultatele căutării în {1} pentru {0} @@ -1020,46 +1020,46 @@ Arată fișierele protejate de sistem - Sincronizați aspectul și preferințele de sortare între directoare + Sincronizează aspectul și preferințele de sortare între dosare - Personalizați meniul contextual clic dreapta + Personalizează meniul contextual clic-dreapta Calea originală - Adăugare + Adaugă - Editare + Editează - Eliminare + Elimină Deschide filele în modul panou dublu - Afișați opțiunea pentru a deschide dosarele într-un panou nou + Afișează opțiunea pentru a deschide dosarele într-un panou nou - Afișați opțiunea pentru a copia calea + Afișează opțiunea pentru a copia calea - Afișați opțiunea pentru a crea un dosar cu selecție + Afișează opțiunea pentru a crea un dosar cu selecția - Afișați opțiunea pentru a crea o comandă rapidă + Afișează opțiunea pentru a crea o scurtătură Panou nou - Deschideți într-un panou nou + Deschide într-un panou nou - Fișiere & foldere + Fișiere și dosare Detalii (Ctrl+Shift+1) @@ -1071,16 +1071,16 @@ Unități în cloud - Confirmați + Confirmă Nume dorit - Afișați sau ascundeți panoul de previzualizare + Comută panoul de previzualizare - Afișați sau ascundeți panoul de detalii + Comută panoul de detalii Comută panoul de detalii pentru a vizualiza proprietățile de bază ale fișierelor @@ -1089,7 +1089,7 @@ Comută panoul de informații - Comutați vizibilitatea panourilor de detaliu/previzualizare + Comută vizibilitatea panourilor de detalii și de previzualizare Comutare Bară de Instrumente @@ -1098,10 +1098,10 @@ Comută vizibilitatea barei de instrumente - Toggle filter header + Comutare antet filtru - Toggle visibility of the filter header + Comută vizibilitatea antetului de filtru Nicio previzualizare disponibilă @@ -1110,7 +1110,7 @@ Nume Obiect - Anulați fixarea la Bara Laterală + Anulează fixarea la bara laterală Rețea @@ -1128,7 +1128,7 @@ Feedback - Disponibil când sunteți online + Disponibil când ești online Documentație @@ -1152,10 +1152,10 @@ Necunoscut - Dacă modificați extensia unui fișier, acesta poate deveni inutilizabil. Sigur modificați extensia? + Dacă modifici extensia unui fișier, acesta poate deveni inutilizabil. Sigur dorești să modifici extensia? - Drive CD ROM + Unitate CD-ROM Unitate în cloud @@ -1164,7 +1164,7 @@ Unitate de disc fixă - Unitate de disc floppy + Unitate de disc flexibil Unitate de rețea @@ -1173,10 +1173,10 @@ Unitate nemontată - Unitate RAM disc + Unitate disc RAM - Dispozitiv de stocare amovil + Dispozitiv de stocare amovibil Necunoscut @@ -1191,7 +1191,7 @@ Mai multe opțiuni... - Conectare unitate de rețea + Asociază unitate de rețea Fixat @@ -1218,16 +1218,16 @@ Această acțiune necesită drepturi de administrator - Doriți să continuați ca administrator? + Dorești să continui ca administrator? Coloane (Ctrl + Shift+6) - Fixare la Start + Fixează la meniul Start - Anulați fixarea la Start + Anulează fixarea în meniul Start Bibliotecă @@ -1254,37 +1254,37 @@ O bibliotecă cu același nume exista deja! - Deschideți Stocare inteligentă + Deschide Stocare inteligentă - Deschideți pagina Stocare Inteligentă în Setările Windows + Deschide pagina Stocare Inteligentă în Setările Windows Curățare - Copiere + Copiază Se copiază {0, plural, one {element} other {elemente}} - Se șterg {0, plural, one {element} other {elemente}} + Ștergere {0, plural, one {element} other {elemente}} Mutare la - {0, plural, one {Un element va fii mutat} other {# elemente vor fii mutate}} + {0, plural, one {Un element va fi mutat} other {# elemente vor fi mutate}} Se mută {0, plural, one {element} other {elemente}} - {0, plural, one {Un element va fii șters} other {# elemente vor fii șterse}} + {0, plural, one {Un element va fi șters} other {# elemente vor fi șterse}} - Continuați + Continuă {0, plural, one {Există un nume de fișier conflictual} other {Există # nume de fișier conflictuale}} @@ -1293,13 +1293,13 @@ {0, plural, one {Există un nume de fișier conflictual} other {Există # nume de fișier conflictuale}}, și {1, plural, one {un element în curs} other {# elemente în curs}} - {0, plural, one {nume de fișier} other {nume de fișiere}} în conflict + {0, plural, one {Nume de fișier} other {Nume de fișiere}} în conflict - {0, plural, one {Un element va fii copiat} other {# elemente vor fii copiate}} + {0, plural, one {Un element va fi copiat} other {# elemente vor fi copiate}} - Ștergere definitivă + Șterge definitiv Viteză ISO @@ -1332,7 +1332,7 @@ Coloană tip element - Coloană data modificări + Coloană data modificării Coloana data ștergerii @@ -1407,7 +1407,7 @@ Redeschide fila închisă - Redenumire + Redenumește Confidențialitate @@ -1437,7 +1437,7 @@ Permitere - Refuzați + Refuză Control total @@ -1467,7 +1467,7 @@ Cont Necunoscut - Nu aveți permisiuni pentru a vizualiza proprietățile de securitate ale acestui obiect. Faceți clic pe „Permisiuni avansate” pentru a continua. + Nu ai permisiunea de a vizualiza proprietățile de securitate ale acestui obiect. Fă clic pe „Permisiuni avansate” pentru a continua. Proprietar: @@ -1476,25 +1476,25 @@ Proprietar necunoscut - Extrage Arhiva + Extrage arhiva Deschide dosarul destinație la finalizare - Extragere în {0}\ + Extrage în {0}\ - Creați o bibliotecă nouă + Creează o bibliotecă nouă - Restabilire biblioteci implicite + Restaurează bibliotecile implicite - Sigur doriți să restaurați bibliotecile implicite? Toate fișierele dvs. vor rămâne în spațiul de stocare. + Ești sigur că dorești să restaurezi bibliotecile implicite? Toate fișierele tale vor rămâne pe unitatea de stocare. - Restabilire biblioteci + Restaurează bibliotecile Proprietar @@ -1527,7 +1527,7 @@ Permisiuni - Nu aveți permisiuni pentru a vizualiza proprietățile de securitate ale acestui obiect. Puteți încerca să preluați proprietatea asupra acestui obiect. + Nu ai permisiunea de a vizualiza proprietățile de securitate ale acestui obiect. Poți încerca să preiei proprietatea asupra acestui obiect. Acest dosar și fișiere @@ -1551,19 +1551,19 @@ Acest dosar și sub-dosare - Adăugați date + Adaugă date - Schimbați permisiunea + Schimbă permisiunea - Creați dosare + Creează dosare - Creați fișiere + Creează fișiere - Ștergeți subdirectoarele și fișierele + Șterge sub-dosarele și fișierele Execută fişierele @@ -1581,43 +1581,43 @@ Citire permisiuni - Preluați permisiune + Preia proprietatea - Vizitați dosarul + Vizitează dosarul - Scriere atribute + Scrie atributele - Scriere date + Scrie datele Scriere atribute extinse - Convertiți permisiunile moștenite în permisiuni explicite + Convertește permisiunile moștenite în permisiuni explicite - Activați moștenirea + Activează moștenirea - Eliminați toate permisiunile moștenite + Elimină toate permisiunile moștenite - Resetare permisiuni copil + Resetează permisiuni pe copil - Înlocuiți toate intrările de permisiuni ale obiectului copil cu intrări de permisiuni moștenite de la acest obiect + Înlocuiește toate intrările de permisiuni ale obiectului copil cu intrări de permisiuni moștenite de la acest obiect - Închidere panou + Închide panoul - Intrare în suprapunere compactă + Mod compact, mereu deasupra - Ieșire din suprapunere compactă + Ieși din modul compact Descriere fişier @@ -1635,7 +1635,7 @@ Versiune fișier - Încărcați previzualizarea completă + Încarcă previzualizarea completă Descarcă elementul din cloud si încarcă previzualizarea @@ -1647,7 +1647,7 @@ Dimensiune necomprimată - SLW + WSL Ascundeți secțiunea {0} @@ -1662,13 +1662,13 @@ Actualizările sunt gata de instalare - Închidere + Închide - Actualizare + Actualizează - Pornire + Acasă Extragerea arhivei s-a finalizat cu succes. @@ -1680,7 +1680,7 @@ Extragere completă! - Deschideți dosarul părinte + Deschide dosarul părinte Necunoscut @@ -1692,10 +1692,10 @@ Parte din set - Deschidere unitate + Deschide unitate - Introduceți un disc în unitatea {0} + Introdu un disc în unitatea {0} Introduceți un disc @@ -1710,7 +1710,7 @@ Anonim - Furnizați datele de autentificare: + Furnizează datele de autentificare: Nume de utilizator @@ -1734,7 +1734,7 @@ Deschide dosarele în filă nouă - Centru de stare + Centrul de operațiuni Coloană dată de creare @@ -1749,16 +1749,16 @@ Ajutor și asistență - Trimiteți o cerere de funcție + Trimite o cerere pentru o funcție nouă - Trimiteți un raport despre o problemă + Trimite un raport despre o problemă - Setați Files ca manager de fișiere implicit + Setează Files ca manager de fișiere implicit - Utilizați Files ca dialog de deschidere fișiere + Utilizează Files ca dialog de deschidere fișiere Etichetă @@ -1770,10 +1770,10 @@ Cale dosar - Exportare setări + Exportă setări - Importare setări + Importă setări Nu s-au putut importa setările. Fișierul de setări este corupt. @@ -1794,7 +1794,7 @@ Personalizare - Restabiliți valorile implicite + Restabilește valoarea implicită Deschide fila în instanța existentă la deschiderea Files dintr-o altă aplicație @@ -1809,7 +1809,7 @@ Niciuna - Când mă conectez la Windows + La pornirea Windows La pornirea programului @@ -1818,7 +1818,7 @@ Sistem - Sistem (Îmbunătățit) + Sistem (îmbunătățit) Culoare 16-bit (65536) @@ -1827,19 +1827,19 @@ Culoare 8-bit (256) - Dezactivați optimizările pe ecran complet + Dezactivează optimizările pe ecran complet - Rulați la rezoluția ecranului de 640 x 480 + Rulează la rezoluția ecranului de 640 x 480 - Suprascrieți comportamentul de scalare DPI mare + Suprascrie comportamentul de scalare la DPI mare Mod de culoare redus - Înregistrați acest program pentru repornire + Înregistrează acest program pentru repornire Fereastră de pornire @@ -1854,19 +1854,19 @@ Maximizat - Executare ca administrator + Execută ca administrator - Rulați depanatorul pentru compatibilitate + Rulează depanatorul pentru compatibilitate - Utilizați setările DPI ale monitorului principal + Utilizează setările DPI ale monitorului principal - Nu ajustați setările DPI + Nu ajusta setările DPI - Nu suprascrieți setările DPI + Nu suprascrie setările DPI Mod compatibilitate @@ -1878,16 +1878,16 @@ Biblioteci terțe - Această opțiune modifică registrul sistemului și poate avea efecte secundare neașteptate pe dispozitiv. Continuați pe propriul risc. + Această opțiune modifică registrul sistemului și poate avea efecte secundare neașteptate pe dispozitiv. Continuă pe propriul risc. - Operațiunile de aplatizare sunt permanente și nu sunt recomandate. Continuați pe propriul risc. + Operațiunile de aplatizare dosare sunt permanente și nu sunt recomandate. Continuă pe propriul risc. - Creați o bibliotecă + Creează o bibliotecă - Introduceți numele Bibliotecii + Introdu numele bibliotecii Calculează dimensiunea dosarelor @@ -1896,7 +1896,7 @@ Fișiere recente - Deschideți Files la pornirea Windows + Lansează Files la pornirea Windows Atribute @@ -1911,7 +1911,7 @@ Doar citire - Curățați conținutul unității + Curăță conținutul unității de stocare Tip @@ -1920,19 +1920,19 @@ Octeți - Extragere + Extrage - Extragere fişiere + Extrage fişierele - Extrageți aici + Extrage aici Ctrl+E - Extragere în {0} + Extrage în {0} Execută scriptul @@ -1941,16 +1941,16 @@ Execută cu PowerShell - Calcularea dimensiunilor dosarelor consumă multe resurse şi poate creşte utilizarea procesorului. + Calcularea dimensiunilor dosarelor consumă multe resurse și poate crește utilizarea procesorului. - Rotire la stânga + Rotește la stânga - Rotire la dreapta + Rotește la dreapta - Instalare + Instalează Închide filele din stânga @@ -1959,7 +1959,7 @@ Închide filele din dreapta - Închideți celelalte file + Închide celelalte file Închide toate filele @@ -1971,7 +1971,7 @@ Imagini - Actualizați Files + Actualizează Files Etichete @@ -1983,13 +1983,13 @@ ex: {0}, {1} - Afișați miniaturi + Afișează miniaturi - Reîncercați + Reîncearcă - Operațiunea de mutare nu este suportată în acest context. Doriți să copiați elementele în schimb? + Operațiunea de mutare nu este suportată în acest context. Dorești să copiezi elementele în schimb? Elemente ascunse @@ -2022,28 +2022,28 @@ Salut! - Vă place Files? Vă rugăm să luați în considerare lăsarea unei recenzii în Microsoft Store. + Îți place Files? Te rog să iei în considerare scrierea unei recenzii în Microsoft Store. - Vă place Files? Vă rugăm să luați în considerare susținerea proiectului pe GitHub. + Îți place Files? Te rog să iei în considerare susținerea proiectului pe GitHub. Sponsorizare - Acordați-ne o notă + Acordă-ne o notă Ignorare - Setați ca fundal + Setează ca fundal - Stabilire ca imagine de fundal pentru desktop + Setează ca imagine de fundal pentru spațiul de lucru - Setați ca implicit + Setează ca implicit Coloană dată @@ -2064,46 +2064,46 @@ Ecran de blocare - Deschide folderele cu un singur clic în aspectul coloană + Deschide dosarele cu un singur clic în aspectul coloană - Deschidere elemente + Deschiderea elementelor - Comprimare + Comprimă Mută tot conținutul din sub-dosare în locația selectată - Aplatizare dosar + Aplatizează dosar - Aplatizare + Aplatizează - Aplatizarea unui dosar mută tot conținutul din sub-dosarele sale în locația selectată. Această operațiune este permanentă și nu poate fii anulată. Prin utilizarea acestei caracteristici experimentale, vă asumați riscul și sunteți de acord să nu trageți la răspundere echipa Files pentru orice pierdere de date. + Aplatizarea unui dosar mută tot conținutul din sub-dosarele sale în locația selectată. Această operațiune este permanentă și nu poate fi anulată. Prin utilizarea acestei caracteristici experimentale, îți asumi riscul și ești de acord să nu tragi la răspundere echipa Files pentru orice pierdere de date. - Afișare opțiuni de aplatizare + Afișare opțiuni de aplatizare dosare - Selectați fișiere și dosare când treceți cu mouse-ul peste ele + Selectează fișiere și dosare când ții mausul deasupra lor - Sunteți sigur că vreți să restaurați toate elementele din coșul de reciclare? + Ești sigur că vrei să restaurezi toate elementele din coșul de reciclare? - Restaurați toate elementele + Restaurează toate elementele - Doriți să restaurați {0, plural, one {element selectat} other {{0} elemente selectate}}? + Dorești să restaurezi {0, plural, one {elementul selectat} few {cele # elemente selectate} other {cele # de elemente selectate}}? - Restaurare selecție + Restaurează selecția - Restaurați toate elementele + Restaurează toate elementele Restaurare @@ -2112,10 +2112,10 @@ Comanda rapidă nu poate fi deschisă - Destinația țintă nu poate fi găsită {0}. Doriți să ștergeți această comandă rapidă? + Destinația țintă nu poate fi găsită {0}. Dorești să ștergi această scurtătură? - Nu aveți permisiunea de a accesa acest dosar. + Nu ai permisiunea de a accesa acest dosar. Parolă arhivă @@ -2133,16 +2133,16 @@ Sortare și grupare - Creare arhivă + Creează arhivă - Creare + Creează - Creare {0} + Creează {0} - Introduceți un nume + Introdu un nume Nivel de comprimare @@ -2157,19 +2157,19 @@ Normal - Scăzută + Scăzut - Rapidă + Rapid - Niciuna + Fără - Dimensiune împărțită + Dimensiune împărțire - Nu despărțiți + Nu împărți CD @@ -2190,16 +2190,16 @@ Parolă - Formatare + Format - Sincronizați coloana de status + Sincronizează coloana de stare - Grupați după + Grupează după - Sortare după + Ordonează după Grupare în ordine descrescătoare @@ -2208,37 +2208,37 @@ Sortare în ordine descrescătoare - Creați o comandă rapidă nouă + Creează o nouă scurtătură - Creați comenzi rapide la programele locale sau de rețea, fișiere, dosare, computere sau adrese de internet. + Creează scurtături către programe locale sau din rețea, fișiere, dosare, computere sau adrese de internet. - Introduceți locația elementului: + Introdu locația elementului: - Creează o comandă rapidă + Creează o scurtătură Fișierele utilizate recent sunt dezactivate în Windows File Explorer. - Editați fișierul de setări + Editează fișierul de setări - Deschideți fișierul de setări în editorul dvs. implicit + Deschide fișierul de setări în editorul tău implicit Note de Lansare - Deschideți Notele de Lansare + Deschide notele de lansare - Crearea unei comenzi rapide în această locație necesită privilegii de administrator + Crearea unei scurtături în această locație necesită privilegii de administrator - Doriți în schimb să creați o comandă rapidă pe desktop? + Dorești să creezi o scurtătură pe spațiul de lucru în schimb? Numele elementului specificat nu este valid @@ -2247,25 +2247,25 @@ Setări - Dublu-clic pe un spațiu gol pentru a urca un director + Dublu-clic pe spațiul gol pentru a naviga în dosarul părinte - Vedeți mai mult + Vezi mai mult Afișează editarea etichetelor - Afișați opțiunile de compresie + Afișează opțiunile de compresie - Afișați trimitere la meniu + Afișează meniul de trimitere la - Afișați opțiunea pentru a deschide dosarele într-o filă nouă + Afișează opțiunea pentru a deschide dosarele într-o filă nouă - Afișați opțiunea pentru a deschide dosarele într-o fereastră nouă + Afișează opțiunea pentru a deschide dosarele într-o fereastră nouă Acces rapid @@ -2274,10 +2274,10 @@ Introduceți acreditările pentru a vă conecta la: {0} - Introduceți acreditările rețelei + Introdu datele de autentificare în rețea - Memorează-mi acreditările + Ține minte datele de autentificare Eroare la dosarul rețelei @@ -2292,7 +2292,7 @@ Întotdeauna - Doar ștergere permanentă + Doar la ștergere definitivă Niciodată @@ -2304,7 +2304,7 @@ Etichetă nouă - Creați o etichetă nouă + Creează o etichetă nouă Se încarcă... @@ -2340,10 +2340,10 @@ Aplică această acțiune tuturor elementelor contradictorii - Deschideți în Terminal Windows + Deschide în Terminal Windows - Deschideți în Terminal Windows ca administrator + Deschide în Terminal Windows ca administrator Salvare @@ -2352,28 +2352,28 @@ Selectare multiplă - Reordonarați elementele din bara laterală + Reordonează elementele din bara laterală - Hash-uri + Sume de control A apărut o eroare in timpul calculului - Nu s-a putut calcula hash-ul, te rugăm să închizi fișierul și să încerci din nou. + Nu s-a putut calcula suma de control, te rog să închizi fișierul și să încerci din nou. - Hash-urile nu sunt disponibile pentru fișierele online + Sumele de control nu sunt disponibile pentru fișierele online Algoritm - Valoare hash + Valoare sumă de control - Selectați hash-uri de afișat + Selectează sumele de control de afișat Se calculează... @@ -2382,10 +2382,10 @@ Elemente fixate - Reduceți dimensiunea + Redu dimensiunea - Măriți dimensiunea + Mărește dimensiunea Direcție sortare @@ -2403,226 +2403,226 @@ Previzualizare pop-up - Comutare suprapunere compactă + Comută mod compact - Deschideți pagina de ajutor online în browser + Deschide pagina de ajutor online în browser - Comutare la ecran complet + Comută ecran complet - Intrare în suprapunere compactă + Mod compact, mereu deasupra - Ieșire din suprapunere compactă + Ieși din modul compact - Comutare suprapunere compactă + Comută mod compact Începeți căutarea în OmniBar - Comutați vizibilitatea elementelor ascunse + Comută vizibilitatea elementelor ascunse - Comutați vizibilitatea fișierelor punct + Comută vizibilitatea fișierelor care încep cu punct - Comutați vizibilitatea fișierelor ascunse + Comută vizibilitatea extensiilor fișierelor Comută panoul de previzualizare pentru a vizualiza previzualizări ale fișierelor - Comutați dacă se afișează bara laterală + Comută afișarea barei laterale - Copiați {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} + Copiază {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} - Copiați calea directorului curent + Copiază calea către dosarul curent - Copiați calea elementelor selectate + Copiază calea elementelor selectate - Copiați calea elementelor selectate cu ghilimele + Copiază calea elementelor selectate cu ghilimele - Copiați calea directorului curent cu ghilimele + Copiază calea către dosarul curent cu ghilimele - Decupați {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} + Decupează {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} - Lipire elemente la folderul curent + Lipește elementele în dosarul curent - Lipire elemente la folderul curent ca comenzi rapide + Lipește elementele în dosarul curent ca scurtături - Lipire elemente la folderul selectat + Lipește elementele în dosarul selectat - Lipire în dosarul selectat + Lipește în dosarul selectat - Ștergere {0, plural, one {element selectat} few {elemente selectate} other {elemente selectate}} + Șterge {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} Creează un dosar nou - Creați {0, plural, one {o comandă rapidă nouă} other {comenzi rapide noi}} pentru {0, plural, one {elementul selectat} other {elementele selectate}} + Creează {0, plural, one {o nouă scurtătură} other {noi scurtături}} pentru {0, plural, one {elementul selectat} other {elementele selectate}} - Creați o comandă rapidă către orice element + Creează o scurtătură către orice element - Golire Coș de reciclare + Golește coșul de reciclare - Deschideți meniul "Formatare unitate" pentru elementul selectat + Deschide meniul „Formatează unitate” pentru elementul selectat - Restaurați {0, plural, one {elementul selectat} other {elementele selectate}} din coșul de reciclare + Restaurează {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} din coșul de reciclare - Restaurați toate elementele din coșul de reciclare + Restaurează toate elementele din coșul de reciclare - Deschidere {0, plural, one {element} other {elemente}} + Deschide {0, plural, one {elementul} other {elementele}} - Deschidere {0, plural, one {element} other {elemente} other {elemente}} cu aplicația selectată + Deschide {0, plural, one {elementul} other {elementele} other {elementele}} cu aplicația selectată Deschide dosarul părinte al elementului căutat - Reîmprospătați conținutul paginii + Reîmprospătează conținutul paginii - Redenumiți elementul selectat + Redenumește elementul selectat - Selectați toate elementele + Selectează toate elementele - Inversare elemente selectate + Inversează selecția elementelor - Anulare selecție + Anulează selecția Comută selecția elementelor - Partajați {0, plural, one {fișierul selectat} other {fișierele selectate}} altora + Partajează {0, plural, one {fișierul selectat} other {fișierele selectate}} cu alții - Fixați {0, plural, one {elementul} other {elementele}} la Meniul Start + Fixează {0, plural, one {elementul} other {elementele}} la meniul Start - Anulați fixarea {0, plural, one {elementului} other {elementelor}} de la Meniul Start + Anulează fixarea {0, plural, one {elementului} other {elementelor}} de la meniul Start - Fixați {0, plural, one {dosarul} other {dosarele} other {dosarele}} în Bara laterală + Fixează {0, plural, one {dosarul} other {dosarele} other {dosarele}} în bara laterală - Anulați fixarea {0, plural, one {dosarului} other {dosarelor}} din Bara Laterală + Anulează fixarea {0, plural, one {dosarului} other {dosarelor}} la bara laterală - Setați imaginea selectată ca imagine de fundal + Setează imaginea selectată ca imagine de fundal a spațiului de lucru - Setați imaginea selectată ca expunere de diapozitiv + Setează imaginile selectate ca expunere de diapozitive a spațiului de lucru - Setați imaginea selectată ca imagine de fundal pentru ecranul de blocare + Setează imaginea selectată ca imagine de fundal pentru ecranul de blocare Setează imaginea selectată ca fundal al aplicației - Instalare font + Instalează font - Instalare driver + Instalează driver - Instalare certificat + Instalează certificat - Instalați {0, plural, one {fontul selectat} other{fonturile selectate}} + Instalează {0, plural, one {fontul selectat} other{fonturile selectate}} - Instalați {0, plural, one {driverul} other {driverele}} folosind {0, plural, one {fișierul .inf selectat} other {fișiere .inf selectate}} + Instalează {0, plural, one {driver-ul} other {driver-ele}} folosind {0, plural, one {fișierul .inf selectat} other {fișierele .inf selectate}} - Instalați {0, plural, one {certificatul selectat} other {certificatele selectate}} + Instalează {0, plural, one {certificatul selectat} other {certificatele selectate}} - Executați aplicația selectată ca administrator + Execută aplicația selectată ca administrator - Executați aplicația selectată ca alt utilizator + Execută aplicația selectată ca un alt utilizator - Executați scriptul PowerShell selectat + Execută scriptul PowerShell selectat - Lansați previzualizarea în fereastra pop-up + Lansează previzualizarea în fereastră pop-up - Creare arhivă cu {0, plural, one {elementul selectat} other{elementele selectate}} + Creează o arhivă cu {0, plural, one {elementul selectat} other{elementele selectate}} - Creare archivă 7z cu {0, plural, one {elementul selectat} other {elementele selectate}} + Creează o arhivă 7z cu {0, plural, one {elementul selectat} other {elementele selectate}} - Creare archivă zip cu {0, plural, one {elementul selectat} other {elementele selectate}} + Creează o arhivă zip cu {0, plural, one {elementul selectat} other {elementele selectate}} - Extrageți {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} în orice folder + Extrage {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} în orice dosar - Extrageți {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} la folderul curent + Extrage {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} în dosarul curent - Extrageți {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} într-un un folder nou + Extrage {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} într-un dosar nou - Rotiți {0, plural, one {imaginea selectată} other {imaginile selectată}} la stânga + Rotește {0, plural, one {imaginea selectată} other {imaginile selectată}} la stânga - Rotiți {0, plural, one {imaginea selectată} other {imaginile selectată}} la dreapta + Rotește {0, plural, one {imaginea selectată} other {imaginile selectată}} la dreapta - Deschideți pagina de setări + Deschide pagina de setări - Deschidere dosar în terminal + Deschide dosarul în terminal - Deschidere dosar în terminal ca administrator + Deschide dosarul în terminal ca administrator - Micșorați dimensiunea elementului în vizualizarea curentă + Micșorează dimensiunea elementului în vizualizarea curentă - Măriți dimensiunea elementului în vizualizarea curentă + Mărește dimensiunea elementului în vizualizarea curentă - Comutare la vizualizare detalii + Comută la vizualizare detalii - Comutare la vizualizare carduri + Comută la vizualizare carduri - Comutare la vizualizare listă + Comută la vizualizare listă Listă @@ -2631,154 +2631,154 @@ Grilă - Comutare la vizualizare grilă + Comută la vizualizare grilă - Comutare la vizualizare coloane + Comută la vizualizare coloane - Comutare vizualizări în mod adaptiv + Comută vizualizări în mod adaptiv - Sortare elemente după nume + Ordonează elementele după nume - Sortare elemente după data modificării + Ordonează elementele după data modificării - Sortare elemente după data creării + Ordonează elementele după data creării - Sortare elemente după dimensiune + Ordonează elementele după dimensiune - Sortare elemente după tip + Ordonează elementele după tip - Sortare elemente după starea de sincronizare + Ordonează elementele după starea de sincronizare - Sortare elemente după etichete + Ordonează elementele după etichete - Sortare elemente după dosarul original + Ordonează elementele după dosarul original - Sortare elemente după data ștergerii + Ordonează elementele după data ștergerii - Sortare elemente în ordine crescătoare + Ordonează elementele în ordine crescătoare - Sortare elemente în ordine descrescătoare + Ordonează elementele în ordine descrescătoare - Comutare direcție sortare + Inversează direcția de sortare a elementelor - Listare elemente fără grupare + Listează elementele fără grupare - Grupați elementele după nume + Grupează elementele după nume - Grupați elementele după data modificării + Grupează elementele după data modificării - Grupați elementele după data creării + Grupează elementele după data creării - Grupați elementele după dimensiune + Grupează elementele după dimensiune - Grupați elementele după tip + Grupează elementele după tip - Grupați elementele după starea de sincronizare + Grupează elementele după starea de sincronizare - Grupați elementele după etichete + Grupează elementele după etichete - Grupați elementele după dosarul original + Grupează elementele după dosarul original - Grupați elementele după data ștergerii + Grupează elementele după data ștergerii - Grupați elementele după calea dosarului + Grupează elementele după calea dosarului - Sortare grupuri în ordine crescătoare + Ordonează grupurile crescător - Sortare grupuri în ordine descrescătoare + Ordonează grupurile în descrescător - Comutare direcție sortare grup + Inversează direcția de sortare a grupului Deschide o filă nouă - Navigați înapoi + Navighează înapoi - Navigați înainte + Navighează înainte - Navigați în sus într-un director + Navighează în dosarul părinte - Duplicați fila curentă + Duplică fila curentă - Duplicați fila selectată + Duplică fila selectată - Închideți filele din stânga filei curente + Închide filele din stânga filei curente - Închideți filele din stânga filei selectate + Închide filele din stânga filei selectate - Închideți filele din dreapta filei curente + Închide filele din dreapta filei curente - Închideți filele din dreapta filei selectate + Închide filele din dreapta filei selectate - Închideți alte file decât fila curentă + Închide toate filele în afara filei curente - Închideți alte file decât fila selectată + Închide toate filele în afara filei selectate - Închide toate filele inclusiv fila curentă + Închide toate filele, inclusiv fila curentă - Redeschideți fila închisă recent + Redeschide fila închisă recent - Treceți la fila anterioară + Treci la fila anterioară - Treceți la fila următoare + Treci la fila următoare - Închideți fila curentă + Închide fila curentă - Închideți panoul activ + Închide panoul activ - Focalizare pe alt panou + Focalizează pe celălalt panou - Comutați focalizarea la celălalt panoul + Comută focalizarea la celălalt panou - Comutare bară laterală + Comută bara laterală Alt @@ -2809,7 +2809,7 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Înapoi + Backspace Key name for hotkeys in menus. Use abbreviation if possible. @@ -2841,7 +2841,7 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Pornire + Acasă Key name for hotkeys in menus. Use abbreviation if possible. @@ -2865,7 +2865,7 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Hibernare + Ațipire Key name for hotkeys in menus. Use abbreviation if possible. @@ -2873,7 +2873,7 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Print + Tipărire Key name for hotkeys in menus. Use abbreviation if possible. @@ -2881,11 +2881,11 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Mouse4 + Maus4 Key name for hotkeys in menus. Use abbreviation if possible. - Mouse5 + Maus5 Key name for hotkeys in menus. Use abbreviation if possible. @@ -2901,27 +2901,27 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Mail + Email Key name for hotkeys in menus. Use abbreviation if possible. - Pornire + NavigareAcasă Key name for hotkeys in menus. Use abbreviation if possible. - Înapoi + NavigareÎnapoi Key name for hotkeys in menus. Use abbreviation if possible. - Înainte + NavigareÎnainte Key name for hotkeys in menus. Use abbreviation if possible. - BrowserReîmprospătare + ReîmprospătareNavigator Key name for hotkeys in menus. Use abbreviation if possible. - BrowserStop + StopNavigator Key name for hotkeys in menus. Use abbreviation if possible. @@ -2941,11 +2941,11 @@ Key name for hotkeys in menus. Use abbreviation if possible. - MelodiaPrecedentă + PistaPrecedentă Key name for hotkeys in menus. Use abbreviation if possible. - MelodiaUrmătoare + PistaUrmătoare Key name for hotkeys in menus. Use abbreviation if possible. @@ -2953,7 +2953,7 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Silențios + Mut Key name for hotkeys in menus. Use abbreviation if possible. @@ -2965,19 +2965,19 @@ Key name for hotkeys in menus. Use abbreviation if possible. - Modificare + Schimbă - Comutare selecție + Comută selecția - Afișați un avertisment la modificarea extensiilor de fișiere + Afișează un avertisment la modificarea extensiilor de fișiere Acest PC - Coș de Reciclare + Coș de reciclare Fără etichetă @@ -2989,7 +2989,7 @@ Fila următoare - Închidere filă + Închide fila Editare cale @@ -3001,10 +3001,10 @@ Anulare - Locație nevalidă + Locație invalidă - Sunteți sigur că doriți să copiați aceste fișiere fără proprietățile lor? + Ești sigur că dorești să copiezi aceste fișiere fără proprietățile lor? Aceste fișiere au proprietăți care nu pot fi copiate la noua locație @@ -3013,46 +3013,46 @@ Aceste fișiere au proprietăți care nu pot fi mutate la noua locație - Sunteți sigur că doriți să mutați aceste fișiere fără proprietățile lor? + Ești sigur că dorești să muți aceste fișiere fără proprietățile lor? - Afișați casete de selectare când selectați elemente + Afișează casete de selecție când selectezi elemente - Editare cale în OmniBar + Editează calea în OmniBar - Creare element nou + Creează un element nou Niciun grup sau utilizatori nu au permisiunea de a accesa acest obiect. Cu toate acestea, proprietarul acestui obiect poate atribui permisiuni. - Deschideți locația elementului + Deschide locația elementului - Ștergere definitivă + Șterge definitiv - Ștergere {0, plural, one {element selectat} few {elemente selectate} other {elemente selectate}} permanent + Șterge {0, plural, one {elementul selectat} few {elementele selectate} other {elementele selectate}} definitiv - Redați fișierele media selectate + Redă fișierele media selectate - Anulați ultima operație de fișier + Anulează ultima operație pe fișier - Refaceți ultima operație de fișier + Refă ultima operație pe fișier Locație: - Grupați elementele după lună + Grupează elementele după lună - Grupați elementele după an + Grupează elementele după an Lună @@ -3064,136 +3064,136 @@ Comută unitatea pentru grupare după dată - Comutare unitate de grupare + Comută unitatea de grupare An - Grupați după unitatea de dată + Grupează elementele unitatea de dată - Grupați elementele după ziua datei create + Grupează elementele după ziua datei create - Grupați elementele după luna datei creării + Grupează elementele după luna datei creării - Grupați elementele după anul datei creării + Grupează elementele după anul datei creării - Grupați elementele după ziua datei ștergerii + Grupează elementele după ziua datei ștergerii - Grupați elementele după luna datei ștergerii + Grupează elementele după luna datei ștergerii - Grupați elementele după anul datei ștergerii + Grupează elementele după anul datei ștergerii - Grupați elementele după ziua datei modificării + Grupează elementele după ziua datei modificării - Grupați elementele după luna datei modificării + Grupează elementele după luna datei modificării - Grupați elementele după anul datei modificării + Grupează elementele după anul datei modificării - Faceți clic pe „Permisiuni avansate” pentru a continua. + Fă clic pe „Permisiuni avansate” pentru a continua. - Trebuie să aveți Permisiuni de citire pentru a vizualiza proprietățile acestui element. + Trebuie să ai permisiune de citire pentru a vizualiza proprietățile acestui element. - Pentru a încerca să preluați proprietatea asupra elementului, care include permisiunea de a-i vedea proprietățile, faceți clic pe Modificare mai sus. + Pentru a încerca să preiei proprietatea asupra elementului, care include permisiunea de a-i vedea proprietățile, fă clic mai sus pe Modificare. Nu se pot afișa permisiunile. - Lăsați modificările mele pe '{0}' + Lasă modificările mele pe „{0}” - Renunțați la modificările mele + Renunță la modificările mele - Aduceți modificările mele la „{0}” + Adu modificările mele la „{0}” - Aveți modificări neconfirmate în această ramură. Ce doriți să faceți cu ele? + Ai modificări necomise în această ramură. Ce dorești să faci cu ele? - Comutare ramură + Comută ramura Ramuri - Comutare + Comută Ramură nouă - Nume ramură nevalid + Nume ramură invalid - Creare ramură + Creează ramură - Creare ramură + Creează ramură - Bazat pe + Bazată pe - Comutați la o ramură nouă + Comută la o ramură nouă - Creați un dosar cu {0, plural, one {elementul selectat} other {elementele selectate}} în prezent + Creează un dosar cu {0, plural, one {elementul selectat} other {elementele selectate}} Proprietăți - Deschideți proprietăți Explorer + Deschide proprietăți Explorer - Deschideți fereastra proprietăți + Deschide fereastra proprietăți - Deschideți fereastra proprietăți Explorer + Deschide fereastra proprietăți Explorer Locale - La distanță + Pe server - Traduceți pe Crowdin + Tradu pe Crowdin - Preluare + Fetch Pull - Rulare preluarea git + Rulează git fetch - Clonați un repozitoriu git + Clonează un repozitoriu git - Rulare git pull + Rulează git pull Previzualizare - Status Git + Stare Git Eroare Git @@ -3209,25 +3209,25 @@ Autor - Data comiterii + Data commit-ului - Mesajul comiterii + Mesajul commit-ului - Comitere SHA + SHA commit Git - Acrylic + Acrilic - Mica + Mică - Mica Alt + Mică alt Fundal @@ -3236,49 +3236,49 @@ Solid - Gestionare ramuri + Gestionează ramuri Push - Rulare git push + Rulează git push - Sincronizare + Sincronizează - Rulați git pull și apoi git push + Rulează git pull și apoi git push - {0} ieșiri / {1} comiteri de intrare + Commit-uri: {0} outgoing / {1} outgoing - Conectați-vă la GitHub + Conectează-te la GitHub - Introduceți următorul cod la link-ul de mai jos pentru a începe să lucrați cu repozitoriile GitHub. + Introdu următorul cod la link-ul de mai jos pentru a începe să lucrezi cu repozitoriile GitHub. Files nu poate accesa GitHub momentan. - Deschideți dosarul în {0} + Deschide dosarul în {0} - Deschideți directorul curent în {0} + Deschide dosarul curent în {0} - Deschideți repozitoriul în {0} + Deschide repozitoriul în {0} - Deschideți rădăcina repozitoriului Git în {0} + Deschide rădăcina repozitoriului Git în {0} - Copiere cod + Copiază cod - Adaugat + Adăugat Șters @@ -3296,37 +3296,37 @@ Minunat! Acum ești autorizat. - Inițializați repozitoriul + Inițializează repozitoriul - Inițializați dosarul curent ca un repozitoriu git + Inițializează dosarul curent ca un repozitoriu git - Nume Repozitoriu la Distanță + Nume repozitoriu pe server - Ramura Curentă + Ramura curentă Coloană cale - Sortare elemente după cale + Ordonează elementele după cale - Deschideți dosarul selectat într-un panou nou + Deschide dosarul selectat într-un panou nou - Deschideți dosarul selectat într-o filă nouă + Deschide dosarul selectat într-o filă nouă - Deschideți dosarul selectat într-o fereastră nouă + Deschide dosarul selectat într-o fereastră nouă - Deschideți toate + Deschide-le pe toate - Deschideți toate elementele etichetate + Deschide toate elementele etichetate Unitate ({0}) @@ -3348,16 +3348,16 @@ Paletă de Comenzi - Deschideți Paleta de Comenzi în OmniBar + Deschide paleta de comenzi în OmniBar - Pornire în: + Pornește în: - Activați BitLocker + Activează BitLocker - Gestionați BitLocker + Gestionează BitLocker Următoarele elemente sunt prea mari pentru a fi copiate la această unitate @@ -3372,17 +3372,17 @@ Files rulează ca administrator - Din cauza unei limitări a Windows și WinAppSdk, tragerea și fixarea nu sunt disponibile atunci când executați Files ca administrator. Dacă doriți să folosiți caracteristica tragere și fixare puteți lucra în jurul acestei limitări deschizând CCU (Control Cont Utilizator) din Meniul Start și selectând al treilea nivel, și apoi reporniți Windows. Altfel, puteți continua să utilizați Files fără caracteristica tragere și fixare. + Din cauza unei limitări a Windows și WinAppSdk, operația de drag & drop nu este disponibilă atunci când rulezi Files ca administrator. Dacă dorești să folosești caracteristica drag & drop, poți evita această limitare deschizând CCU (Control Cont Utilizator) din meniul Start și selectând al treilea nivel, apoi repornind Windows. Altfel, poți continua să utilizezi Files fără caracteristica drag & drop. - Lăsați aplicația să ruleze în fundal atunci când fereastra este închisă + Lasă aplicația să ruleze în fundal atunci când fereastra este închisă Albastru One of the custom color themes - Gri Albăstrui + Gri albăstrui One of the custom color themes @@ -3394,7 +3394,7 @@ One of the custom color themes - Albastru Deschis + Albastru rece luminos One of the custom color themes @@ -3402,7 +3402,7 @@ One of the custom color themes - Gri Închis + Gri închis One of the custom color themes @@ -3410,19 +3410,19 @@ One of the custom color themes - Iris Pastelat + Iris pastel One of the custom color themes - Mentă Deschisă + Mentă deschisă One of the custom color themes - Roșu Aprins + Roșu moderat One of the custom color themes - Portocaliu Strălucitor + Portocaliu luminos One of the custom color themes @@ -3434,11 +3434,11 @@ One of the custom color themes - Roz Deschis + Roz luminos One of the custom color themes - Spuma Mării + Spuma mării One of the custom color themes @@ -3446,7 +3446,7 @@ One of the custom color themes - Roșu-violet Deschis + Roșu-violet deschis One of the custom color themes @@ -3454,7 +3454,7 @@ One of the custom color themes - Finalizat + Golește istoricul Nume: @@ -3470,10 +3470,10 @@ Files nu poate inițializa acest director ca un repozitoriu Git. - Artiști Contribuitori + Artiști contribuitori - Adăugare pagină + Adaugă pagină Se procesează elementele... @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - S-au comprimat {0} element(e) în „{1}” + Comprimat {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - S-au comprimat {0} element(e) din „{1}” în „{2}” + Comprimat {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Eroare la comprimarea {0} element(e) la „{1}” + Eroare la comprimarea a {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Copierea a {0} element(e) de la „{1}” la „{2}” a eșuat + Nu s-a putut comprima {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Se comprimă {0} element(e) la „{1}” + Se comprimă {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Se comprimă {0} element(e) de la „{1}” la „{2}” + Se comprimă {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Instalarea a {0} font(uri) de la „{1}” a fost anulată + Instalarea a {0, plural, one {# font} few {# fonturi} other {# de fonturi}} din „{1}” a fost anulată Shown in a StatusCenter card. - S-au instalat {0} font(uri) + S-au instalat {0, plural, one {# font} few{# fonturi} other{# de fonturi}} Shown in a StatusCenter card. - S-au instalat {0} font(uri) de la „{1}” + S-au instalat {0, plural, one {# font} few{# fonturi} other{# de fonturi}} de la „{1}” Shown in a StatusCenter card. - Eroare la instalarea a {0} font(uri) + Eroare la instalarea a {0, plural, one {# font} few {# fonturi} other {# de fonturi}} Shown in a StatusCenter card. - Instalarea a {0} font(uri) din „{1}” a eșuat + Nu s-a putut instala {0, plural, one {# font} few {# fonturi} other{# de fonturi}} de la „{1}” Shown in a StatusCenter card. - Se instalează {0} font(uri) + Se instalează {0, plural, one {# font} few{# fonturi} other {# de fonturi}} Shown in a StatusCenter card. - Se instalează {0} font(uri) de la „{1}” + Se instalează {0, plural, one {# font} few{# fonturi} other {# de fonturi}} de la „{1}” Shown in a StatusCenter card. - S-a anulat copierea a {0} element(e) la „{1}” + Copierea a {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” a fost anulată Shown in a StatusCenter card. - S-a anulat copierea a {0} element(e) de la „{1}” la „{2}” + Copierea a {0, plural, one {# element} few {# elemente} other {# elemente}} de la „{1}” la „{2}” a fost anulată Shown in a StatusCenter card. - S-au copiat {0} element(e) la „{1}” + S-a copiat {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - S-au copiat {0} element(e) de la „{1}” la „{2}” + S-a copiat {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Eroare la copierea a {0} element(e) la „{1}” + Eroare la copierea a {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Copierea a {0} element(e) de la „{1}” la „{2}” a eșuat + Nu s-a putut copia {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Se copiază {0} element(e) în „{1}” + Se copiază {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Se copiază {0} element(e) de la „{1}” la „{2}” + Se copiază {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. @@ -3642,59 +3642,59 @@ Shown in a StatusCenter card. - S-a anulat ștergerea a {0} element(e) din „{1}” + Ștergerea a {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” a fost anulată Shown in a StatusCenter card. - S-au șters {0} element(e) din „{1}” + S-au șters {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” Shown in a StatusCenter card. - Eroare la ștergerea a {0} element(e) din „{1}” + Eroare la ștergerea a {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” Shown in a StatusCenter card. - Ștergerea a {0} element(e) din „{1}” a eșuat + Nu s-a putut șterge {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” Shown in a StatusCenter card. - Se șterg {0} element(e) din „{1}” + Se șterge {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” Shown in a StatusCenter card. - S-a anulat mutarea a {0} element(e) în „{1}” + Mutarea a {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” a fost anulată Shown in a StatusCenter card. - S-a anulat mutarea a {0} element(e) din „{1}” în „{2}” + Mutarea a {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” a fost anulată Shown in a StatusCenter card. - S-au mutat {0} element(e) în „{1}” + {0, plural, one {A fost mutat # element} few {Au fost mutate # elemente} other {Au fost mutate # de elemente}} la „{1}” Shown in a StatusCenter card. - S-au mutat {0} element(e) din „{1}” în „{2}” + {0, plural, one {A fost mutat # element} few {Au fost mutate # elemente} other {Au fost mutate # de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Se mută {0} element(e) în „{1}” + Se mută {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Se mută {0} element(e) din „{1}” în „{2}” + Se mută {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - Eroare la mutarea a {0} element(e) în „{1}” + Eroare la mutarea a {0, plural, one {# element} few {# elemente} other {# de elemente}} la „{1}” Shown in a StatusCenter card. - Mutarea a {0} element(e) din „{1}” la „{2}” a eșuat + Nu s-a putut muta {0, plural, one {# element} few {# elemente} other {# de elemente}} de la „{1}” la „{2}” Shown in a StatusCenter card. - S-a anulat golirea Coșului de Reciclare + S-a anulat golirea coșului de reciclare Shown in a StatusCenter card. @@ -3702,15 +3702,15 @@ Shown in a StatusCenter card. - Se Golește Coșul de Reciclare + Se golește coșul de reciclare Shown in a StatusCenter card. - Eroare la golirea Coșului de Reciclare + Eroare la golirea coșului de reciclare Shown in a StatusCenter card. - Golirea Coșului de Reciclare a eșuat + Golirea coșului de reciclare a eșuat Shown in a StatusCenter card. @@ -3725,13 +3725,13 @@ Deblocare fișier descărcat - Fără operațiuni de fișiere în curs + Nu există operațiuni în desfășurare Opțiunea de a deschide Files la pornirea Windows nu este disponibilă din cauza setărilor de sistem sau a politicii de grup. Pentru a reîncerca, deschideți pagina de pornire în Managerul de Activități. - Nu s-au putut restaura elementele din Coșul de Reciclare + Nu s-au putut restaura elementele din coșul de reciclare Nu s-a putut seta imaginea de fundal @@ -3740,10 +3740,10 @@ Nu s-a reușit deschiderea fișierului de setări - Ștergere Ramură Git + Șterge ramură Git - Sigur doriți să ștergeți definitiv ramura „{0}”? + Sigur dorești să ștergi definitiv ramura „{0}”? Conectat la GitHub @@ -3752,40 +3752,40 @@ Deconectare - Conectați-vă la GitHub + Conectează-te la GitHub Conectare - Etichetele sunt în prezent compatibile doar pe unitățile formatate ca NTFS. + Etichetele sunt în prezent compatibile doar cu unitățile formatate ca NTFS. A apărut o eroare la aplicarea acestei etichete - Extrageți {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} aici pentru un singur element sau într-un folder nou pentru mai multe elemente + Extrage {0, plural, one {arhiva selectată} few {arhivele selectate} other {arhivele selectate}} aici pentru un singur element sau într-un dosar nou pentru mai multe elemente - Extrageți aici (Smart) + Extrage aici (inteligent) - Sortați fișierele și dosarele împreună + Sortează fișierele și dosarele împreună Sortare fișiere și dosare în aceeași listă - Sortați mai întâi fișierele + Sortează întâi fișierele - Sortați mai întâi fișierele apoi dosarele + Sortează întâi fișierele, apoi dosarele - Sortați mai întâi dosarele + Sortează întâi dosarele - Sortați mai întâi dosarele apoi fișierele + Sortează întâi dosarele, apoi fișierele Prioritate de sortare @@ -3794,7 +3794,7 @@ Rotirea imaginii a eșuat - Repornire + Repornește Ieșire @@ -3803,13 +3803,13 @@ Partajarea elementelor a eșuat - Derulează la dosarul anterior când navighezi în sus + Selectează dosarul curent după navigarea înapoi - Deschideți o fereastră nouă + Deschide o fereastră nouă - Schimbați coperta albumului + Schimbă coperta albumului Nu s-a putut redenumi elementul @@ -3818,7 +3818,7 @@ Editarea „{0}” necesită permisiuni suplimentare - Editare permisiuni + Editează permisiunile Files încă rulează în fundal pentru a îmbunătăți performanța la pornire. @@ -3894,13 +3894,13 @@ Comenzi - Adăugare comandă + Adaugă comandă - Restabiliți la valorile implicite + Restabilește implicite - Alegeți o acțiune + Alege o acțiune Sunteți sigur că doriți să restaurați comenzile rapide la valorile implicite? Această acțiune nu poate fi anulată. @@ -3909,27 +3909,27 @@ Această comandă rapidă este deja utilizată, vă rugăm să alegeți o comandă rapidă diferită pentru a continua. - Comanda rapidă pe care ați ales-o nu poate fii folosită, vă rugăm să încercați o altă comandă rapidă. + Combinația de taste pe care ai ales-o nu poate fi folosită, te rog încearcă din nou folosind o altă combinație de taste. Personalizat - Aspectul Adaptiv nu este disponibil atunci când preferințele sunt sincronizate, aspectul implicit a fost schimbat la Detalii. + Aspectul adaptiv nu este disponibil atunci când preferințele sunt sincronizate. Aspectul implicit a fost schimbat la „Detaliat”. Imagine de fundal - Partea de jos + în jos Image alignment type - Centrare + centrat Image alignment type - Umplere + umplere Image stretch type @@ -3939,26 +3939,26 @@ Potrivire imagine - Stânga + la stânga Image alignment type Opacitate - Dreapta + la dreapta Image alignment type - Deasupra + în sus Image alignment type - Uniformă + uniformă Image stretch type - Umplere uniformă + umplere uniformă Image stretch type @@ -3976,7 +3976,7 @@ Instrumente pentru dezvoltatori - Configurați butonul „Deschidere IDE” pe bara de stare + Configurează butonul „Deschidere IDE” de pe bara de stare Arată pentru repozitoriile Git @@ -3995,7 +3995,7 @@ This is the friendly name for ICL files. - Fișier Zip + Fișier ZIP This is the friendly name for ZIP files. @@ -4009,80 +4009,80 @@ Locații în rețea - Nu există locații în rețea. Dacă nu utilizați locații în rețea, puteți dezactiva widget-ul. + Nu există locații în rețea. Dacă nu utilizezi locații în rețea, poți dezactiva widget-ul. Dezactivează - Editare în Notepad + Editează în Notepad - Editați fișierul selectat în Notepad + Editează fișierul selectat în Notepad Dimensiuni: - Statut: + Stare: - Afișați bara de instrumente + Afișează bara de instrumente Setting that controls if the toolbar is shown in the main view Meniu acțiuni filă - Panou vertical + Panou orizontal - Adăugare panou vertical + Adaugă panou orizontal - Panou orizontal + Panou vertical - Adăugare panou orizontal + Adaugă panou vertical - Aranjare verticală + Aranjează orizontal - Aranjați panourile vertical + Aranjează panourile orizontal - Aranjare orizontală + Aranjează vertical - Aranjați panourile orizontal + Aranjează panourile vertical - Adăugare panou + Adaugă panou Afișează butonul de acțiuni de filă în bara de titlu - Aranjați panourile + Aranjează panourile Aranjamentul implicit al panoului - Orizontal + Vertical - Vertical + Orizontal - Arată pictograma Files în System Tray + Arată pictograma Files în tăvița sistemului - Fire CPU + Fire de execuție CPU - Navigați spre pagina principală + Navighează spre pagina Acasă Bare de Instrumente @@ -4091,37 +4091,37 @@ ID utilizator - Redenumire în masă + Redenumește în masă - Comprimați conținutul + Conținut comprimat - Afișați opțiunea pentru a crea un flux alternativ de date + Afișează opțiunea pentru a crea un flux alternativ de date - Creare flux alternativ de date + Creează flux alternativ de date - Creați un flux de date alternativ pentru {0, plural, one {elemetul selectat} other {elementele selectate}} + Creează un flux de date alternativ pentru {0, plural, one {elemetul selectat} other {elementele selectate}} - Introduceți numele fluxului de date + Introdu numele fluxului de date A apărut o eroare la crearea fluxului alternativ de date - Vă rugăm să rețineți că fluxurile alternative de date funcționează doar pe unitățile formatate ca NTFS. + Reține că fluxurile alternative de date funcționează doar pe unitățile formatate ca NTFS. Fluxurile alternative de date sunt în prezent ascunse - Doriți să afișați fluxuri alternative de date? Puteți modifica această setare oricând din pagina de setări a fișierelor și dosarelor. + Dorești să afișezi fluxuri alternative de date? Poți modifica această setare oricând din pagina de setări a fișierelor și dosarelor. - Gestionare etichete + Gestionează etichetele Disponibil @@ -4130,33 +4130,33 @@ Total - Comutați întotdeauna focalizarea la fila nou creată + Comută întotdeauna focalizarea la fila nou creată - Comutare panou raft + Comută panou raft - Comutați vizibilitatea panoului raft + Comută vizibilitatea panoului raft - Afișați comutatorul pentru panoul raft în bara de adresă + Afișează comutatorul pentru panoul raft în bara de adresă Raft 'Shelf' refers to the Shelf Pane feature, where users can conveniently drag and drop files for quick access and perform bulk actions with ease. - Eliminare elemente + Golește elementele - Eliminare din raft + Elimină din raft - Adăugare la raft + Adaugă la raft Tooltip that displays when dragging items to the Shelf Pane - Introduceți un hash pentru a compara + Introdu o sumă de control pentru a o compara Placeholder that appears in the compare hash text box @@ -4177,29 +4177,29 @@ Integrare test - {0} nu a putut fi localizat. Vă rugăm să vă verificați setările și să încercați din nou. + {0} nu a putut fi localizat. Te rog să verifici setările și să încerci din nou. IDE-ul configurat nu a putut fi localizat - Deschideți setările + Deschide setările Visual Studio Code - Introduceți o cale sau un alias de lansare + Introdu o cale sau un alias de lansare - Vă rugăm să introduceți un nume pentru IDE + Te rog să introduci un nume pentru IDE - Clonare repozitoriu + Clonează repozitoriu Clone repo dialog title - Clonare + Clonează Primary action button in the clone repo dialog @@ -4211,44 +4211,41 @@ Cannot clone repo dialog title - Comparați un fișier + Compară un fișier Button that appears in file hash properties that allows the user to compare two files Format dimensiune - Binar + binar - Zecimal - - - Activare Omnibar + zecimal - Puteți adăuga secțiuni în bara laterală făcând clic dreapta și selectând secțiunile pe care doriți să le adăugați + Poți adăuga secțiuni în bara laterală făcând clic dreapta și selectând secțiunile pe care dorești să le adaugi - Trageți fișiere sau dosare aici pentru a interacționa cu ele prin diferite file + Trage fișiere sau dosare aici pentru a interacționa cu ele prin diferite file - Introduceți o cale pentru a naviga la... + Introdu o cale pentru a naviga la aceasta... - Găsiți caracteristici și comenzi... + Găsește funcții și comenzi... - Căutare fișiere și dosare... + Caută fișiere și dosare... În timpul operațiunilor de fișier - Afișați butonul centru de stare + Afișează butonul pentru centrul de operațiuni - Inel de proces centru de stare + Inel de progres al centrului de operațiuni Screen reader name for the status center progress ring @@ -4259,18 +4256,24 @@ Afișare cale compactă (breadcrumbs) - Afișare foldere copil + Arată dosarele din {0} + + + Arată dosarele în Acasă Nu există comenzi care să conțină {0} - Vedeți mai multe + Vezi mai multe - Filtering for + Se filtrează pentru - Filename + Nume fișier + + + Afișați opțiunea de a deschide foldere în Terminalul Windows diff --git a/src/Files.App/Strings/ru-RU/Resources.resw b/src/Files.App/Strings/ru-RU/Resources.resw index b3d78b3e1445..41a7e1f83ef4 100644 --- a/src/Files.App/Strings/ru-RU/Resources.resw +++ b/src/Files.App/Strings/ru-RU/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Сжато {0} элементов в "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Сжато {0} элементов из "{1}" в "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Ошибка сжатия {0} элементов в "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Не удалось сжать {0} элементов из "{1}" в "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Сжатие {0} элементов в "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Сжатие {0} элементов из "{1}" в "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Установка {0} шрифт(ов) из "{1} " отменена + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Установленный {0} шрифт(ы) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Установленный {0} шрифт(ы) из "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Ошибка установки {0} шрифта(ов) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Не удалось установить {0} шрифт(ы) из "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Установка {0} шрифта(ов) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Установка {0} шрифта(ов) из "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Копирование {0} элементов в "{1}" отменено + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Копирование {0} элементов из "{1}" в "{2}" отменено + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Скопировано {0} элементов в "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Скопировано {0} элементов из "{1}" в "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Ошибка копирования {0} элементов в "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Не удалось скопировать {0} элементов из "{1}" в "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Копирование {0} элементов в "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Копирование {0} элементов из "{1}" в "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Удаление {0} элементов из "{1}" отменено + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Удалено {0} элементов из "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Ошибка удаления {0} элементов из "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Не удалось удалить {0} элементов из {1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Удаление {0} элементов из "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Перемещение {0} элементов в "{1}" отменено + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Перемещение {0} элементов из "{1}" в "{2}" отменено + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Перемещено {0} элементов в "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Перемещено {0} элементов из "{1}" в "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Перемещение {0} элементов в "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Перемещение {0} элементов из "{1}" в "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Ошибка перемещения {0} элементов в "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Не удалось переместить {0} элементов из "{1}" в "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Десятичный - - Включить Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Показать дочерние папки + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/sk-SK/Resources.resw b/src/Files.App/Strings/sk-SK/Resources.resw index 6ac9078a5a94..4a23bf63e34a 100644 --- a/src/Files.App/Strings/sk-SK/Resources.resw +++ b/src/Files.App/Strings/sk-SK/Resources.resw @@ -3492,27 +3492,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3552,63 +3552,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopíruje sa {0} položiek do {1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Presúva sa {0} položiek z {1} do {2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3644,55 +3644,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Chyba pri odstraňovaní {0} položiek z „{1}“ + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Nepodarilo sa odstrániť {0} položiek z "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Odstraňuje sa {0} položiek z {1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4225,9 +4225,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4261,7 +4258,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4275,4 +4275,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/sq-AL/Resources.resw b/src/Files.App/Strings/sq-AL/Resources.resw index 1ffc5fb60856..927b57a634d0 100644 --- a/src/Files.App/Strings/sq-AL/Resources.resw +++ b/src/Files.App/Strings/sq-AL/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/sr-Cyrl/Resources.resw b/src/Files.App/Strings/sr-Cyrl/Resources.resw index 9a328b0c7839..b4197030929c 100644 --- a/src/Files.App/Strings/sr-Cyrl/Resources.resw +++ b/src/Files.App/Strings/sr-Cyrl/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/sv-SE/Resources.resw b/src/Files.App/Strings/sv-SE/Resources.resw index dd8296274f15..ca798fb53bbd 100644 --- a/src/Files.App/Strings/sv-SE/Resources.resw +++ b/src/Files.App/Strings/sv-SE/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Komprimerat {0} objekt till "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Komprimerat {0} objekt från "{1}" till "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fel vid komprimering av {0} objekt till "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Det gick inte att komprimera {0} objekt från "{1}" till "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Komprimerar {0} objekt till "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Komprimerar {0} objekt från "{1}" till "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installerade {0} typsnitt + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Avbröt kopiering av {0} objekt till "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Avbröt kopiering av {0} objekt från "{1}" till "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopierade {0} objekt till "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopierade {0} objekt från "{1}" till "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fel vid kopiering av {0} objekt till "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Det gick inte att kopiera {0} objekt från "{1}" till "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Kopierar {0} objekt till "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Kopierar {0} objekt från "{1}" till "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Avbröt borttagning av {0} objekt från "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Tog bort {0} objekt från "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Fel vid borttagning av {0} objekt från "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Det gick inte att ta bort {0} objekt från "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Tar bort {0} objekt från "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Avbröt flyttningen av {0} objekt till "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Avbröt flyttningen av {0} objekt från "{1}" till "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Flyttade {0} objekt till "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Flyttade {0} objekt från "{1}" till "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Flyttar {0} objekt till "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Flyttar {0} objekt från "{1}" till "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Fel vid flytt av {0} objekt till "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Misslyckades att flytta {0} objekt från "{1}" till "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/ta/Resources.resw b/src/Files.App/Strings/ta/Resources.resw index 85cacd573329..e39b6a952d1b 100644 --- a/src/Files.App/Strings/ta/Resources.resw +++ b/src/Files.App/Strings/ta/Resources.resw @@ -3430,7 +3430,7 @@ One of the custom color themes - Sivapu + சிவப்பு One of the custom color themes @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/th-TH/Resources.resw b/src/Files.App/Strings/th-TH/Resources.resw index e33cc03e4160..6f87f119c8f7 100644 --- a/src/Files.App/Strings/th-TH/Resources.resw +++ b/src/Files.App/Strings/th-TH/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Compressed {0} item(s) to "{1}" + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressed {0} item(s) from "{1}" to "{2}" + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error compressing {0} item(s) to "{1}" + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to compress {0} item(s) from "{1}" to "{2}" + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Compressing {0} item(s) to "{1}" + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Compressing {0} item(s) from "{1}" to "{2}" + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Canceled installing {0} font(s) from "{1}" + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installed {0} font(s) + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installed {0} font(s) from "{1}" + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Error installing {0} font(s) + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Failed to install {0} font(s) from "{1}" + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Installing {0} font(s) + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - Installing {0} font(s) from "{1}" + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) to "{1}" + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled copying {0} item(s) from "{1}" to "{2}" + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copied {0} item(s) to "{1}" + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copied {0} item(s) from "{1}" to "{2}" + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error copying {0} item(s) to "{1}" + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to copy {0} item(s) from "{1}" to "{2}" + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Copying {0} item(s) to "{1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Copying {0} item(s) from "{1}" to "{2}" + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Canceled deleting {0} item(s) from "{1}" + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleted {0} item(s) from "{1}" + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Error deleting {0} item(s) from "{1}" + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Failed to delete {0} item(s) from "{1}" + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Deleting {0} item(s) from "{1}" + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) to "{1}" + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Canceled moving {0} item(s) from "{1}" to "{2}" + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moved {0} item(s) to "{1}" + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moved {0} item(s) from "{1}" to "{2}" + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Moving {0} item(s) to "{1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Moving {0} item(s) from "{1}" to "{2}" + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - Error moving {0} item(s) to "{1}" + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - Failed to move {0} item(s) from "{1}" to "{2}" + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Decimal - - Enable Omnibar - You can add sections to the sidebar by right-clicking and selecting the sections you want to add @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/tr-TR/Resources.resw b/src/Files.App/Strings/tr-TR/Resources.resw index 9b313fff2184..28b6a2d87644 100644 --- a/src/Files.App/Strings/tr-TR/Resources.resw +++ b/src/Files.App/Strings/tr-TR/Resources.resw @@ -217,7 +217,7 @@ Gizli dosya ve klasörleri göster - Show dot files + dot dosyalarını göster Görünüm @@ -1101,7 +1101,7 @@ Toggle filter header - Toggle visibility of the filter header + Filtre başlığının görünürlüğünü değiştir Ön izleme yok @@ -2031,10 +2031,10 @@ Destekle - Rate us + Bizi değerlendirin - Dismiss + Reddet Arka plan olarak ayarla @@ -2445,25 +2445,25 @@ Geçerli dizin yolunu kopyala - Copy path of selected items + Seçili öğelerin yolunu kopyala - Copy path of selected items with quotes + Seçili öğelerin yolunu tırnak işaretleriyle kopyala - Copy path of the current directory with quotes + Geçerli dizinin yolunu tırnak işaretleriyle kopyala Cut selected {0, plural, one {item} other {items}} - Paste items to the current folder + Öğeleri mevcut klasöre yapıştır - Paste items to the current folder as shortcuts + Öğeleri mevcut klasöre kısayol olarak yapıştır - Paste items to the selected folder + Öğeleri seçilen klasöre yapıştır Seçili klasöre yapıştır @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - {0} öğe "{1}" olarak sıkıştırıldı + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}"den "{2}"ye sıkıştırıldı + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" olarak sıkıştırılırken hata oluştu + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}"den "{2}"ye sıkıştırılamadı + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe/öğe "{1}" olarak sıkıştırılıyor + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}"den "{2}"ye sıkıştırılıyor + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - "{1}" üstünden {0} yazı tipi kurulumu iptal edildi + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - Kurulu {0} font + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - "{1}" üstünden {0} yazı tipi kuruldu + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} yazı tipi kurulum hatası + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - "{1}" üstünden {0} yazı tipi kurulamadı + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} yazı tip(leri) yükleniyor + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - “{1}"den {0} yazı tipi(leri) yükleniyor + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - {0} öğenin "{1}" öğesine kopyalanması iptal edildi + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğenin "{1}" öğesinden "{2}" öğesine kopyalanması iptal edildi + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesine kopyalandı + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesinden "{2}" öğesine kopyalandı + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesine kopyalanırken hata oluştu + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesinden "{2}" öğesine kopyalanamadı + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesine kopyalanıyor + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesinden "{2}" öğesine kopyalanıyor + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - "{1}" kaynağından {0} öğenin silinmesi iptal edildi + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - "{1}" kaynağından {0} öğe silindi + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - "{1}" kaynağından {0} öğe silinirken hata oluştu + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - "{1}" kaynağından {0} öğe silinemedi + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - "{1}" kaynağından {0} öğe siliniyor + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - {0} öğenin "{1}" öğesine taşınması iptal edildi + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğenin "{1}" konumundan "{2}" konumuna taşınması iptal edildi + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" konumuna taşındı + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" konumundan "{2}" konumuna taşındı + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesine taşınıyor + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" konumundan "{2}" konumuna taşınıyor + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - {0} öğe "{1}" öğesine taşınırken hata oluştu + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - {0} öğe "{1}" konumundan "{2}" konumuna taşınamadı + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Ondalık - - Omnibar etkinleştir - Sağ tıklayıp eklemek istediğiniz bölümleri seçerek kenar çubuğuna bölümler ekleyebilirsiniz @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/uk-UA/Resources.resw b/src/Files.App/Strings/uk-UA/Resources.resw index 5997dacc7118..66b31796f076 100644 --- a/src/Files.App/Strings/uk-UA/Resources.resw +++ b/src/Files.App/Strings/uk-UA/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Стиснення {0} елемент(ів) до "{1}" + Стиснуто {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Стиснення {0} елемент(ів) з "{1}" до "{2}" + Стиснуто {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Помилка стиснення {0} елемент(ів) до "{1}" + Помилка стиснення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Не вдалось стиснути {0} елемент(ів) з "{1}" до "{2}" + Не вдалося стиснути {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Стиснення {0} елемент(ів) до "{1}" + Стиснення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Стиснення {0} елемент(ів) до "{1}" до "{2}" + Стиснення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Скасовано встановлення {0} шрифту (-ів) з «{1}» + Скасовано встановлення {0, plural, one {# шрифту} few {# шрифтів} many {# шрифтів} other {# шрифтів}} з «{1}» Shown in a StatusCenter card. - Встановлено {0} шрифт (-и) + Встановлено {0, plural, one {# шрифт} few {# шрифти} many {# шрифтів} other {# шрифтів}} Shown in a StatusCenter card. - Встановлено {0} шрифт (-и) з «{1}» + Встановлено {0, plural, one {# шрифт} few {# шрифти} many {# шрифтів} other {# шрифтів}} з «{1}» Shown in a StatusCenter card. - Помилка встановлення {0} шрифту (-ів) + Помилка встановлення {0, plural, one {# шрифт} few {# шрифти} many {# шрифтів} other {# шрифтів}} Shown in a StatusCenter card. - Не вдалося встановити {0} шрифт (-и) з «{1}» + Не вдалося встановити {0, plural, one {# шрифту} few {# шрифтів} many {# шрифтів} other {# шрифтів}} з «{1}» Shown in a StatusCenter card. - Встановлення {0} шрифту (-ів) + Встановлення {0, plural, one {# шрифт} few {# шрифти} many {# шрифтів} other {# шрифтів}} Shown in a StatusCenter card. - Встановлення {0} шрифту (-ів) з «{1}» + Встановлення {0, plural, one {# шрифт} few {# шрифти} many {# шрифтів} other {# шрифтів}} з «{1}» Shown in a StatusCenter card. - Скасовано копіювання {0} елемент(ів) до "{1}" + Скасовано копіювання {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Скасовано копіювання {0} елемент(ів) з "{1}" до "{2}" + Скасовано встановлення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Скопійовано {0} елемент(ів) до "{1}" + Скопійовано {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Скопійовано {0} елемент(ів) з "{1}" до "{2}" + Скопійовано {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Помилка копіювання {0} елемент(ів) до "{1}" + Помилка копіювання {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Не вдалось скопіювати {0} елемент(ів) з "{1}" до "{2}" + Не вдалося скопіювати {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Копіювання {0} елемент(ів) до "{1}" + Копіювання {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Копіювання {0} елемент(ів) з "{1}" до "{2}" + Копіювання {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Скасовано видалення {0} елементів з "{1}" + Скасовано видалення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» Shown in a StatusCenter card. - Видалено {0} item(s) з "{1} " " + Видалено {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» Shown in a StatusCenter card. - Помилка видалення {0} елемента(ів) з "{1}" + Помилка видалення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» Shown in a StatusCenter card. - Не вдалося видалити {0} item(s) з "{1}" + Не вдалося видалити {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» Shown in a StatusCenter card. - Видалення {0} елемент(ів) з "{1} " " + Видалення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» Shown in a StatusCenter card. - Скасовано переміщення {0} елемент(ів) до "{1}" + Скасовано переміщення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Скасовано переміщення {0} елемент(ів) з "{1}" до "{2}" + Скасовано переміщення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Переміщено {0} елемент(ів) до "{1}" + Переміщено {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Переміщено {0} елемент(ів) з "{1}" до "{2}" + Переміщено {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Переміщення {0} елемент(ів) з "{1}" + Перміщення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Переміщення {0} елемент(ів) з "{1}" до "{2}" + Переміщення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. - Помлка переміщення {0} елемент(ів) до "{1}" + Помилка переміщення {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} до «{1}» Shown in a StatusCenter card. - Не вдалось перемістити {0} елемент(ів) з "{1}" до "{2}" + Не вдалося перемістити {0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}} з «{1}» до «{2}» Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ Десятковий - - Увімкнути Omnibar - Ви можете додати розділи на бічну панель, клацнувши ПКМ та вибравши розділи, які ви хочете додати. @@ -4259,7 +4256,10 @@ Показувати згорнутий шлях - Показувати дочірні теки + Показати теку в {0} + + + Показати теки в Головній Немає команд, що містять {0} @@ -4273,4 +4273,7 @@ Назва файлу + + Show option to open folders in Windows Terminal + diff --git a/src/Files.App/Strings/vi/Resources.resw b/src/Files.App/Strings/vi/Resources.resw index a1d153ad16fe..45a555dfec6e 100644 --- a/src/Files.App/Strings/vi/Resources.resw +++ b/src/Files.App/Strings/vi/Resources.resw @@ -148,7 +148,7 @@ Kích cỡ: - Kích cỡ trên ổ đĩa: + Kích cỡ thực tế: Kích cỡ chưa nén: @@ -292,7 +292,7 @@ Cấp quyền - Trước khi bắt đầu, bạn cần phải cấp quyền hiển thị các tệp. Ứng dụng sẽ tự động mở cửa số Cài đặt để bạn thực hiện cấp quyền truy cập này. Sau khi hoàn tất, bạn sẽ cần khởi động lại ứng dụng. + Trước khi bắt đầu, bạn cần phải cấp quyền để hiển thị các tệp. Ứng dụng sẽ mở cửa sổ Cài đặt, hãy thực hiện cấp quyền trong cửa sổ này. Sau khi hoàn tất, bạn sẽ cần khởi động lại ứng dụng. Hiển thị @@ -1077,28 +1077,28 @@ Tên mong muốn - Bật/Tắt ngăn xem trước + Bật tắt ngăn xem trước - Bật/Tắt ngăn chi tiết + Bật tắt ngăn chi tiết Ẩn hoặc hiện ngăn chi tiết để xem các thuộc tính cơ bản của tệp - Bật/Tắt ngăn thông tin + Bật tắt ngăn thông tin Ẩn hoặc hiện thanh chi tiết và thanh xem trước - Bật/Tắt thanh công cụ + Bật tắt thanh công cụ Ẩn hoặc hiện thanh công cụ - Bật/Tắt phần lọc + Bật tắt phần lọc Ẩn hoặc hiện phần lọc @@ -1449,7 +1449,7 @@ Sửa đổi - Quyền truy cập cho {0} + Quyền truy cập của {0} Đọc và thực thi @@ -1695,7 +1695,7 @@ Mở ổ đĩa - Vui lòng cho đĩa vào ổ đĩa {0} + Vui lòng cho đĩa vào ổ {0} Chèn đĩa @@ -1941,7 +1941,7 @@ Chạy bằng PowerShell - Việc tính toán kích cỡ thư mục có thể tốn nhiều tài nguyên thiết bị và khiến mức sử dụng CPU tăng lên. + Việc tính toán kích cỡ thư mục tốn nhiều tài nguyên thiết bị và có thể khiến mức sử dụng CPU tăng lên. Xoay trái @@ -2394,7 +2394,7 @@ Tên không hợp lệ - Tên không được để trống hoặc bắt đầu/kết thúc với một dấu chấm. + Tên không được để trống hoặc bắt đầu/kết thúc bằng dấu chấm. Video @@ -2403,7 +2403,7 @@ Cửa sổ xem trước - Bật/Tắt chế độ thu gọn + Bật tắt chế độ thu gọn Mở trang trợ giúp trực tuyến trong trình duyệt @@ -2421,7 +2421,7 @@ Bật hoặc tắt chế độ thu gọn - Tìm kiếm nội dung trong thanh đường dẫn + Tìm kiếm nội dung trong thanh kết hợp Ẩn hoặc hiện các tệp bị ẩn @@ -2517,7 +2517,7 @@ Hủy chọn khoản mục - Chọn hoặc bỏ chọn khoản mục đã thao tác gần nhất + Hoán đổi lựa chọn cuối Chia sẻ {0, plural, other {khoản mục}} với người khác @@ -2718,7 +2718,7 @@ Chuyển đổi hướng sắp xếp nhóm - Mở một thẻ mới + Mở thẻ mới Điều hướng lùi về @@ -2778,7 +2778,7 @@ Đặt tiêu điểm vào ngăn còn lại - Bật/Tắt thanh bên + Bật tắt thanh bên Alt @@ -3019,7 +3019,7 @@ Hiện hộp kiểm khi chọn khoản mục - Chỉnh sửa nội dung trong thanh đường dẫn + Chỉnh sửa đường dẫn trong thanh kết hợp Tạo khoản mục mới @@ -3064,7 +3064,7 @@ Ẩn hoặc hiện đơn vị khi nhóm theo ngày tháng - Ẩn/Hiện đơn vị nhóm + Bật tắt đơn vị nhóm Năm @@ -3184,7 +3184,7 @@ Chạy git fetch - Clone một kho lưu trữ Git + Clone kho lưu trữ Git Chạy git pull @@ -3348,7 +3348,7 @@ Bảng lệnh - Mở bảng lệnh trong thanh đường dẫn + Mở bảng lệnh trong thanh kết hợp Bắt đầu trong: @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - Đã nén {0} mục đến "{1}" + Đã nén {0, plural, other {# khoản mục}} vào "{1}" Shown in a StatusCenter card. - Đã nén {0} mục từ "{1}" đến "{2}" + Đã nén {0, plural, other {# khoản mục}} từ "{1}" vào "{2}" Shown in a StatusCenter card. - Đã xảy ra lỗi khi nén {0} mục đến "{1}" + Đã xảy ra lỗi khi nén {0, plural, other {# khoản mục}} vào "{1}" Shown in a StatusCenter card. - Không thể nén {0} mục từ "{1}" đến "{2}" + Không thể nén {0, plural, other {# khoản mục}} từ "{1}" vào "{2}" Shown in a StatusCenter card. - Đang nén {0} mục đến "{1}" + Đang nén {0, plural, other {# khoản mục}} vào "{1}" Shown in a StatusCenter card. - Đang nén {0} mục từ "{1}" đến "{2}" + Đang nén {0, plural, other {# khoản mục}} từ "{1}" vào "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - Đã hủy cài đặt {0} phông chữ từ "{1}" + Đã hủy cài đặt {0, plural, other {# phông chữ}} từ "{1}" Shown in a StatusCenter card. - Đã cài đặt {0} phông chữ + Đã cài đặt {0, plural, other {# phông chữ}} Shown in a StatusCenter card. - Đã cài đặt {0} phông chữ từ "{1}" + Đã cài đặt {0, plural, other {# phông chữ}} từ "{1}" Shown in a StatusCenter card. - Đã xảy ra lỗi khi cài đặt {0} phông chữ + Đã xảy ra lỗi khi cài đặt {0, plural, other {# phông chữ}} Shown in a StatusCenter card. - Không thể cài đặt {0} phông chữ từ "{1}" + Không thể cài đặt {0, plural, other {# phông chữ}} từ "{1}" Shown in a StatusCenter card. - Đang cài đặt {0} phông chữ + Đang cài đặt {0, plural, other {# phông chữ}} Shown in a StatusCenter card. - Đang cài đặt {0} phông chữ từ "{1}" + Đang cài đặt {0, plural, other {# phông chữ}} từ "{1}" Shown in a StatusCenter card. - Đã hủy sao chép {0} mục đến "{1}" + Đã hủy sao chép {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đã hủy sao chép {0} mục từ "{1}" đến "{2}" + Đã hủy sao chép {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đã sao chép {0} mục đến "{1}" + Đã sao chép {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đã sao chép {0} mục từ "{1}" đến "{2}" + Đã sao chép {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đã xảy ra lỗi khi sao chép {0} mục đến "{1}" + Đã xảy ra lỗi khi sao chép {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Không thể sao chép {0} mục từ "{1}" đến "{2}" + Không thể sao chép {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đang sao chép {0} mục đến "{1}" + Đang sao chép {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đang sao chép {0} mục từ "{1}" đến "{2}" + Đang sao chép {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - Đã hủy xóa {0} mục khỏi "{1}" + Đã hủy xóa {0, plural, other {# khoản mục}} khỏi "{1}" Shown in a StatusCenter card. - Đã xóa {0} mục khỏi "{1}" + Đã xóa {0, plural, other {# khoản mục}} khỏi "{1}" Shown in a StatusCenter card. - Đã xảy ra lỗi khi xóa {0} mục khỏi "{1}" + Đã xảy ra lỗi khi xóa {0, plural, other {# khoản mục}} khỏi "{1}" Shown in a StatusCenter card. - Không thể xóa {0} mục khỏi "{1}" + Không thể xóa {0, plural, other {# khoản mục}} khỏi "{1}" Shown in a StatusCenter card. - Đang xóa {0} mục khỏi "{1}" + Đang xóa {0, plural, other {# khoản mục}} khỏi "{1}" Shown in a StatusCenter card. - Đã hủy di chuyển {0} mục đến "{1}" + Đã hủy di chuyển {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đã hủy di chuyển {0} mục từ "{1}" đến "{2}" + Đã hủy di chuyển {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đã di chuyển {0} mục đến "{1}" + Đã di chuyển {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đã di chuyển {0} mục từ "{1}" đến "{2}" + Đã di chuyển {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đang di chuyển {0} mục đến "{1}" + Đang di chuyển {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Đang thực hiện di chuyển {0} mục từ "{1}" đến "{2}" + Đang di chuyển {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. - Đã xảy ra lỗi khi di chuyển {0} mục đến "{1}" + Đã xảy ra lỗi khi di chuyển {0, plural, other {# khoản mục}} đến "{1}" Shown in a StatusCenter card. - Không thể di chuyển {0} mục từ "{1}" đến "{2}" + Không thể di chuyển {0, plural, other {# khoản mục}} từ "{1}" đến "{2}" Shown in a StatusCenter card. @@ -3900,16 +3900,16 @@ Khôi phục mặc định - Chọn một tác vụ + Chọn tác vụ Bạn có chắc chắn muốn khôi phục tổ hợp phím mặc định không? Bạn sẽ không thể hoàn tác sau khi tiếp tục. - Tổ hợp phím này đã được sử dụng, vui lòng chọn một tổ hợp phím khác để tiếp tục. + Tổ hợp phím này đã được sử dụng, vui lòng chọn tổ hợp khác để tiếp tục. - Không thể sử dụng tổ hợp phím này, vui lòng chọn một tổ hợp phím khác. + Không thể sử dụng tổ hợp phím này, vui lòng chọn tổ hợp khác. Tùy chỉnh @@ -4133,7 +4133,7 @@ Luôn đặt tiêu điểm vào thẻ mới - Bật/Tắt ngăn tạm + Bật tắt ngăn tạm Ẩn hoặc hiện ngăn tạm @@ -4223,9 +4223,6 @@ Thập phân - - Bật thanh đường dẫn - Bạn có thể thêm phân mục vào thanh bên bằng cách nhấp chuột phải rồi chọn vào mục mình muốn thêm @@ -4259,7 +4256,10 @@ Hiện nút thả đường dẫn đã ẩn đi - Hiện thư mục con + Hiện thư mục trong {0} + + + Hiện thư mục trong Trang chủ Không có lệnh nào chứa {0} @@ -4271,6 +4271,9 @@ Lọc theo - Filename + Tên tệp + + + Hiện tùy chọn mở thư mục trong Windows Terminal diff --git a/src/Files.App/Strings/zh-Hans/Resources.resw b/src/Files.App/Strings/zh-Hans/Resources.resw index b126fc06b0c4..1cbcea7ce273 100644 --- a/src/Files.App/Strings/zh-Hans/Resources.resw +++ b/src/Files.App/Strings/zh-Hans/Resources.resw @@ -214,10 +214,10 @@ 显示已知文件类型的扩展名 - 显示隐藏的文件(夹) + 显示隐藏的文件或文件夹 - Show dot files + 显示以英文句点开头的文件 外观 @@ -1089,7 +1089,7 @@ 显示/隐藏信息窗格 - Toggle visibility of the detail/preview panes + 切换详细信息/预览窗格可见性 显示/隐藏工具栏 @@ -1098,10 +1098,10 @@ 切换工具栏的可见性 - Toggle filter header + 显示/隐藏筛选顶栏 - Toggle visibility of the filter header + 切换筛选顶栏可见性 没有预览 @@ -2022,19 +2022,19 @@ 您好! - Enjoying Files? Please consider reviewing in the Microsoft Store. + 喜欢Files吗?请考虑在Microsoft Store中给我们写评价。 - Enjoying Files? Please consider supporting the project on GitHub. + 喜欢Files吗?请考虑在Github上支持该项目 - Sponsor + 赞助者 - Rate us + 为我们评分 - Dismiss + 忽略 设置为背景 @@ -2238,7 +2238,7 @@ 在此位置创建快捷方式需要管理员权限 - 您要在桌面上创建快捷方式吗? + 要改为在桌面上创建快捷方式吗? 指定的项目名称无效 @@ -2439,31 +2439,31 @@ 切换侧边栏显示 - Copy selected {0, plural, one {item} other {items}} + 复制选中的{0, plural, other {项目}} - Copy path of the current directory + 复制当前文件夹的路径 - Copy path of selected items + 复制选中项目的路径 - Copy path of selected items with quotes + 复制选中项目的路径(带引号) - Copy path of the current directory with quotes + 复制当前目录的路径(带引号) - Cut selected {0, plural, one {item} other {items}} + 剪切选中的{0, plural, other {项目}} - Paste items to the current folder + 将文件粘贴到当前文件夹 - Paste items to the current folder as shortcuts + 将项目在当前文件夹粘贴为快捷方式 - Paste items to the selected folder + 将文件粘贴到选中的文件夹 粘贴到选中的文件夹 @@ -2586,13 +2586,13 @@ 创建一个 zip 压缩文件并放入当前选中的{0, plural, other {项目}} - Extract selected {0, plural, one {archive} other {archives}} to any folder + 解压缩选中的{0, plural, other {压缩文件}}到任意文件夹 - Extract selected {0, plural, one {archive} other {archives}} to the current folder + 解压缩选中的{0, plural, other {压缩文件}}到当前文件夹 - Extract selected {0, plural, one {archive} other {archives}} to new folder + 解压缩选中的{0, plural, other {压缩文件}}到新文件夹 向左旋转选中的{0, plural, other {图像}} @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - 已将 {0} 个项目压缩到“{1}” + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已将 {0} 个项目从“{1}”压缩到“{2}” + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 将 {0} 个项目压缩到“{1}”时出错 + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 无法将 {0} 个项目从“{1}”压缩到“{2}” + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在将 {0} 个项目压缩到“{1}” + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在将 {0} 个项目从“{1}”压缩到“{2}” + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - 已取消从“{1}”中安装 {0} 个字体 + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 已安装 {0} 个字体 + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 已从“{1}”中安装 {0} 个字体 + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 安装 {0} 个字体时出错 + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 无法从“{1}”中安装 {0} 个字体 + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 正在安装 {0} 个字体 + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 正在从“{1}”中安装 {0} 个字体 + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 已取消将 {0} 个项目复制到“{1}” + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已取消将 {0} 个项目从“{1}”复制到“{2}” + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 已将 {0} 个项目复制到“{1}” + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已将 {0} 个项目从“{1}”复制到“{2}” + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 将 {0} 个项目复制到“{1}”时出错 + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 无法将 {0} 个项目从“{1}”复制到“{2}” + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在将 {0} 个项目复制到 {1}" + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在将 {0} 个项目从“{1}”复制到“{2}” + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - 已取消从“{1}”中删除 {0} 个项目 + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 已从“{1}”中删除 {0} 个项目 + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 从“{1}”中删除 {0} 个项目时出错 + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 无法从“{1}”中删除 {0} 个项目 + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 正在从 "{1}" 中删除 {0} 个项目 + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 已取消将 {0} 个项目移动到“{1}” + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已取消将 {0} 个项目从“{1}”移动到“{2}” + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 已将 {0} 个项目移动到“{1}” + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已将 {0} 个项目从“{1}”移动到“{2}” + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在将 {0} 个项目移动到 {1}" + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在将 {0} 个项目从“{1}”移动到“{2}” + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 将 {0} 个项目移动到“{1}”时出错 + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 无法将 {0} 个项目从“{1}”移动到“{2}” + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3764,7 +3764,7 @@ 应用此标签时发生错误 - Extract selected {0, plural, one {archive} other {archives}} here for single-item or to new folder for multi-item + 解压缩选中的{0, plural, other {压缩文件}}:若其中仅有一个项目,解压缩到当前目录下;否则,解压缩到当前目录下与压缩文件同名的新文件夹中 智能解压 @@ -4223,9 +4223,6 @@ 十进制 - - 启用 Omnibar - 可以通过右击并选择需要的部分将其添加至侧边栏 @@ -4259,7 +4256,10 @@ 显示被折叠的路径层级导航栏 - 显示子文件夹 + Show folders in {0} + + + 在主页显示文件夹 没有包含 {0} 的命令 @@ -4268,9 +4268,12 @@ 查看更多 - Filtering for + 筛选 - Filename + 文件名 + + + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Strings/zh-Hant/Resources.resw b/src/Files.App/Strings/zh-Hant/Resources.resw index 45f05c875cf7..1a66cade2d36 100644 --- a/src/Files.App/Strings/zh-Hant/Resources.resw +++ b/src/Files.App/Strings/zh-Hant/Resources.resw @@ -3490,27 +3490,27 @@ Shown in a StatusCenter card. - 已成功將 {0} 個項目壓縮到「{1}」 + Compressed {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已成功將 {0} 個項目從「{1}」壓縮到「{2}」 + Compressed {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 壓縮 {0} 個項目到「{1}」時發生錯誤 + Error compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 無法將 {0} 個項目從「{1}」壓縮到「{2}」 + Failed to compress {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在將 {0} 個項目壓縮到「{1}」 + Compressing {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在將 {0} 個項目從「{1}」壓縮到「{2}」 + Compressing {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3550,63 +3550,63 @@ Shown in a StatusCenter card. - 已取消從「{1}」刪除 {0} 款字型 + Canceled installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 已安裝 {0} 款字型 + Installed {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 已從「{1}」安裝 {0} 款字型 + Installed {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 安裝 {0} 個字型時發生錯誤 + Error installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 無法從「{1}」安裝 {0} 款字型 + Failed to install {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 正在安裝 {0} 款字型 + Installing {0, plural, one {# font} other {# fonts}} Shown in a StatusCenter card. - 正在從「{1}」安裝 {0} 款字型 + Installing {0, plural, one {# font} other {# fonts}} from "{1}" Shown in a StatusCenter card. - 已取消將 {0} 個項目複製到「{1}」 + Canceled copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已取消將 {0} 個項目從「{1}」複製到「{2}」 + Canceled copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 已成功將 {0} 個項目複製到「{1}」 + Copied {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已成功將 {0} 個項目從「{1}」複製到「{2}」 + Copied {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 將一個項目"{0}"複製到"{1}"時發生錯誤 + Error copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 無法將 {0} 個項目從「{1}」複製到「{2}」 + Failed to copy {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在將 {0} 個項目複製到「{1}」 + Copying {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在將 {0} 個項目從「{1}」複製到「{2}」 + Copying {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -3642,55 +3642,55 @@ Shown in a StatusCenter card. - 已取消將 {0} 個項目從「{1}」刪除 + Canceled deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 已成功將 {0} 個項目從「{1}」刪除 + Deleted {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 從「{1}」中刪除 {0} 個項目時發生錯誤 + Error deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 無法將 {0} 個項目從「{1}」刪除 + Failed to delete {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 正在將 {0} 個項目從「{1}」刪除 + Deleting {0, plural, one {# item} other {# items}} from "{1}" Shown in a StatusCenter card. - 已取消將 {0} 個項目移動到「{1}」 + Canceled moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已取消將 {0} 個項目從「{1}」移動到「{2}」 + Canceled moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 已成功將 {0} 個項目移動到「{1}」 + Moved {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 已成功將 {0} 個項目從「{1}」移動到「{2}」 + Moved {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 正在將 {0} 個項目移動到「{1}」 + Moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 正在將 {0} 個項目從「{1}」移動到「{2}」 + Moving {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. - 將 {0} 個項目移動到 {1} 時發生錯誤 + Error moving {0, plural, one {# item} other {# items}} to "{1}" Shown in a StatusCenter card. - 無法將 {0} 個項目從 {1} 移至 {2} + Failed to move {0, plural, one {# item} other {# items}} from "{1}" to "{2}" Shown in a StatusCenter card. @@ -4223,9 +4223,6 @@ 十進位 - - 啟用萬用列(Omnibar) - 你可以透過右鍵點擊並選取想要新增的區段,來將區段加入側邊欄 @@ -4259,7 +4256,10 @@ Show collapsed path breadcrumbs - Show child folders + Show folders in {0} + + + Show folders in Home There are no commands containing {0} @@ -4273,4 +4273,7 @@ Filename + + Show option to open folders in Windows Terminal + From ec7cfdcb26eeb1c51593bf66d2c3071502cacdd6 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 29 Jul 2025 17:56:34 -0400 Subject: [PATCH 086/107] Build: v3.9.13 Signed-off-by: Yair <39923744+yaira2@users.noreply.github.com> --- src/Files.App (Package)/Package.appxmanifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App (Package)/Package.appxmanifest b/src/Files.App (Package)/Package.appxmanifest index 61e9b1536324..a8616f2fb00c 100644 --- a/src/Files.App (Package)/Package.appxmanifest +++ b/src/Files.App (Package)/Package.appxmanifest @@ -16,7 +16,7 @@ + Version="3.9.13.0" /> Files - Dev From 6a75b096360a609994fe081905a00f045766fc50 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 29 Jul 2025 21:57:10 -0400 Subject: [PATCH 087/107] Code Quality: Rename 'default' to 'Use system setting' --- src/Files.App/Data/Items/AppLanguageItem.cs | 2 +- src/Files.App/Strings/en-US/Resources.resw | 6 +++--- src/Files.App/ViewModels/Settings/AppearanceViewModel.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Files.App/Data/Items/AppLanguageItem.cs b/src/Files.App/Data/Items/AppLanguageItem.cs index fe05a9e90e81..bbd9e7119943 100644 --- a/src/Files.App/Data/Items/AppLanguageItem.cs +++ b/src/Files.App/Data/Items/AppLanguageItem.cs @@ -30,7 +30,7 @@ public AppLanguageItem(string code, bool systemDefault = false) if (systemDefault || string.IsNullOrEmpty(code)) { Code = new CultureInfo(code).Name; - Name = Strings.SettingsPreferencesSystemDefaultLanguageOption.GetLocalizedResource(); + Name = Strings.UseSystemSetting.GetLocalizedResource(); } else { diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index c43a98eb994a..fe935a3293a4 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -309,6 +309,9 @@ Dark + + Use system setting + Application @@ -524,9 +527,6 @@ Status - - Windows default - No results diff --git a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs index 5ed3f94c0958..8131f3be77d6 100644 --- a/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AppearanceViewModel.cs @@ -39,7 +39,7 @@ public AppearanceViewModel(IUserSettingsService userSettingsService, IResourcesS Themes = [ - Strings.Default.GetLocalizedResource(), + Strings.UseSystemSetting.GetLocalizedResource(), Strings.LightTheme.GetLocalizedResource(), Strings.DarkTheme.GetLocalizedResource() ]; From 30ae1a3167a0eda9b5908b369bd79058adc775ef Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:03:10 -0400 Subject: [PATCH 088/107] Fix: Prevent crash when parsing an empty hotkey string (#17369) Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com> --- src/Files.App/Data/Commands/HotKey/HotKey.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Files.App/Data/Commands/HotKey/HotKey.cs b/src/Files.App/Data/Commands/HotKey/HotKey.cs index 30e1bbac98ba..9713381259e9 100644 --- a/src/Files.App/Data/Commands/HotKey/HotKey.cs +++ b/src/Files.App/Data/Commands/HotKey/HotKey.cs @@ -278,6 +278,9 @@ public HotKey(Keys key, KeyModifiers modifier = KeyModifiers.None, bool isVisibl /// Humanized code with a format . public static HotKey Parse(string code, bool localized = true) { + if (string.IsNullOrEmpty(code)) + return None; + var key = Keys.None; var modifier = KeyModifiers.None; bool isVisible = true; From ff566bb7a34d92820759d1f4d92de81bf3d9caa4 Mon Sep 17 00:00:00 2001 From: Filippo Ferrario <102259289+ferrariofilippo@users.noreply.github.com> Date: Wed, 30 Jul 2025 17:19:06 +0200 Subject: [PATCH 089/107] Feature: Added `Digital Signatures` tab to the properties window (#17334) --- src/Files.App.CsWin32/NativeMethods.txt | 33 + .../Enums/PropertiesNavigationViewItemType.cs | 5 + .../PropertiesNavigationViewItemFactory.cs | 17 + src/Files.App/Data/Items/CertNodeInfoItem.cs | 18 + .../Data/Models/SignatureInfoItem.cs | 92 ++ .../Helpers/Win32/Win32Helper.Storage.cs | 4 +- .../Helpers/Win32/Win32PInvoke.Methods.cs | 23 +- .../Helpers/Win32/Win32PInvoke.Structs.cs | 47 +- src/Files.App/Strings/en-US/Resources.resw | 21 + .../Utils/Signatures/DigitalSignaturesUtil.cs | 990 ++++++++++++++++++ .../Properties/MainPropertiesViewModel.cs | 3 +- .../Properties/SignaturesViewModel.cs | 37 + .../ViewModels/Settings/AboutViewModel.cs | 1 + .../Views/Properties/SignaturesPage.xaml | 210 ++++ .../Views/Properties/SignaturesPage.xaml.cs | 40 + src/Files.App/Views/Settings/AboutPage.xaml | 2 +- .../Helpers/FileExtensionHelpers.cs | 29 + 17 files changed, 1551 insertions(+), 21 deletions(-) create mode 100644 src/Files.App/Data/Items/CertNodeInfoItem.cs create mode 100644 src/Files.App/Data/Models/SignatureInfoItem.cs create mode 100644 src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs create mode 100644 src/Files.App/ViewModels/Properties/SignaturesViewModel.cs create mode 100644 src/Files.App/Views/Properties/SignaturesPage.xaml create mode 100644 src/Files.App/Views/Properties/SignaturesPage.xaml.cs diff --git a/src/Files.App.CsWin32/NativeMethods.txt b/src/Files.App.CsWin32/NativeMethods.txt index 294dcf68ab36..a758d0ef4c51 100644 --- a/src/Files.App.CsWin32/NativeMethods.txt +++ b/src/Files.App.CsWin32/NativeMethods.txt @@ -236,3 +236,36 @@ GetMenuItemCount GetMenuItemInfo IsWow64Process2 GetCurrentProcess +CertFreeCertificateContext +CryptMsgGetParam +CryptMsgClose +CryptMsgOpenToDecode +CryptMsgUpdate +CertOpenStore +CryptDecodeObject +CertFindCertificateInStore +CertComparePublicKeyInfo +CryptQueryObject +CertCloseStore +WinVerifyTrust +FileTimeToSystemTime +FileTimeToLocalFileTime +SystemTimeToFileTime +CRYPTOAPI_BLOB +CMSG_SIGNER_INFO +SignDataHandle +CRYPT_ATTRIBUTE +FILETIME +CRYPT_BIT_BLOB +CERT_ALT_NAME_INFO +CERT_CONTEXT +CERT_INFO +CRYPT_ALGORITHM_IDENTIFIER +CERT_PUBLIC_KEY_INFO +CATALOG_INFO +WINTRUST_FILE_INFO +WINTRUST_DATA +HCERTSTORE +HCRYPTMSG +CERT_QUERY_ENCODING_TYPE +CertGetNameString diff --git a/src/Files.App/Data/Enums/PropertiesNavigationViewItemType.cs b/src/Files.App/Data/Enums/PropertiesNavigationViewItemType.cs index 4b33779e6c1d..811d70c3474e 100644 --- a/src/Files.App/Data/Enums/PropertiesNavigationViewItemType.cs +++ b/src/Files.App/Data/Enums/PropertiesNavigationViewItemType.cs @@ -47,5 +47,10 @@ public enum PropertiesNavigationViewItemType /// Shortcut page type /// Shortcut, + + /// + /// Signatures page type + /// + Signatures, } } diff --git a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs index f546301858e4..0723f321df0d 100644 --- a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs +++ b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs @@ -61,8 +61,15 @@ public static ObservableCollection Initialize ItemType = PropertiesNavigationViewItemType.Compatibility, ThemedIconStyle = (Style)Application.Current.Resources["App.ThemedIcons.Properties.Compatability"], }; + var signaturesItem = new NavigationViewItemButtonStyleItem() + { + Name = Strings.Signatures.GetLocalizedResource(), + ItemType = PropertiesNavigationViewItemType.Signatures, + ThemedIconStyle = (Style)Application.Current.Resources["App.ThemedIcons.Properties.Signatures"], + }; PropertiesNavigationViewItems.Add(generalItem); + PropertiesNavigationViewItems.Add(signaturesItem); PropertiesNavigationViewItems.Add(securityItem); PropertiesNavigationViewItems.Add(hashesItem); PropertiesNavigationViewItems.Add(shortcutItem); @@ -89,6 +96,7 @@ public static ObservableCollection Initialize PropertiesNavigationViewItems.Remove(securityItem); PropertiesNavigationViewItems.Remove(customizationItem); PropertiesNavigationViewItems.Remove(hashesItem); + PropertiesNavigationViewItems.Remove(signaturesItem); } else if (item is ListedItem listedItem) { @@ -102,6 +110,11 @@ public static ObservableCollection Initialize var detailsItemEnabled = !(isFolder && !listedItem.IsArchive) && !isLibrary && !listedItem.IsRecycleBinItem; var customizationItemEnabled = !isLibrary && (isFolder && !listedItem.IsArchive || isShortcut && !listedItem.IsLinkItem); var compatibilityItemEnabled = FileExtensionHelpers.IsExecutableFile(listedItem is IShortcutItem sht ? sht.TargetPath : fileExt, true); + var signaturesItemEnabled = + !isFolder && + !isLibrary && + !listedItem.IsRecycleBinItem && + FileExtensionHelpers.IsSignableFile(fileExt, true); if (!securityItemEnabled) PropertiesNavigationViewItems.Remove(securityItem); @@ -109,6 +122,9 @@ public static ObservableCollection Initialize if (!hashItemEnabled) PropertiesNavigationViewItems.Remove(hashesItem); + if (!signaturesItemEnabled) + PropertiesNavigationViewItems.Remove(signaturesItem); + if (!isShortcut) PropertiesNavigationViewItems.Remove(shortcutItem); @@ -132,6 +148,7 @@ public static ObservableCollection Initialize PropertiesNavigationViewItems.Remove(detailsItem); PropertiesNavigationViewItems.Remove(customizationItem); PropertiesNavigationViewItems.Remove(compatibilityItem); + PropertiesNavigationViewItems.Remove(signaturesItem); } return PropertiesNavigationViewItems; diff --git a/src/Files.App/Data/Items/CertNodeInfoItem.cs b/src/Files.App/Data/Items/CertNodeInfoItem.cs new file mode 100644 index 000000000000..abed64927c7a --- /dev/null +++ b/src/Files.App/Data/Items/CertNodeInfoItem.cs @@ -0,0 +1,18 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +namespace Files.App.Data.Items +{ + public class CertNodeInfoItem + { + public string IssuedTo { get; set; } = string.Empty; + + public string IssuedBy { get; set; } = string.Empty; + + public string Version { get; set; } = string.Empty; + + public string ValidFrom { get; set; } = string.Empty; + + public string ValidTo { get; set; } = string.Empty; + } +} diff --git a/src/Files.App/Data/Models/SignatureInfoItem.cs b/src/Files.App/Data/Models/SignatureInfoItem.cs new file mode 100644 index 000000000000..6b5e8ffc5022 --- /dev/null +++ b/src/Files.App/Data/Models/SignatureInfoItem.cs @@ -0,0 +1,92 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Files.App.Utils.Signatures; +using System.Windows.Input; +using Windows.Win32.Foundation; + +namespace Files.App.Data.Models +{ + public sealed partial class SignatureInfoItem : ObservableObject + { + private readonly string _fileName; + + private readonly HWND _hwndParent; + + private readonly int _index; + + private string _Version = string.Empty; + public string Version + { + get => _Version; + set => SetProperty(ref _Version, value); + } + + private string _IssuedBy = string.Empty; + public string IssuedBy + { + get => _IssuedBy; + set => SetProperty(ref _IssuedBy, value); + } + + private string _IssuedTo = string.Empty; + public string IssuedTo + { + get => _IssuedTo; + set => SetProperty(ref _IssuedTo, value); + } + + private string _ValidFromTimestamp = string.Empty; + public string ValidFromTimestamp + { + get => _ValidFromTimestamp; + set => SetProperty(ref _ValidFromTimestamp, value); + } + + private string _ValidToTimestamp = string.Empty; + public string ValidToTimestamp + { + get => _ValidToTimestamp; + set => SetProperty(ref _ValidToTimestamp, value); + } + + private string _VerifiedTimestamp = string.Empty; + public string VerifiedTimestamp + { + get => _VerifiedTimestamp; + set => SetProperty(ref _VerifiedTimestamp, value); + } + + private bool _Verified = false; + public bool Verified + { + get => _Verified; + set + { + if (SetProperty(ref _Verified, value)) + OnPropertyChanged(nameof(Glyph)); + } + } + + public List SignChain { get; } + + public string Glyph => Verified ? "\uE930" : "\uEA39"; + + public ICommand OpenDetailsCommand { get; } + + public SignatureInfoItem(string fileName, int index, HWND hWnd, List chain) + { + _fileName = fileName; + _hwndParent = hWnd; + _index = index; + SignChain = chain ?? new List(); + OpenDetailsCommand = new AsyncRelayCommand(DoOpenDetails); + } + + private Task DoOpenDetails() + { + DigitalSignaturesUtil.DisplaySignerInfoDialog(_fileName, _hwndParent, _index); + return Task.CompletedTask; + } + } +} diff --git a/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs b/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs index 93b28ad04429..51bc82a35a73 100644 --- a/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs +++ b/src/Files.App/Helpers/Win32/Win32Helper.Storage.cs @@ -902,13 +902,13 @@ public static SafeFileHandle OpenFileForRead(string filePath, bool readWrite = f (uint)FILE_ACCESS_RIGHTS.FILE_GENERIC_READ | (uint)(readWrite ? FILE_ACCESS_RIGHTS.FILE_GENERIC_WRITE : 0u), (uint)(Win32PInvoke.FILE_SHARE_READ | (readWrite ? 0 : Win32PInvoke.FILE_SHARE_WRITE)), IntPtr.Zero, Win32PInvoke.OPEN_EXISTING, (uint)Win32PInvoke.File_Attributes.BackupSemantics | flags, IntPtr.Zero), true); } - public static bool GetFileDateModified(string filePath, out FILETIME dateModified) + public static bool GetFileDateModified(string filePath, out System.Runtime.InteropServices.ComTypes.FILETIME dateModified) { using var hFile = new SafeFileHandle(Win32PInvoke.CreateFileFromApp(filePath, (uint)FILE_ACCESS_RIGHTS.FILE_GENERIC_READ, Win32PInvoke.FILE_SHARE_READ, IntPtr.Zero, Win32PInvoke.OPEN_EXISTING, (uint)Win32PInvoke.File_Attributes.BackupSemantics, IntPtr.Zero), true); return Win32PInvoke.GetFileTime(hFile.DangerousGetHandle(), out _, out _, out dateModified); } - public static bool SetFileDateModified(string filePath, FILETIME dateModified) + public static bool SetFileDateModified(string filePath, System.Runtime.InteropServices.ComTypes.FILETIME dateModified) { using var hFile = new SafeFileHandle(Win32PInvoke.CreateFileFromApp(filePath, (uint)FILE_ACCESS_RIGHTS.FILE_WRITE_ATTRIBUTES, 0, IntPtr.Zero, Win32PInvoke.OPEN_EXISTING, (uint)Win32PInvoke.File_Attributes.BackupSemantics, IntPtr.Zero), true); return Win32PInvoke.SetFileTime(hFile.DangerousGetHandle(), new(), new(), dateModified); diff --git a/src/Files.App/Helpers/Win32/Win32PInvoke.Methods.cs b/src/Files.App/Helpers/Win32/Win32PInvoke.Methods.cs index 5d700736a2fa..e52a08638811 100644 --- a/src/Files.App/Helpers/Win32/Win32PInvoke.Methods.cs +++ b/src/Files.App/Helpers/Win32/Win32PInvoke.Methods.cs @@ -1,9 +1,8 @@ -// Copyright (c) 2024 Files Community -// Licensed under the MIT License. See the LICENSE. +// Copyright (c) Files Community +// Licensed under the MIT License. using System.IO; using System.Runtime.InteropServices; -using System.Runtime.InteropServices.ComTypes; using System.Text; using Windows.Win32.Foundation; using Windows.Win32.System.Com; @@ -232,17 +231,17 @@ public static extern bool WriteFileEx( [DllImport("api-ms-win-core-file-l1-2-1.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] public static extern bool GetFileTime( [In] IntPtr hFile, - out FILETIME lpCreationTime, - out FILETIME lpLastAccessTime, - out FILETIME lpLastWriteTime + out System.Runtime.InteropServices.ComTypes.FILETIME lpCreationTime, + out System.Runtime.InteropServices.ComTypes.FILETIME lpLastAccessTime, + out System.Runtime.InteropServices.ComTypes.FILETIME lpLastWriteTime ); [DllImport("api-ms-win-core-file-l1-2-1.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] public static extern bool SetFileTime( [In] IntPtr hFile, - in FILETIME lpCreationTime, - in FILETIME lpLastAccessTime, - in FILETIME lpLastWriteTime + in System.Runtime.InteropServices.ComTypes.FILETIME lpCreationTime, + in System.Runtime.InteropServices.ComTypes.FILETIME lpLastAccessTime, + in System.Runtime.InteropServices.ComTypes.FILETIME lpLastWriteTime ); [DllImport("api-ms-win-core-file-l2-1-1.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)] @@ -288,7 +287,7 @@ IntPtr hFindFile [DllImport("api-ms-win-core-timezone-l1-1-0.dll", SetLastError = true)] public static extern bool FileTimeToSystemTime( - ref FILETIME lpFileTime, + ref System.Runtime.InteropServices.ComTypes.FILETIME lpFileTime, out SYSTEMTIME lpSystemTime ); @@ -347,5 +346,9 @@ public static extern int SHGetKnownFolderPath( IntPtr hToken, out IntPtr pszPath ); + + // cryptui.dll + [DllImport("cryptui.dll", SetLastError = true, CharSet = CharSet.Auto)] + public unsafe static extern bool CryptUIDlgViewSignerInfo(CRYPTUI_VIEWSIGNERINFO_STRUCT* pViewInfo); } } diff --git a/src/Files.App/Helpers/Win32/Win32PInvoke.Structs.cs b/src/Files.App/Helpers/Win32/Win32PInvoke.Structs.cs index d54e6ee441e7..d1453d5cd285 100644 --- a/src/Files.App/Helpers/Win32/Win32PInvoke.Structs.cs +++ b/src/Files.App/Helpers/Win32/Win32PInvoke.Structs.cs @@ -3,7 +3,8 @@ using System.IO; using System.Runtime.InteropServices; -using System.Runtime.InteropServices.ComTypes; +using Windows.Win32.Foundation; +using Windows.Win32.Security.Cryptography; namespace Files.App.Helpers { @@ -90,9 +91,9 @@ public struct REPARSE_DATA_BUFFER public struct WIN32_FILE_ATTRIBUTE_DATA { public FileAttributes dwFileAttributes; - public FILETIME ftCreationTime; - public FILETIME ftLastAccessTime; - public FILETIME ftLastWriteTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; } @@ -183,9 +184,9 @@ public struct WIN32_FIND_DATA { public uint dwFileAttributes; - public FILETIME ftCreationTime; - public FILETIME ftLastAccessTime; - public FILETIME ftLastWriteTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime; + public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; @@ -198,5 +199,37 @@ public struct WIN32_FIND_DATA [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName; } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct SignDataHandle + { + public uint dwObjSize; + public CMSG_SIGNER_INFO* pSignerInfo; + public HCERTSTORE hCertStoreHandle; + } + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct CRYPTOAPI_BLOB + { + public uint cbData; + public void* pbData; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public unsafe struct CRYPTUI_VIEWSIGNERINFO_STRUCT + { + public uint dwSize; + public HWND hwndParent; + public uint dwFlags; + public PCSTR szTitle; + public CMSG_SIGNER_INFO* pSignerInfo; + public void* hMsg; + public PCSTR pszOID; + public uint? dwReserved; + public uint cStores; + public HCERTSTORE* rghStores; + public uint cPropPages; + public void* rgPropPages; + } } } diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index fe935a3293a4..7c07b9676f9b 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4273,6 +4273,27 @@ Filename + + Signatures + + + Signature list + + + Issued by: + + + Issued to: + + + Valid from: + + + Valid to: + + + No signature was found. + Show option to open folders in Windows Terminal diff --git a/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs b/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs new file mode 100644 index 000000000000..2c6a15b19bb1 --- /dev/null +++ b/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs @@ -0,0 +1,990 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using System.Runtime.InteropServices; +using Windows.Win32; +using Windows.Win32.Foundation; +using Windows.Win32.Security.Cryptography; +using Windows.Win32.Security.WinTrust; +using static Files.App.Helpers.Win32PInvoke; + +namespace Files.App.Utils.Signatures +{ + public static class DigitalSignaturesUtil + { + // OIDs + private const string szOID_NESTED_SIGNATURE = "1.3.6.1.4.1.311.2.4.1"; + private const string szOID_RSA_counterSign = "1.2.840.113549.1.9.6"; + private const string szOID_RSA_signingTime = "1.2.840.113549.1.9.5"; + private const string szOID_RFC3161_counterSign = "1.3.6.1.4.1.311.3.3.1"; + private const string szOID_OIWSEC_sha1 = "1.3.14.3.2.26"; + private const string szOID_RSA_MD5 = "1.2.840.113549.2.5"; + private const string szOID_NIST_sha256 = "2.16.840.1.101.3.4.2.1"; + + // Flags + private const uint CERT_NAME_SIMPLE_DISPLAY_TYPE = 4; + private const uint CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000; + private const uint PKCS_7_ASN_ENCODING = 0x00010000; + private const uint CRYPT_ASN_ENCODING = 0x00000001; + private const CERT_QUERY_ENCODING_TYPE ENCODING = + CERT_QUERY_ENCODING_TYPE.X509_ASN_ENCODING | CERT_QUERY_ENCODING_TYPE.PKCS_7_ASN_ENCODING; + + private const uint CMSG_SIGNER_INFO_PARAM = 6; + + // Version numbers + private const uint CERT_V1 = 0; + private const uint CERT_V2 = 1; + private const uint CERT_V3 = 2; + + private static readonly byte[] SG_ProtoCoded = [ + 0x30, 0x82 + ]; + + private static readonly byte[] SG_SignedData = [ + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x02 + ]; + + private static readonly IDateTimeFormatter formatter = Ioc.Default.GetRequiredService(); + + public static void LoadItemSignatures( + string filePath, + ObservableCollection signatures, + HWND hWnd, + CancellationToken ct) + { + var signChain = new List(); + GetSignerCertificateInfo(filePath, signChain, ct); + + foreach (var signNode in signChain) + { + if (signNode.CertChain.Count == 0) + continue; + + var signatureInfo = new SignatureInfoItem(filePath, signNode.Index, hWnd, signNode.CertChain) + { + Version = signNode.Version, + IssuedBy = signNode.CertChain[0].IssuedBy, + IssuedTo = signNode.CertChain[0].IssuedTo, + ValidFromTimestamp = signNode.CertChain[0].ValidFrom, + ValidToTimestamp = signNode.CertChain[0].ValidTo, + VerifiedTimestamp = signNode.CounterSign.TimeStamp, + Verified = signNode.IsValid, + }; + signatures.Add(signatureInfo); + } + } + + public unsafe static void DisplaySignerInfoDialog(string filePath, HWND hwndParent, int index) + { + if (string.IsNullOrEmpty(filePath)) + return; + + void* hAuthCryptMsg = null; + var signHandle = new SignDataHandle(); + var signDataChain = new List(); + + try + { + var result = TryGetSignerInfo( + filePath, + out hAuthCryptMsg, + out signHandle.hCertStoreHandle, + out signHandle.pSignerInfo, + out signHandle.dwObjSize + ); + if (!result || signHandle.pSignerInfo is null) + return; + + signDataChain.Add(signHandle); + GetNestedSignerInfo(ref signHandle, signDataChain); + if (index >= signDataChain.Count) + return; + + signHandle = signDataChain[index]; + var issuer = signHandle.pSignerInfo->Issuer; + var pCertContext = PInvoke.CertFindCertificateInStore( + signHandle.hCertStoreHandle, + ENCODING, + 0, + CERT_FIND_FLAGS.CERT_FIND_ISSUER_NAME, + &issuer, + null + ); + if (pCertContext is null) + return; + + var viewInfo = new CRYPTUI_VIEWSIGNERINFO_STRUCT + { + dwSize = (uint)Marshal.SizeOf(), + hwndParent = hwndParent, + dwFlags = 0, + szTitle = (PCSTR)null, + pSignerInfo = signHandle.pSignerInfo, + hMsg = hAuthCryptMsg, + pszOID = (PCSTR)null, + dwReserved = null, + cStores = 1, + rghStores = (HCERTSTORE*)NativeMemory.Alloc((uint)sizeof(void*)), + cPropPages = 0, + rgPropPages = null + }; + *(viewInfo.rghStores) = signHandle.hCertStoreHandle; + + result = CryptUIDlgViewSignerInfo(&viewInfo); + + PInvoke.CertFreeCertificateContext(pCertContext); + } + finally + { + // Since signDataChain contains nested signatures, + // you must release them starting from the last one. + for (int i = signDataChain.Count - 1; i >= 0; i--) + { + if (signDataChain[i].pSignerInfo is not null) + NativeMemory.Free(signDataChain[i].pSignerInfo); + + if (!signDataChain[i].hCertStoreHandle.IsNull) + PInvoke.CertCloseStore(signDataChain[i].hCertStoreHandle, 0); + } + + if (hAuthCryptMsg is not null) + PInvoke.CryptMsgClose(hAuthCryptMsg); + } + } + + private unsafe static bool GetSignerSignatureInfo( + HCERTSTORE hSystemStore, + HCERTSTORE hCertStore, + CERT_CONTEXT* pOrigContext, + ref CERT_CONTEXT* pCurrContext, + SignNodeInfo signNode) + { + var pCertInfo = pCurrContext->pCertInfo; + var certNode = new CertNodeInfoItem(); + + (_, certNode.Version) = CalculateSignVersion(pCertInfo->dwVersion); + GetStringFromCertContext(pCurrContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, certNode); + GetStringFromCertContext(pCurrContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 1, certNode); + + var pft = &(pCertInfo->NotBefore); + certNode.ValidFrom = TimeToString(pft); + pft = &(pCertInfo->NotAfter); + certNode.ValidTo = TimeToString(pft); + + signNode.CertChain.Add(certNode); + + pCurrContext = PInvoke.CertFindCertificateInStore( + hCertStore, + ENCODING, + 0, + CERT_FIND_FLAGS.CERT_FIND_SUBJECT_NAME, + &(pCertInfo->Issuer), + null + ); + + if (pCurrContext is null) + { + pCurrContext = PInvoke.CertFindCertificateInStore( + hSystemStore, + ENCODING, + 0, + CERT_FIND_FLAGS.CERT_FIND_SUBJECT_NAME, + &(pCertInfo->Issuer), + null + ); + } + + if (pCurrContext is null) + return false; + + var result = PInvoke.CertComparePublicKeyInfo( + ENCODING, + &pCurrContext->pCertInfo->SubjectPublicKeyInfo, + &pOrigContext->pCertInfo->SubjectPublicKeyInfo + ); + + return !result; + } + + private unsafe static bool GetSignerCertificateInfo(string fileName, List signChain, CancellationToken ct) + { + var succeded = false; + var authSignData = new SignDataHandle() { dwObjSize = 0, hCertStoreHandle = HCERTSTORE.Null, pSignerInfo = null }; + var signDataChain = new List(); + signChain.Clear(); + + var cert_store_prov_system = (PCSTR)(byte*)10; + var root = "Root"; + var pRoot = &root; + var hSystemStore = PInvoke.CertOpenStore( + cert_store_prov_system, + ENCODING, + HCRYPTPROV_LEGACY.Null, + (CERT_OPEN_STORE_FLAGS)CERT_SYSTEM_STORE_CURRENT_USER, + pRoot + ); + if (hSystemStore == IntPtr.Zero) + return false; + + void* hAuthCryptMsg = null; + var result = TryGetSignerInfo( + fileName, + out hAuthCryptMsg, + out authSignData.hCertStoreHandle, + out authSignData.pSignerInfo, + out authSignData.dwObjSize + ); + + if (hAuthCryptMsg is not null) + { + PInvoke.CryptMsgClose(hAuthCryptMsg); + hAuthCryptMsg = null; + } + + if (!result) + { + if (authSignData.hCertStoreHandle != IntPtr.Zero) + PInvoke.CertCloseStore(authSignData.hCertStoreHandle, 0); + + PInvoke.CertCloseStore(hSystemStore, 0); + return false; + } + + signDataChain.Add(authSignData); + GetNestedSignerInfo(ref authSignData, signDataChain); + + for (var i = 0; i < signDataChain.Count; i++) + { + if (ct.IsCancellationRequested) + { + PInvoke.CertCloseStore(hSystemStore, 0); + return false; + } + + CERT_CONTEXT* pCurrContext = null; + CMSG_SIGNER_INFO* pCounterSigner = null; + var signNode = new SignNodeInfo(); + + GetCounterSignerInfo(signDataChain[i].pSignerInfo, &pCounterSigner); + if (pCounterSigner is not null) + GetCounterSignerData(pCounterSigner, signNode.CounterSign); + else + GetGeneralizedTimeStamp(signDataChain[i].pSignerInfo, signNode.CounterSign); + + var pszObjId = signDataChain[i].pSignerInfo->HashAlgorithm.pszObjId; + var szObjId = new string((sbyte*)(byte*)pszObjId); + CalculateDigestAlgorithm(szObjId, signNode); + (_, signNode.Version) = CalculateSignVersion(signDataChain[i].pSignerInfo->dwVersion); + + + var pIssuer = &(signDataChain[i].pSignerInfo->Issuer); + pCurrContext = PInvoke.CertFindCertificateInStore( + signDataChain[i].hCertStoreHandle, + ENCODING, + 0, + CERT_FIND_FLAGS.CERT_FIND_ISSUER_NAME, + pIssuer, + null + ); + + result = pCurrContext is not null; + while (result) + { + var pOrigContext = pCurrContext; + result = GetSignerSignatureInfo( + hSystemStore, + signDataChain[i].hCertStoreHandle, + pOrigContext, + ref pCurrContext, + signNode + ); + PInvoke.CertFreeCertificateContext(pOrigContext); + } + + if (pCurrContext is not null) + PInvoke.CertFreeCertificateContext(pCurrContext); + + if (pCounterSigner is not null) + NativeMemory.Free(pCounterSigner); + + if (signDataChain[i].pSignerInfo is not null) + NativeMemory.Free(signDataChain[i].pSignerInfo); + + if (!signDataChain[i].hCertStoreHandle.IsNull) + PInvoke.CertCloseStore(signDataChain[i].hCertStoreHandle, 0); + + succeded = true; + signNode.IsValid = VerifyySignature(fileName); + signNode.Index = i; + signChain.Add(signNode); + } + + PInvoke.CertCloseStore(hSystemStore, 0); + return succeded; + } + + private unsafe static bool VerifyySignature(string certPath) + { + int res = 1; + var sFileInfo = (uint)Marshal.SizeOf(); + var sData = (uint)Marshal.SizeOf(); + var actionGuid = new Guid("{00AAC56B-CD44-11D0-8CC2-00C04FC295EE}"); + + fixed (char* pCertPath = certPath) + { + var fileInfo = new WINTRUST_FILE_INFO + { + cbStruct = sFileInfo, + pcwszFilePath = (PCWSTR)pCertPath, + hFile = (HANDLE)null, + pgKnownSubject = null + }; + + var wintrustData = new WINTRUST_DATA + { + cbStruct = sData, + pPolicyCallbackData = null, + pSIPClientData = null, + dwUIChoice = WINTRUST_DATA_UICHOICE.WTD_UI_NONE, + fdwRevocationChecks = 0, // No revocation checking + dwUnionChoice = WINTRUST_DATA_UNION_CHOICE.WTD_CHOICE_FILE, + dwStateAction = WINTRUST_DATA_STATE_ACTION.WTD_STATEACTION_VERIFY, + hWVTStateData = (HANDLE)null, + pwszURLReference = null, + dwUIContext = 0, + Anonymous = new WINTRUST_DATA._Anonymous_e__Union + { + pFile = &fileInfo, + }, + }; + + res = PInvoke.WinVerifyTrust((HWND)null, ref actionGuid, &wintrustData); + + // Release hWVTStateData + wintrustData.dwStateAction = WINTRUST_DATA_STATE_ACTION.WTD_STATEACTION_CLOSE; + PInvoke.WinVerifyTrust((HWND)null, ref actionGuid, &wintrustData); + } + + return res == 0; + } + + private unsafe static bool TryGetSignerInfo( + string fileName, + out void* hMsg, + out HCERTSTORE hCertStore, + out CMSG_SIGNER_INFO* pSignerInfo, + out uint signerSize, + uint index = 0) + { + CERT_QUERY_ENCODING_TYPE encoding = 0; + CERT_QUERY_CONTENT_TYPE dummy = 0; + CERT_QUERY_FORMAT_TYPE dummy2 = 0; + void* pDummy = null; + BOOL result = false; + + HCERTSTORE hCertStoreTmp = HCERTSTORE.Null; + void* hMsgTmp = null; + + fixed (char* pFileName = fileName) + { + result = PInvoke.CryptQueryObject( + CERT_QUERY_OBJECT_TYPE.CERT_QUERY_OBJECT_FILE, + pFileName, + CERT_QUERY_CONTENT_TYPE_FLAGS.CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED, + CERT_QUERY_FORMAT_TYPE_FLAGS.CERT_QUERY_FORMAT_FLAG_BINARY, + 0, + &encoding, + &dummy, + &dummy2, + &hCertStoreTmp, + &hMsgTmp, + &pDummy + ); + } + + hCertStore = hCertStoreTmp; + hMsg = hMsgTmp; + pSignerInfo = null; + signerSize = 0; + + if (!result) + return false; + + var vpSignerInfo = (void*)pSignerInfo; + result = CustomCryptMsgGetParam( + hMsg, + CMSG_SIGNER_INFO_PARAM, + index, + ref vpSignerInfo, + ref signerSize + ); + pSignerInfo = (CMSG_SIGNER_INFO*)vpSignerInfo; + + return result; + } + + private unsafe static bool GetCounterSignerInfo( + CMSG_SIGNER_INFO* pSignerInfo, + CMSG_SIGNER_INFO** pTargetSigner) + { + uint objSize = 0; + if (pSignerInfo is null || pTargetSigner is null) + return false; + + try + { + *pTargetSigner = null; + CRYPT_ATTRIBUTE* attr = null; + var res = TryGetUnauthAttr(pSignerInfo, szOID_RSA_counterSign, ref attr); + if (!res || attr is null) + return false; + + var pkcs7_signer_info = (PCSTR)(byte*)500; + var result = PInvoke.CryptDecodeObject( + ENCODING, + pkcs7_signer_info, + attr->rgValue[0].pbData, + attr->rgValue[0].cbData, + 0, + null, + &objSize + ); + if (!result) + return false; + + *pTargetSigner = (CMSG_SIGNER_INFO*)NativeMemory.Alloc(objSize); + if (*pTargetSigner is null) + return false; + + result = PInvoke.CryptDecodeObject( + ENCODING, + pkcs7_signer_info, + attr->rgValue[0].pbData, + attr->rgValue[0].cbData, + 0, + *pTargetSigner, + &objSize + ); + if (!result) + return false; + } + finally + { + } + + return true; + } + + private unsafe static bool GetCounterSignerData(CMSG_SIGNER_INFO* pSignerInfo, SignCounterSign counterSign) + { + CRYPT_ATTRIBUTE* attr = null; + var res = TryGetAuthAttr(pSignerInfo, szOID_RSA_signingTime, ref attr); + if (!res || attr is null) + return false; + + var data = (uint)Marshal.SizeOf(); + var ft = (System.Runtime.InteropServices.ComTypes.FILETIME*)NativeMemory.Alloc(data); + try + { + var pkcs_utc_time = (PCSTR)(byte*)17; + var result = PInvoke.CryptDecodeObject( + ENCODING, + pkcs_utc_time, + attr->rgValue[0].pbData, + attr->rgValue[0].cbData, + 0, + ft, + &data + ); + if (!result) + return false; + + PInvoke.FileTimeToLocalFileTime(*ft, out var lft); + PInvoke.FileTimeToSystemTime(lft, out var st); + counterSign.TimeStamp = TimeToString(null, &st); + + return true; + } + finally + { + NativeMemory.Free(ft); + } + } + + private unsafe static bool ParseDERFindType( + int typeSearch, + byte* pbSignature, + uint size, + ref uint positionFound, + ref uint lengthFound) + { + uint position = 0; + uint sizeFound = 0; + uint bytesParsed = 0; + var iType = 0; + var iClass = 0; + positionFound = 0; + lengthFound = 0; + if (pbSignature is null) + return false; + + while (size > position) + { + if (!SafeToReadNBytes(size, position, 2)) + return false; + + ParseDERType(pbSignature[position], ref iType, ref iClass); + switch (iType) + { + case 0x05: // Null + ++position; + if (pbSignature[position] != 0x00) + return false; + + ++position; + break; + + case 0x06: // Object Identifier + ++position; + if (!SafeToReadNBytes(size - position, 1, pbSignature[position])) + return false; + + position += 1u + pbSignature[position]; + break; + + case 0x00: // ? + case 0x01: // Boolean + case 0x02: // Integer + case 0x03: // Bit String + case 0x04: // Octet String + case 0x0A: // enumerated + case 0x0C: // UTF8string + case 0x13: // printable string + case 0x14: // T61 string + case 0x16: // IA5String + case 0x17: // UTC time + case 0x18: // Generalized time + case 0x1E: // BMPstring + ++position; + if (!ParseDERSize( + pbSignature + position, + size - position, + ref sizeFound, + ref bytesParsed)) + { + return false; + } + + position += bytesParsed; + if (!SafeToReadNBytes(size - position, 0, sizeFound)) + return false; + + if (typeSearch == iType) + { + positionFound = position; + lengthFound = sizeFound; + + return true; + } + + position += sizeFound; + break; + + case 0x20: // context specific + case 0x21: // context specific + case 0x23: // context specific + case 0x24: // context specific + case 0x30: // sequence + case 0x31: // set + position++; + if (!ParseDERSize( + pbSignature + position, + size - position, + ref sizeFound, + ref bytesParsed)) + { + return false; + } + + position += bytesParsed; + break; + + case 0x22: // ? + position += 2; + break; + + default: + return false; + } + } + + return false; + } + + private unsafe static bool GetGeneralizedTimeStamp( + CMSG_SIGNER_INFO* pSignerInfo, + SignCounterSign counter) + { + uint positionFound = 0; + uint lengthFound = 0; + CRYPT_ATTRIBUTE* attr = null; + var res = TryGetUnauthAttr(pSignerInfo, szOID_RFC3161_counterSign, ref attr); + if (!res || attr is null) + return false; + + var result = ParseDERFindType( + 0x04, + attr->rgValue[0].pbData, + attr->rgValue[0].cbData, + ref positionFound, + ref lengthFound); + if (!result) + return false; + + // Counter Signer Timstamp + var pbOctetString = attr->rgValue[0].pbData + positionFound; + counter.TimeStamp = GetTimeStampFromDER(pbOctetString, lengthFound, ref positionFound); + + return true; + } + + private unsafe static string GetTimeStampFromDER(byte* pbOctetString, uint lengthFound, ref uint positionFound) + { + var result = ParseDERFindType( + 0x18, + pbOctetString, + lengthFound, + ref positionFound, + ref lengthFound + ); + if (!result) + return string.Empty; + + var st = new Windows.Win32.Foundation.SYSTEMTIME(); + var buffer = new string((sbyte*)(pbOctetString + positionFound)); + + _ = ushort.TryParse(buffer.AsSpan(0, 4), out st.wYear); + _ = ushort.TryParse(buffer.AsSpan(4, 2), out st.wMonth); + _ = ushort.TryParse(buffer.AsSpan(6, 2), out st.wDay); + _ = ushort.TryParse(buffer.AsSpan(8, 2), out st.wHour); + _ = ushort.TryParse(buffer.AsSpan(10, 2), out st.wMinute); + _ = ushort.TryParse(buffer.AsSpan(12, 2), out st.wSecond); + _ = ushort.TryParse(buffer.AsSpan(15, 3), out st.wMilliseconds); + + PInvoke.SystemTimeToFileTime(st, out var fft); + PInvoke.FileTimeToLocalFileTime(fft, out var lft); + PInvoke.FileTimeToSystemTime(lft, out var lst); + var timestamp = TimeToString(null, &lst); + + return timestamp; + } + + private unsafe static bool GetStringFromCertContext(CERT_CONTEXT* pCertContext, uint dwType, uint flag, CertNodeInfoItem info) + { + var data = PInvoke.CertGetNameString(pCertContext, dwType, flag, null, (PWSTR)null, 0); + if (data == 0) + { + PInvoke.CertFreeCertificateContext(pCertContext); + return false; + } + + var pszTempName = (PWSTR)NativeMemory.Alloc(data * sizeof(char)); + if (pszTempName.Value is null) + { + PInvoke.CertFreeCertificateContext(pCertContext); + NativeMemory.Free(pszTempName); + return false; + } + + data = PInvoke.CertGetNameString(pCertContext, dwType, flag, null, pszTempName, data); + if (data == 0) + { + NativeMemory.Free(pszTempName); + return false; + } + + var name = pszTempName.AsSpan().ToString(); + NativeMemory.Free(pszTempName); + if (flag == 0) + info.IssuedTo = StripString(name); + else + info.IssuedBy = StripString(name); + + return true; + } + + private unsafe static bool TryGetUnauthAttr(CMSG_SIGNER_INFO* pSignerInfo, string oid, ref CRYPT_ATTRIBUTE* attr) + { + int n = 0; + attr = null; + for (; n < pSignerInfo->UnauthAttrs.cAttr; n++) + { + attr = &pSignerInfo->UnauthAttrs.rgAttr[n]; + var objId = new string((sbyte*)(byte*)attr->pszObjId); + if (objId == oid) + break; + } + + return n < pSignerInfo->UnauthAttrs.cAttr; + } + + private unsafe static bool TryGetAuthAttr(CMSG_SIGNER_INFO* pSignerInfo, string oid, ref CRYPT_ATTRIBUTE* attr) + { + int n = 0; + attr = null; + for (; n < pSignerInfo->AuthAttrs.cAttr; n++) + { + attr = &pSignerInfo->AuthAttrs.rgAttr[n]; + var objId = new string((sbyte*)(byte*)attr->pszObjId); + if (objId == oid) + break; + } + + return n < pSignerInfo->AuthAttrs.cAttr; + } + + private unsafe static bool GetNestedSignerInfo(ref SignDataHandle AuthSignData, List NestedChain) + { + var succeded = false; + void* hNestedMsg = null; + if (AuthSignData.pSignerInfo is null) + return false; + + try + { + CRYPT_ATTRIBUTE* attr = null; + var res = TryGetUnauthAttr(AuthSignData.pSignerInfo, szOID_NESTED_SIGNATURE, ref attr); + if (!res || attr is null) + return false; + + var cbCurrData = attr->rgValue[0].cbData; + var pbCurrData = attr->rgValue[0].pbData; + var upperBound = AuthSignData.pSignerInfo + AuthSignData.dwObjSize; + while (pbCurrData > AuthSignData.pSignerInfo && pbCurrData < upperBound) + { + var nestedHandle = new SignDataHandle() { dwObjSize = 0, pSignerInfo = null, hCertStoreHandle = HCERTSTORE.Null }; + if (!Memcmp(pbCurrData, SG_ProtoCoded) || + !Memcmp(pbCurrData + 6, SG_SignedData)) + { + break; + } + + hNestedMsg = PInvoke.CryptMsgOpenToDecode( + PKCS_7_ASN_ENCODING | CRYPT_ASN_ENCODING, + 0, + 0, + HCRYPTPROV_LEGACY.Null, + null, + null + ); + if (hNestedMsg is null) + return false; + + cbCurrData = XCHWordLitend(*(ushort*)(pbCurrData + 2)) + 4u; + var pbNextData = pbCurrData; + pbNextData += EightByteAlign(cbCurrData, (long)pbCurrData); + var result = PInvoke.CryptMsgUpdate(hNestedMsg, pbCurrData, cbCurrData, true); + pbCurrData = pbNextData; + if (!result) + continue; + + var pSignerInfo = (void*)nestedHandle.pSignerInfo; + result = CustomCryptMsgGetParam( + hNestedMsg, + CMSG_SIGNER_INFO_PARAM, + 0, + ref pSignerInfo, + ref nestedHandle.dwObjSize + ); + nestedHandle.pSignerInfo = (CMSG_SIGNER_INFO*)pSignerInfo; + if (!result) + continue; + + var cert_store_prov_msg = (PCSTR)(byte*)1; + nestedHandle.hCertStoreHandle = PInvoke.CertOpenStore( + cert_store_prov_msg, + ENCODING, + HCRYPTPROV_LEGACY.Null, + 0, + hNestedMsg + ); + + succeded = true; + NestedChain.Add(nestedHandle); + } + } + finally + { + if (hNestedMsg is not null) + PInvoke.CryptMsgClose(hNestedMsg); + } + + return succeded; + } + + private unsafe static bool CustomCryptMsgGetParam( + void* hCryptMsg, + uint paramType, + uint index, + ref void* pParam, + ref uint outSize) + { + bool result; + uint size = 0; + + result = PInvoke.CryptMsgGetParam( + hCryptMsg, + paramType, + index, + null, + ref size + ); + if (!result) + return false; + + pParam = NativeMemory.Alloc(size); + if (pParam is null) + return false; + + result = PInvoke.CryptMsgGetParam( + hCryptMsg, + paramType, + index, + pParam, + ref size + ); + if (!result) + return false; + + outSize = size; + return true; + } + + private static ushort XCHWordLitend(uint num) + => (ushort)(((((ushort)num) & 0xFF00) >> 8) | (((ushort)num) & 0x00FF) << 8); + + private static long EightByteAlign(long offset, long b) + => ((offset + b + 7) & 0xFFFFFFF8L) - (b & 0xFFFFFFF8L); + + private unsafe static bool Memcmp(byte* ptr1, byte[] arr) + { + for (var i = 0; i < arr.Length; i++) + { + if (ptr1[i] != arr[i]) + return false; + } + + return true; + } + + private static (bool, string) CalculateSignVersion(uint versionNumber) + { + var res = versionNumber switch + { + CERT_V1 => "V1", + CERT_V2 => "V2", + CERT_V3 => "V3", + _ => "Unknown", + }; + return (true, res); + } + + private static bool CalculateDigestAlgorithm(string pszObjId, SignNodeInfo info) + { + if (string.IsNullOrWhiteSpace(pszObjId)) + info.DigestAlgorithm = "Unknown"; + else if (pszObjId == szOID_OIWSEC_sha1) + info.DigestAlgorithm = "SHA1"; + else if (pszObjId == szOID_RSA_MD5) + info.DigestAlgorithm = "MD5"; + else if (pszObjId == szOID_NIST_sha256) + info.DigestAlgorithm = "SHA256"; + else + info.DigestAlgorithm = StripString(pszObjId); + + return true; + } + + private static bool SafeToReadNBytes(uint size, uint start, uint requestSize) + => size - start >= requestSize; + + private static void ParseDERType(byte bIn, ref int iType, ref int iClass) + { + iType = bIn & 0x3F; + iClass = bIn >> 6; + } + + private unsafe static uint ReadNumberFromNBytes(byte* pbSignature, uint start, uint requestSize) + { + uint number = 0; + for (var i = 0; i < requestSize; i++) + number = number * 0x100 + pbSignature[start + i]; + + return number; + } + + private unsafe static bool ParseDERSize(byte* pbSignature, uint size, ref uint sizeFound, ref uint bytesParsed) + { + if (pbSignature[0] > 0x80 && !SafeToReadNBytes(size, 1, pbSignature[0] - 0x80u)) + return false; + + if (pbSignature[0] <= 0x80) + { + sizeFound = pbSignature[0]; + bytesParsed = 1; + } + else + { + sizeFound = ReadNumberFromNBytes(pbSignature, 1, pbSignature[0] - 0x80u); + bytesParsed = pbSignature[0] - 0x80u + 1; + } + + return true; + } + + private static string StripString(string? str) + { + return str? + .Replace("\t", "")? + .Replace("\n", "")? + .Replace("\r", "")? + .Replace(((char)0).ToString(), "") ?? string.Empty; + } + + private unsafe static string TimeToString( + System.Runtime.InteropServices.ComTypes.FILETIME* pftIn, + Windows.Win32.Foundation.SYSTEMTIME* pstIn = null) + { + if (pstIn is null) + { + if (pftIn is null) + return string.Empty; + + PInvoke.FileTimeToSystemTime(*pftIn, out var sysTime); + pstIn = &sysTime; + } + + var date = new DateTime( + pstIn->wYear, pstIn->wMonth, pstIn->wDay, + pstIn->wHour, pstIn->wMinute, pstIn->wSecond + ); + + return formatter.ToLongLabel(date); + } + + class SignCounterSign + { + public string TimeStamp { get; set; } = string.Empty; + } + + class SignNodeInfo + { + public bool IsValid { get; set; } = false; + public string DigestAlgorithm { get; set; } = string.Empty; + public string Version { get; set; } = string.Empty; + public int Index { get; set; } = 0; + public SignCounterSign CounterSign { get; set; } = new(); + public List CertChain { get; set; } = []; + } + } +} diff --git a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs index c95b9b60b056..c08207483881 100644 --- a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs +++ b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs @@ -40,7 +40,8 @@ public NavigationViewItemButtonStyleItem SelectedNavigationViewItem PropertiesNavigationViewItemType.Security => typeof(SecurityPage), PropertiesNavigationViewItemType.Customization => typeof(CustomizationPage), PropertiesNavigationViewItemType.Compatibility => typeof(CompatibilityPage), - PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), + PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), + PropertiesNavigationViewItemType.Signatures => typeof(SignaturesPage), _ => typeof(GeneralPage), }; diff --git a/src/Files.App/ViewModels/Properties/SignaturesViewModel.cs b/src/Files.App/ViewModels/Properties/SignaturesViewModel.cs new file mode 100644 index 000000000000..4dc1200a76e0 --- /dev/null +++ b/src/Files.App/ViewModels/Properties/SignaturesViewModel.cs @@ -0,0 +1,37 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Files.App.Utils.Signatures; +using Microsoft.UI.Windowing; +using Windows.Win32.Foundation; + +namespace Files.App.ViewModels.Properties +{ + public sealed partial class SignaturesViewModel : ObservableObject, IDisposable + { + private CancellationTokenSource _cancellationTokenSource; + + public ObservableCollection Signatures { get; set; } + + public bool NoSignatureFound => Signatures.Count == 0; + + public SignaturesViewModel(ListedItem item, AppWindow appWindow) + { + _cancellationTokenSource = new(); + Signatures = new(); + var hWnd = new HWND(Microsoft.UI.Win32Interop.GetWindowFromWindowId(appWindow.Id)); + Signatures.CollectionChanged += (s, e) => OnPropertyChanged(nameof(NoSignatureFound)); + DigitalSignaturesUtil.LoadItemSignatures( + item.ItemPath, + Signatures, + hWnd, + _cancellationTokenSource.Token + ); + } + + public void Dispose() + { + _cancellationTokenSource.Cancel(); + } + } +} diff --git a/src/Files.App/ViewModels/Settings/AboutViewModel.cs b/src/Files.App/ViewModels/Settings/AboutViewModel.cs index 13ae41d4f00b..e84cc061182a 100644 --- a/src/Files.App/ViewModels/Settings/AboutViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AboutViewModel.cs @@ -79,6 +79,7 @@ public AboutViewModel() new ("https://github.com/microsoft/CsWinRT", "CsWinRT"), new ("https://github.com/GihanSoft/NaturalStringComparer", "NaturalStringComparer"), new ("https://github.com/dongle-the-gadget/GuidRVAGen", "Dongle.GuidRVAGen"), + new ("https://github.com/leeqwind/PESignAnalyzer", "PESignAnalyzer"), ]; CopyAppVersionCommand = new RelayCommand(CopyAppVersion); diff --git a/src/Files.App/Views/Properties/SignaturesPage.xaml b/src/Files.App/Views/Properties/SignaturesPage.xaml new file mode 100644 index 000000000000..37c51a6ac4ea --- /dev/null +++ b/src/Files.App/Views/Properties/SignaturesPage.xaml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +