diff --git a/src/Files/Filesystem/Search/FolderSearch.cs b/src/Files/Filesystem/Search/FolderSearch.cs index bebf1ab85fb9..ac8ea38994f7 100644 --- a/src/Files/Filesystem/Search/FolderSearch.cs +++ b/src/Files/Filesystem/Search/FolderSearch.cs @@ -207,9 +207,13 @@ private async Task SearchTagsAsync(string folder, IList results, Can { var isSystem = ((FileAttributes)findData.dwFileAttributes & FileAttributes.System) == FileAttributes.System; var isHidden = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden; - - bool shouldBeListed = !isHidden || (UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden)); - + var startWithDot = findData.cFileName.StartsWith("."); + + bool shouldBeListed = (!isHidden || + (UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && + (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) && + (!startWithDot || UserSettingsService.PreferencesSettingsService.ShowDotFiles); + if (shouldBeListed) { var item = GetListedItemAsync(match.FilePath, findData); @@ -297,10 +301,13 @@ await Task.Run(() => var isSystem = ((FileAttributes)findData.dwFileAttributes & FileAttributes.System) == FileAttributes.System; var isHidden = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden; - bool shouldBeListed = hiddenOnly ? - isHidden && (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden) : - !isHidden || (UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden)); + var startWithDot = findData.cFileName.StartsWith("."); + bool shouldBeListed = (hiddenOnly ? + isHidden && (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden) : + !isHidden || (UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && (!isSystem || !UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) && + (!startWithDot || UserSettingsService.PreferencesSettingsService.ShowDotFiles); + if (shouldBeListed) { var item = GetListedItemAsync(itemPath, findData); diff --git a/src/Files/Filesystem/StorageEnumerators/Win32StorageEnumerator.cs b/src/Files/Filesystem/StorageEnumerators/Win32StorageEnumerator.cs index 704cf27fe9a6..7fb2f2f3b9a0 100644 --- a/src/Files/Filesystem/StorageEnumerators/Win32StorageEnumerator.cs +++ b/src/Files/Filesystem/StorageEnumerators/Win32StorageEnumerator.cs @@ -53,7 +53,11 @@ public static async Task> ListEntries( { var isSystem = ((FileAttributes)findData.dwFileAttributes & FileAttributes.System) == FileAttributes.System; var isHidden = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden; - if (!isHidden || (userSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && (!isSystem || !userSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) + var startWithDot = findData.cFileName.StartsWith("."); + if ((!isHidden || + (userSettingsService.PreferencesSettingsService.AreHiddenItemsVisible && + (!isSystem || !userSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) && + (!startWithDot || userSettingsService.PreferencesSettingsService.ShowDotFiles)) { if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) != FileAttributes.Directory) { diff --git a/src/Files/Helpers/RegistryToJsonSettingsMerger.cs b/src/Files/Helpers/RegistryToJsonSettingsMerger.cs index 5201731c3e17..b7940e43cfab 100644 --- a/src/Files/Helpers/RegistryToJsonSettingsMerger.cs +++ b/src/Files/Helpers/RegistryToJsonSettingsMerger.cs @@ -31,6 +31,7 @@ public static void MergeSettings() userSettingsService.PreferencesSettingsService.ShowFileExtensions = appSettings.Get(true, "ShowFileExtensions"); userSettingsService.PreferencesSettingsService.AreHiddenItemsVisible = appSettings.Get(false, "AreHiddenItemsVisible"); userSettingsService.PreferencesSettingsService.AreSystemItemsHidden = appSettings.Get(true, "AreSystemItemsHidden"); + userSettingsService.PreferencesSettingsService.ShowDotFiles = appSettings.Get(false, "ShowDotFiles"); userSettingsService.PreferencesSettingsService.ListAndSortDirectoriesAlongsideFiles = appSettings.Get(false, "ListAndSortDirectoriesAlongsideFiles"); userSettingsService.PreferencesSettingsService.OpenFilesWithOneClick = appSettings.Get(false, "OpenItemsWithOneClick"); userSettingsService.PreferencesSettingsService.OpenFoldersWithOneClick = appSettings.Get(false, "OpenItemsWithOneClick"); diff --git a/src/Files/MultilingualResources/Files.es-ES.xlf b/src/Files/MultilingualResources/Files.es-ES.xlf index 8a731e300e52..4521959f62d4 100644 --- a/src/Files/MultilingualResources/Files.es-ES.xlf +++ b/src/Files/MultilingualResources/Files.es-ES.xlf @@ -2778,11 +2778,15 @@ Show hidden files and folders Mostrar archivos y carpetas ocultos - + Hide protected operating system files (Recommended) Ocultar archivos protegidos del sistema operativo (recomendado) + + Show dot files + Mostrar archivos que comienzan con un punto + Open files with a single click Abrir elementos con un solo clic @@ -3522,4 +3526,4 @@ Utilizamos App Center para hacer un seguimiento del uso de la aplicación, encon - \ No newline at end of file + diff --git a/src/Files/MultilingualResources/Files.it-IT.xlf b/src/Files/MultilingualResources/Files.it-IT.xlf index 64141c9ec0dd..090e7f12f426 100644 --- a/src/Files/MultilingualResources/Files.it-IT.xlf +++ b/src/Files/MultilingualResources/Files.it-IT.xlf @@ -2783,6 +2783,10 @@ Hide protected operating system files (Recommended) Nascondi file protetti e di sistema (Raccomandato) + + Show dot files + Mostra file e cartelle che iniziano con un punto + Open files with a single click Apri i file con un solo click diff --git a/src/Files/Services/IPreferencesSettingsService.cs b/src/Files/Services/IPreferencesSettingsService.cs index f3b63183dbae..3d348b457eab 100644 --- a/src/Files/Services/IPreferencesSettingsService.cs +++ b/src/Files/Services/IPreferencesSettingsService.cs @@ -29,7 +29,12 @@ public interface IPreferencesSettingsService : IBaseSettingsService, INotifyProp /// Gets or sets a value indicating whether or not system items should be visible. /// bool AreSystemItemsHidden { get; set; } - + + /// + /// Gets or sets a value indicating whether or not to display dot files. + /// + bool ShowDotFiles{ get; set; } + /// /// Gets or sets a value indicating whether or not files should be sorted together with folders. /// diff --git a/src/Files/Services/Implementation/PreferencesSettingsService.cs b/src/Files/Services/Implementation/PreferencesSettingsService.cs index cedf42838d44..b076dc308816 100644 --- a/src/Files/Services/Implementation/PreferencesSettingsService.cs +++ b/src/Files/Services/Implementation/PreferencesSettingsService.cs @@ -41,6 +41,12 @@ public bool AreSystemItemsHidden get => Get(true); set => Set(value); } + + public bool ShowDotFiles + { + get => Get(false); + set => Set(value); + } public bool ListAndSortDirectoriesAlongsideFiles { @@ -141,6 +147,7 @@ public override void RaiseOnSettingChangedEvent(object sender, EventArguments.Se case nameof(ShowFileExtensions): case nameof(AreHiddenItemsVisible): case nameof(AreSystemItemsHidden): + case nameof(ShowDotFiles): case nameof(ListAndSortDirectoriesAlongsideFiles): case nameof(OpenFilesWithOneClick): case nameof(OpenFoldersWithOneClick): @@ -167,6 +174,7 @@ public void ReportToAppCenter() Analytics.TrackEvent($"{nameof(ShowFileExtensions)}, {ShowFileExtensions}"); Analytics.TrackEvent($"{nameof(AreHiddenItemsVisible)}, {AreHiddenItemsVisible}"); Analytics.TrackEvent($"{nameof(AreSystemItemsHidden)}, {AreSystemItemsHidden}"); + Analytics.TrackEvent($"{nameof(ShowDotFiles)}, {ShowDotFiles}"); Analytics.TrackEvent($"{nameof(ListAndSortDirectoriesAlongsideFiles)}, {ListAndSortDirectoriesAlongsideFiles}"); Analytics.TrackEvent($"{nameof(OpenFilesWithOneClick)}, {OpenFilesWithOneClick}"); Analytics.TrackEvent($"{nameof(OpenFoldersWithOneClick)}, {OpenFoldersWithOneClick}"); diff --git a/src/Files/Strings/en-US/Resources.resw b/src/Files/Strings/en-US/Resources.resw index 68630b60381f..ecc19a352d1b 100644 --- a/src/Files/Strings/en-US/Resources.resw +++ b/src/Files/Strings/en-US/Resources.resw @@ -231,6 +231,9 @@ Show hidden files and folders + + Show dot files + Experimental @@ -2744,4 +2747,4 @@ We use App Center to track which settings are being used, find bugs, and fix cra Update Files - \ No newline at end of file + diff --git a/src/Files/ViewModels/ItemViewModel.cs b/src/Files/ViewModels/ItemViewModel.cs index 07b0f59ddd02..db7721d41edf 100644 --- a/src/Files/ViewModels/ItemViewModel.cs +++ b/src/Files/ViewModels/ItemViewModel.cs @@ -386,6 +386,7 @@ private async void UserSettingsService_OnSettingChangedEvent(object sender, Sett case nameof(UserSettingsService.PreferencesSettingsService.ShowFileExtensions): case nameof(UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible): case nameof(UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden): + case nameof(UserSettingsService.PreferencesSettingsService.ShowDotFiles): case nameof(UserSettingsService.PreferencesSettingsService.AreFileTagsEnabled): case nameof(UserSettingsService.PreferencesSettingsService.ShowFolderSize): await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(() => @@ -2121,7 +2122,11 @@ private async Task AddFileOrFolderAsync(string fileOrFolderPath, str var isSystem = ((FileAttributes)findData.dwFileAttributes & FileAttributes.System) == FileAttributes.System; var isHidden = ((FileAttributes)findData.dwFileAttributes & FileAttributes.Hidden) == FileAttributes.Hidden; - if (isHidden && (!UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible || (isSystem && UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) + var startWithDot = findData.cFileName.StartsWith("."); + if ((isHidden && + (!UserSettingsService.PreferencesSettingsService.AreHiddenItemsVisible || + (isSystem && UserSettingsService.PreferencesSettingsService.AreSystemItemsHidden))) || + (startWithDot && !UserSettingsService.PreferencesSettingsService.ShowDotFiles)) { // Do not add to file list if hidden/system attribute is set and system/hidden file are not to be shown return null; diff --git a/src/Files/ViewModels/SettingsViewModels/PreferencesViewModel.cs b/src/Files/ViewModels/SettingsViewModels/PreferencesViewModel.cs index fe024c848546..baedd6d77424 100644 --- a/src/Files/ViewModels/SettingsViewModels/PreferencesViewModel.cs +++ b/src/Files/ViewModels/SettingsViewModels/PreferencesViewModel.cs @@ -528,6 +528,19 @@ public bool AreSystemItemsHidden } } } + + public bool ShowDotFiles + { + get => UserSettingsService.PreferencesSettingsService.ShowDotFiles; + set + { + if (value != UserSettingsService.PreferencesSettingsService.ShowDotFiles) + { + UserSettingsService.PreferencesSettingsService.ShowDotFiles = value; + OnPropertyChanged(); + } + } + } public bool ShowFileExtensions { @@ -622,4 +635,4 @@ public void Dispose() Dispose(); } } -} \ No newline at end of file +} diff --git a/src/Files/Views/SettingsPages/Preferences.xaml b/src/Files/Views/SettingsPages/Preferences.xaml index 94945069db36..57c1bc3ea2f2 100644 --- a/src/Files/Views/SettingsPages/Preferences.xaml +++ b/src/Files/Views/SettingsPages/Preferences.xaml @@ -151,7 +151,17 @@ IsOn="{Binding AreHiddenItemsVisible, Mode=TwoWay}" Style="{StaticResource RightAlignedToggleSwitchStyle}" /> - + + + + + + + + @@ -346,4 +356,4 @@ VerticalAlignment="Bottom" ShowDialog="{Binding ShowRestartControl, Mode=TwoWay}" /> - \ No newline at end of file +