Reloadable configuration, FontService (WIP)
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>FileTime.GuiApp</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\FileTime.GuiApp.Font.Abstractions\FileTime.GuiApp.Font.Abstractions.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="11.0.0-preview5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
|
||||
<PackageReference Include="System.Reactive" Version="5.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
16
src/GuiApp/Avalonia/FileTime.GuiApp.Font/Font/Startup.cs
Normal file
16
src/GuiApp/Avalonia/FileTime.GuiApp.Font/Font/Startup.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using FileTime.GuiApp.Configuration;
|
||||
using FileTime.GuiApp.Services;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace FileTime.GuiApp.Font;
|
||||
|
||||
public static class Startup
|
||||
{
|
||||
public static IServiceCollection ConfigureFont(this IServiceCollection services, IConfigurationRoot configurationRoot)
|
||||
{
|
||||
services.Configure<FontConfiguration>(configurationRoot.GetSection(FontConfiguration.SectionName));
|
||||
services.AddSingleton<IFontService, FontService>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System.Reactive.Linq;
|
||||
using System.Reactive.Subjects;
|
||||
using Avalonia.Media;
|
||||
using FileTime.GuiApp.Configuration;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace FileTime.GuiApp.Services;
|
||||
|
||||
public class FontService : IFontService
|
||||
{
|
||||
private readonly IOptionsMonitor<FontConfiguration> _fontConfiguration;
|
||||
|
||||
private readonly BehaviorSubject<string?> _mainFont = new(null);
|
||||
public IObservable<string?> MainFont => _mainFont.DistinctUntilChanged();
|
||||
|
||||
public FontService(IOptionsMonitor<FontConfiguration> fontConfiguration)
|
||||
{
|
||||
_fontConfiguration = fontConfiguration;
|
||||
fontConfiguration.OnChange(UpdateFonts);
|
||||
|
||||
UpdateFonts(fontConfiguration.CurrentValue, null);
|
||||
}
|
||||
|
||||
private void UpdateFonts(FontConfiguration newConfiguration, string? arg2)
|
||||
{
|
||||
_mainFont.OnNext(GetMainFont());
|
||||
}
|
||||
|
||||
public string? GetMainFont()
|
||||
{
|
||||
var installedFonts = FontManager.Current.GetInstalledFontFamilyNames().ToList();
|
||||
return _fontConfiguration.CurrentValue.Main.FirstOrDefault(f => installedFonts.Contains(f));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user