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
16 changes: 13 additions & 3 deletions src/Files.App/Actions/Content/Install/InstallFontAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace Files.App.Actions
internal sealed partial class InstallFontAction : ObservableObject, IAction
{
private readonly IContentPageContext context;
private static readonly StatusCenterViewModel StatusCenterViewModel = Ioc.Default.GetRequiredService<StatusCenterViewModel>();

public string Label
=> Strings.Install.GetLocalizedResource();
Expand All @@ -16,7 +17,7 @@ public string Description
=> Strings.InstallFontDescription.GetLocalizedResource();

public RichGlyph Glyph
=> new("\uE8D2");
=> new(themedIconStyle: "App.ThemedIcons.Actions.FontInstall");

public bool IsExecutable =>
context.SelectedItems.Any() &&
Expand All @@ -31,10 +32,19 @@ public InstallFontAction()
context.PropertyChanged += Context_PropertyChanged;
}

public Task ExecuteAsync(object? parameter = null)
public async Task ExecuteAsync(object? parameter = null)
{
if (context?.ShellPage?.ShellViewModel.WorkingDirectory is null)
return;

var banner = StatusCenterHelper.AddCard_InstallFont(context.ShellPage.ShellViewModel.WorkingDirectory.CreateEnumerable(), ReturnResult.InProgress, context.SelectedItems.Count);
banner.IsCancelable = false;

var paths = context.SelectedItems.Select(item => item.ItemPath).ToArray();
return Win32Helper.InstallFontsAsync(paths, false);
await Win32Helper.InstallFontsAsync(paths, false);

StatusCenterViewModel.RemoveItem(banner);
StatusCenterHelper.AddCard_InstallFont(context.ShellPage.ShellViewModel.WorkingDirectory.CreateEnumerable(), ReturnResult.Success, context.SelectedItems.Count);
}

public void Context_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
Expand Down
19 changes: 10 additions & 9 deletions src/Files.App/Converters/StatusCenterStateToStateIconConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +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.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,
_ => ""
};

Expand Down
5 changes: 5 additions & 0 deletions src/Files.App/Data/Enums/FileOperationType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,10 @@ public enum FileOperationType : byte
/// A git repo has been cloned
/// </summary>
GitClone = 12,

/// <summary>
/// A font has been installed
/// </summary>
InstallFont = 13,
}
}
3 changes: 2 additions & 1 deletion src/Files.App/Data/Enums/StatusCenterItemIconKind.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public enum StatusCenterItemIconKind
Compress,
Successful,
Error,
GitClone
GitClone,
InstallFont
}
}
32 changes: 32 additions & 0 deletions src/Files.App/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -3502,7 +3502,39 @@
<data name="StatusCenter_GitCloneInProgress_SubHeader" xml:space="preserve">
<value>Cloning {0} from "{1}" to "{2}"</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontCanceled_Header" xml:space="preserve">
<value>Canceled installing {0} fonts</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontCanceled_SubHeader" xml:space="preserve">
<value>Canceled installing {0} font(s) from "{1}"</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontComplete_Header" xml:space="preserve">
<value>Installed {0} font(s)</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontComplete_SubHeader" xml:space="preserve">
<value>Installed {0} font(s) from "{1}"</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontFailed_Header" xml:space="preserve">
<value>Error installing {0} font(s)</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontFailed_SubHeader" xml:space="preserve">
<value>Failed to install {0} font(s) from "{1}"</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontInProgress_Header" xml:space="preserve">
<value>Installing {0} font(s)</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_InstallFontInProgress_SubHeader" xml:space="preserve">
<value>Installing {0} font(s) from "{1}"</value>
<comment>Shown in a StatusCenter card.</comment>
</data>
<data name="StatusCenter_CopyCanceled_Header" xml:space="preserve">
<value>Canceled copying {0} item(s) to "{1}"</value>
<comment>Shown in a StatusCenter card.</comment>
Expand Down
2 changes: 2 additions & 0 deletions src/Files.App/Styles/PathIcons.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@

<x:String x:Key="App.Theme.PathIcon.ActionGitClone">M.59,6.59c-.78.78-.78,2.05,0,2.83l6,6c.78.78,2.05.78,2.83,0l6-6c.78-.78.78-2.05,0-2.83L9.41.59c-.78-.78-2.05-.78-2.83,0L.59,6.59Zm.71,2.12c-.39-.39-.39-1.02,0-1.41L5.44,3.15l.71.71c-.09.2-.15.42-.15.65,0,.65.42,1.21,1,1.41v4.17c-.58.21-1,.76-1,1.41,0,.83.67,1.5,1.5,1.5s1.5-.67,1.5-1.5c0-.65-.42-1.21-1-1.41v-4.17c.05-.02.1-.04.15-.06l2,2c-.09.2-.15.42-.15.65,0,.83.67,1.5,1.5,1.5s1.5-.67,1.5-1.5-.67-1.5-1.5-1.5c-.23,0-.45.05-.65.15l-2-2c.09-.2.15-.42.15-.65,0-.83-.67-1.5-1.5-1.5-.23,0-.45.05-.65.15l-.71-.71,1.15-1.15c.39-.39,1.02-.39,1.41,0l6,6c.39.39.39,1.02,0,1.41l-6,6c-.39.39-1.02.39-1.41,0L1.29,8.71Z</x:String>

<x:String x:Key="App.Theme.PathIcon.ActionInstallFont">M3.97.34C3.91.14,3.72,0,3.51,0c-.21,0-.4.13-.48.32L.03,8.32c-.1.26.03.55.29.64.26.1.55-.03.64-.29l.63-1.68h3.56l.28.74.53-1.42L3.97.34Zm.83,5.66H1.97L3.47,2l1.33,4Zm4.43-4c.3,0,.58.17.7.45l4.91,11.05h.4c.41,0,.75.34.75.75s-.34.75-.75.75h-2.5c-.41,0-.75-.34-.75-.75s.34-.75.75-.75h.46l-1.11-2.5h-5.34l-1,2.5h.49c.41,0,.75.34.75.75s-.34.75-.75.75h-2.5c-.41,0-.75-.34-.75-.75s.34-.75.75-.75h.39L8.55,2.47c.11-.28.38-.47.68-.47Zm-1.88,7.5h4.07l-2.14-4.82-1.93,4.82Z</x:String>

<x:String x:Key="App.Theme.PathIcon.WebAsset">M 4.9219 18.75 C 4.4336 18.75 3.9665 18.6507 3.5205 18.4521 C 3.0745 18.2536 2.6839 17.9867 2.3486 17.6514 C 2.0133 17.3161 1.7464 16.9255 1.5479 16.4795 C 1.3493 16.0335 1.25 15.5664 1.25 15.0781 L 1.25 4.9219 C 1.25 4.4336 1.3493 3.9665 1.5479 3.5205 C 1.7464 3.0745 2.0133 2.6839 2.3486 2.3486 C 2.6839 2.0133 3.0745 1.7464 3.5205 1.5479 C 3.9665 1.3493 4.4336 1.25 4.9219 1.25 L 15.0781 1.25 C 15.5664 1.25 16.0335 1.3493 16.4795 1.5479 C 16.9255 1.7464 17.3161 2.0133 17.6514 2.3486 C 17.9867 2.6839 18.2536 3.0745 18.4521 3.5205 C 18.6507 3.9665 18.75 4.4336 18.75 4.9219 L 18.75 15.0781 C 18.75 15.5664 18.6507 16.0335 18.4521 16.4795 C 18.2536 16.9255 17.9867 17.3161 17.6514 17.6514 C 17.3161 17.9867 16.9255 18.2536 16.4795 18.4521 C 16.0335 18.6507 15.5664 18.75 15.0781 18.75 Z M 15.0488 17.5 C 15.3743 17.5 15.6852 17.4333 15.9814 17.2998 C 16.2777 17.1663 16.5381 16.9873 16.7627 16.7627 C 16.9873 16.5381 17.1663 16.2777 17.2998 15.9814 C 17.4333 15.6852 17.5 15.3743 17.5 15.0488 L 17.5 4.9512 C 17.5 4.6257 17.4333 4.3148 17.2998 4.0186 C 17.1663 3.7223 16.9873 3.4619 16.7627 3.2373 C 16.5381 3.0127 16.2777 2.8337 15.9814 2.7002 C 15.6852 2.5667 15.3743 2.5 15.0488 2.5 L 4.9512 2.5 C 4.6257 2.5 4.3148 2.5667 4.0186 2.7002 C 3.7223 2.8337 3.4619 3.0127 3.2373 3.2373 C 3.0127 3.4619 2.8337 3.7223 2.7002 4.0186 C 2.5667 4.3148 2.5 4.6257 2.5 4.9512 L 2.5 15.0488 C 2.5 15.3743 2.5667 15.6852 2.7002 15.9814 C 2.8337 16.2777 3.0127 16.5381 3.2373 16.7627 C 3.4619 16.9873 3.7223 17.1663 4.0186 17.2998 C 4.3148 17.4333 4.6257 17.5 4.9512 17.5 Z M 5.625 6.25 C 5.4557 6.25 5.3092 6.1882 5.1855 6.0645 C 5.0618 5.9408 5 5.7943 5 5.625 C 5 5.4557 5.0618 5.3092 5.1855 5.1855 C 5.3092 5.0618 5.4557 5 5.625 5 L 14.375 5 C 14.5443 5 14.6908 5.0618 14.8145 5.1855 C 14.9382 5.3092 15 5.4557 15 5.625 C 15 5.7943 14.9382 5.9408 14.8145 6.0645 C 14.6908 6.1882 14.5443 6.25 14.375 6.25 Z Z Z</x:String>

<x:String x:Key="App.Theme.PathIcon.TabActions">M3.2 0C1.43269 0 0 1.43269 0 3.2V12.8C0 14.5673 1.43269 16 3.2 16H12.8C14.5673 16 16 14.5673 16 12.8V3.2C16 1.43269 14.5673 0 12.8 0H3.2ZM1.06667 3.2C1.06667 2.02179 2.02179 1.06667 3.2 1.06667H12.8C13.9782 1.06667 14.9333 2.02179 14.9333 3.2V4.26667H5.86667C4.98301 4.26667 4.26667 4.98301 4.26667 5.86667V14.9333H3.2C2.02179 14.9333 1.06667 13.9782 1.06667 12.8V3.2ZM5.33333 14.9333H12.8C13.9782 14.9333 14.9333 13.9782 14.9333 12.8V5.33333H5.86667C5.57212 5.33333 5.33333 5.57212 5.33333 5.86667V14.9333Z</x:String>
Expand Down
4 changes: 1 addition & 3 deletions src/Files.App/UserControls/Toolbar.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -464,9 +464,7 @@
Label="{x:Bind Commands.InstallFont.Label}"
LabelPosition="Default"
ToolTipService.ToolTip="{helpers:ResourceString Name=Install}">
<AppBarButton.Icon>
<FontIcon Foreground="{ThemeResource App.Theme.IconBaseBrush}" Glyph="{x:Bind Commands.InstallFont.Glyph.BaseGlyph, Mode=OneTime}" />
</AppBarButton.Icon>
<controls:ThemedIcon Style="{x:Bind Commands.InstallFont.ThemedIconStyle}" />
</AppBarButton>

<!-- Install Certificate -->
Expand Down
89 changes: 88 additions & 1 deletion src/Files.App/Utils/StatusCenter/StatusCenterHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ public static StatusCenterItem AddCard_GitClone(
{
return _statusCenterViewModel.AddItem(
"StatusCenter_GitCloneCanceled_Header",
string.Empty,
"StatusCenter_GitCloneCanceled_SubHeader",
ReturnResult.Cancelled,
FileOperationType.GitClone,
repoName,
Expand Down Expand Up @@ -538,6 +538,67 @@ public static StatusCenterItem AddCard_GitClone(
}
}

public static StatusCenterItem AddCard_InstallFont(
IEnumerable<string> source,
ReturnResult returnStatus,
long itemsCount = 0,
long totalSize = 0)
{
if (returnStatus == ReturnResult.Cancelled)
{
return _statusCenterViewModel.AddItem(
"StatusCenter_InstallFontCanceled_Header",
"StatusCenter_InstallFontCanceled_SubHeader",
ReturnResult.Cancelled,
FileOperationType.InstallFont,
source,
string.Empty.CreateEnumerable(),
false,
itemsCount,
totalSize);
}
else if (returnStatus == ReturnResult.InProgress)
{
return _statusCenterViewModel.AddItem(
"StatusCenter_InstallFontInProgress_Header",
"StatusCenter_InstallFontInProgress_SubHeader",
ReturnResult.InProgress,
FileOperationType.InstallFont,
source,
string.Empty.CreateEnumerable(),
false,
itemsCount,
totalSize,
new CancellationTokenSource());
}
else if (returnStatus == ReturnResult.Success)
{
return _statusCenterViewModel.AddItem(
"StatusCenter_InstallFontComplete_Header",
"StatusCenter_InstallFontComplete_SubHeader",
ReturnResult.Success,
FileOperationType.InstallFont,
source,
string.Empty.CreateEnumerable(),
false,
itemsCount,
totalSize);
}
else
{
return _statusCenterViewModel.AddItem(
"StatusCenter_InstallFontFailed_Header",
"StatusCenter_InstallFontFailed_SubHeader",
ReturnResult.Failed,
FileOperationType.InstallFont,
source,
string.Empty.CreateEnumerable(),
false,
itemsCount,
totalSize);
}
}

public static StatusCenterItem AddCard_Prepare()
{
return _statusCenterViewModel.AddItem(
Expand Down Expand Up @@ -767,6 +828,32 @@ public static void UpdateCardStrings(StatusCenterItem card)
}
break;
}
case FileOperationType.InstallFont:
{
if (headerString is not null)
{
card.Header = card.FileSystemOperationReturnResult switch
{
ReturnResult.Cancelled => string.Format(headerString, card.TotalItemsCount),
ReturnResult.Success => string.Format(headerString, card.TotalItemsCount),
ReturnResult.Failed => string.Format(headerString, card.TotalItemsCount),
ReturnResult.InProgress => string.Format(headerString, card.TotalItemsCount),
_ => string.Format(headerString, card.TotalItemsCount),
};
}
if (subHeaderString is not null)
{
card.SubHeader = card.FileSystemOperationReturnResult switch
{
ReturnResult.Cancelled => string.Format(subHeaderString, card.TotalItemsCount, sourcePath),
ReturnResult.Success => string.Format(subHeaderString, card.TotalItemsCount, sourcePath),
ReturnResult.Failed => string.Format(subHeaderString, card.TotalItemsCount, sourcePath),
ReturnResult.InProgress => string.Format(subHeaderString, card.TotalItemsCount, sourcePath),
_ => string.Format(subHeaderString, card.TotalItemsCount, sourcePath),
};
}
break;
}
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/Files.App/Utils/StatusCenter/StatusCenterItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ public StatusCenterItem(
FileOperationType.Recycle => StatusCenterItemIconKind.Recycle,
FileOperationType.Compressed => StatusCenterItemIconKind.Compress,
FileOperationType.GitClone => StatusCenterItemIconKind.GitClone,
FileOperationType.InstallFont => StatusCenterItemIconKind.InstallFont,
_ => StatusCenterItemIconKind.Delete,
};

Expand Down Expand Up @@ -263,6 +264,7 @@ public StatusCenterItem(
FileOperationType.Recycle => StatusCenterItemIconKind.Recycle,
FileOperationType.Compressed => StatusCenterItemIconKind.Compress,
FileOperationType.GitClone => StatusCenterItemIconKind.GitClone,
FileOperationType.InstallFont => StatusCenterItemIconKind.InstallFont,
_ => StatusCenterItemIconKind.Delete,
};

Expand Down Expand Up @@ -294,7 +296,8 @@ private void ReportProgress(StatusCenterItemProgressModel value)

if (Operation == FileOperationType.Recycle ||
Operation == FileOperationType.Delete ||
Operation == FileOperationType.Compressed)
Operation == FileOperationType.Compressed ||
Operation == FileOperationType.GitClone)
{
Message =
$"{string.Format(
Expand Down
Loading