Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 12 additions & 22 deletions src/Files.App/Helpers/FileExtensionHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ public static class FileExtensionHelpers
/// <param name="fileExtensionToCheck">The file extension to check.</param>
/// <returns><c>true</c> if the fileExtensionToCheck is an image;
/// otherwise, <c>false</c>.</returns>
public static bool IsImageFile(string fileExtensionToCheck)
public static bool IsImageFile(string? fileExtensionToCheck)
{
if (string.IsNullOrEmpty(fileExtensionToCheck))
{
if (string.IsNullOrWhiteSpace(fileExtensionToCheck))
return false;
}

return fileExtensionToCheck.Equals(".png", StringComparison.OrdinalIgnoreCase) ||
fileExtensionToCheck.Equals(".jpg", StringComparison.OrdinalIgnoreCase) ||
Expand Down Expand Up @@ -46,20 +44,18 @@ public static bool IsPowerShellFile(string fileExtensionToCheck)
/// <param name="fileExtensionToCheck">The file extension to check.</param>
/// <returns><c>true</c> if the fileExtensionToCheck is a zip bundle file;
/// otherwise <c>false</c>.</returns>
public static bool IsZipFile(string fileExtensionToCheck)
public static bool IsZipFile(string? fileExtensionToCheck)
{
if (string.IsNullOrEmpty(fileExtensionToCheck))
{
if (string.IsNullOrWhiteSpace(fileExtensionToCheck))
return false;
}

return new[] { ".zip", ".msix", ".appx", ".msixbundle", ".7z", ".rar", ".tar" }
.Contains(fileExtensionToCheck, StringComparer.OrdinalIgnoreCase);
}

public static bool IsBrowsableZipFile(string filePath, out string ext)
public static bool IsBrowsableZipFile(string? filePath, out string? ext)
{
if (string.IsNullOrEmpty(filePath))
if (string.IsNullOrWhiteSpace(filePath))
{
ext = null;
return false;
Expand All @@ -70,12 +66,10 @@ public static bool IsBrowsableZipFile(string filePath, out string ext)
return ext is not null;
}

public static bool IsInfFile(string fileExtensionToCheck)
public static bool IsInfFile(string? fileExtensionToCheck)
{
if (string.IsNullOrEmpty(fileExtensionToCheck))
{
if (string.IsNullOrWhiteSpace(fileExtensionToCheck))
return false;
}

return fileExtensionToCheck.Equals(".inf", StringComparison.OrdinalIgnoreCase);
}
Expand All @@ -87,12 +81,10 @@ public static bool IsInfFile(string fileExtensionToCheck)
/// <returns><c>true</c> if the fileExtensionToCheck is a font file;
/// otherwise <c>false</c>.</returns>
/// <remarks>Font file types are; fon, otf, ttc, ttf</remarks>
public static bool IsFontFile(string fileExtensionToCheck)
public static bool IsFontFile(string? fileExtensionToCheck)
{
if (string.IsNullOrEmpty(fileExtensionToCheck))
{
if (string.IsNullOrWhiteSpace(fileExtensionToCheck))
return false;
}

return fileExtensionToCheck.Equals(".fon", StringComparison.OrdinalIgnoreCase) ||
fileExtensionToCheck.Equals(".otf", StringComparison.OrdinalIgnoreCase) ||
Expand All @@ -107,12 +99,10 @@ public static bool IsFontFile(string fileExtensionToCheck)
/// <returns><c>true</c> if the fileExtensionToCheck is a shortcute file;
/// otherwise <c>false</c>.</returns>
/// <remarks>Font file type is .lnkf</remarks>
public static bool IsShortcutFile(string fileExtensionToCheck)
public static bool IsShortcutFile(string? fileExtensionToCheck)
{
if (string.IsNullOrEmpty(fileExtensionToCheck))
{
if (string.IsNullOrWhiteSpace(fileExtensionToCheck))
return false;
}

return fileExtensionToCheck.Equals(".lnk", StringComparison.OrdinalIgnoreCase);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -647,7 +647,9 @@ public async Task CompressIntoArchive()

public async Task DecompressArchive()
{
BaseStorageFile archive = await StorageHelpers.ToStorageItem<BaseStorageFile>(associatedInstance.SlimContentPage.SelectedItem.ItemPath);
BaseStorageFile archive = await StorageHelpers.ToStorageItem<BaseStorageFile>(associatedInstance.SlimContentPage.SelectedItems.Count != 0
? associatedInstance.SlimContentPage.SelectedItem.ItemPath
: associatedInstance.FilesystemViewModel.WorkingDirectory);

if (archive == null)
return;
Expand Down
4 changes: 2 additions & 2 deletions src/Files.App/UserControls/InnerNavigationToolbar.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -267,15 +267,15 @@
</MenuFlyoutItem>
<MenuFlyoutItem
Command="{x:Bind ViewModel.ExtractHereCommand, Mode=OneWay}"
IsEnabled="{x:Bind ViewModel.CanExtract, Mode=OneWay, FallbackValue=False}"
IsEnabled="{x:Bind ViewModel.IsSelectionArchivesOnly, Mode=OneWay, FallbackValue=False}"
Text="{helpers:ResourceString Name=ExtractHere}">
<MenuFlyoutItem.Icon>
<FontIcon FontFamily="{StaticResource CustomGlyph}" Glyph="&#xF11A;" />
</MenuFlyoutItem.Icon>
</MenuFlyoutItem>
<MenuFlyoutItem
Command="{x:Bind ViewModel.ExtractToCommand, Mode=OneWay}"
IsEnabled="{x:Bind ViewModel.CanExtract, Mode=OneWay, FallbackValue=False}"
IsEnabled="{x:Bind ViewModel.IsSelectionArchivesOnly, Mode=OneWay, FallbackValue=False}"
Text="{x:Bind ViewModel.ExtractToText, Mode=OneWay}">
<MenuFlyoutItem.Icon>
<FontIcon FontFamily="{StaticResource CustomGlyph}" Glyph="&#xF11A;" />
Expand Down
8 changes: 5 additions & 3 deletions src/Files.App/ViewModels/ToolbarViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1150,15 +1150,17 @@ public List<ListedItem> SelectedItems
public bool CanEmptyRecycleBin => InstanceViewModel.IsPageTypeRecycleBin && HasItem;
public bool CanRestoreRecycleBin => InstanceViewModel.IsPageTypeRecycleBin && HasItem && (SelectedItems is null || SelectedItems.Count == 0);
public bool CanRestoreSelectionRecycleBin => InstanceViewModel.IsPageTypeRecycleBin && HasItem && SelectedItems is not null && SelectedItems.Count > 0;
public bool CanExtract => SelectedItems is not null && SelectedItems.Any() && SelectedItems.All(x => FileExtensionHelpers.IsZipFile(x.FileExtension)) && !InstanceViewModel.IsPageTypeRecycleBin;
public string ExtractToText => CanExtract ? SelectedItems.Count > 1 ? string.Format("ExtractToChildFolder".GetLocalizedResource(), $"*{Path.DirectorySeparatorChar}") : string.Format("ExtractToChildFolder".GetLocalizedResource() + "\\", Path.GetFileNameWithoutExtension(selectedItems.First().Name)) : "ExtractToChildFolder".GetLocalizedResource();
public bool IsMultipleArchivesSelected => CanExtract && SelectedItems.Count > 1;
public bool CanExtract => IsArchiveOpened ? (SelectedItems is null || !SelectedItems.Any()) : IsSelectionArchivesOnly;
public bool IsArchiveOpened => FileExtensionHelpers.IsZipFile(Path.GetExtension(pathControlDisplayText));
public bool IsSelectionArchivesOnly => SelectedItems is not null && SelectedItems.Any() && SelectedItems.All(x => FileExtensionHelpers.IsZipFile(x.FileExtension)) && !InstanceViewModel.IsPageTypeRecycleBin;
public bool IsMultipleArchivesSelected => IsSelectionArchivesOnly && SelectedItems.Count > 1;
public bool IsPowerShellScript => SelectedItems is not null && SelectedItems.Count == 1 && FileExtensionHelpers.IsPowerShellFile(SelectedItems.First().FileExtension) && !InstanceViewModel.IsPageTypeRecycleBin;
public bool IsImage => SelectedItems is not null && SelectedItems.Any() && SelectedItems.All(x => FileExtensionHelpers.IsImageFile(x.FileExtension)) && !InstanceViewModel.IsPageTypeRecycleBin;
public bool IsMultipleImageSelected => SelectedItems is not null && SelectedItems.Count > 1 && SelectedItems.All(x => FileExtensionHelpers.IsImageFile(x.FileExtension)) && !InstanceViewModel.IsPageTypeRecycleBin;
public bool IsInfFile => SelectedItems is not null && SelectedItems.Count == 1 && FileExtensionHelpers.IsInfFile(SelectedItems.First().FileExtension) && !InstanceViewModel.IsPageTypeRecycleBin;
public bool IsFont => SelectedItems is not null && SelectedItems.Any() && SelectedItems.All(x => FileExtensionHelpers.IsFontFile(x.FileExtension)) && !InstanceViewModel.IsPageTypeRecycleBin;

public string ExtractToText => IsSelectionArchivesOnly ? SelectedItems.Count > 1 ? string.Format("ExtractToChildFolder".GetLocalizedResource(), $"*{Path.DirectorySeparatorChar}") : string.Format("ExtractToChildFolder".GetLocalizedResource() + "\\", Path.GetFileNameWithoutExtension(selectedItems.First().Name)) : "ExtractToChildFolder".GetLocalizedResource();
public string OpenInTerminal => $"{"OpenIn".GetLocalizedResource()} {App.TerminalController.Model.GetDefaultTerminal()?.Name}";

private void OnTerminalsChanged(object _)
Expand Down