Initilize widget setting without starting its host

This commit is contained in:
TheXamlGuy
2024-01-31 22:33:23 +00:00
parent a2a5591502
commit 6dbe2db584
25 changed files with 125 additions and 83 deletions
@@ -1,30 +1,35 @@
using Windows.Media.Control;
using Microsoft.Extensions.Hosting;
using Windows.Media.Control;
namespace Hyperbar.Widget.MediaController.Windows;
public class MediaControllerManager(IMediator mediator,
public class MediaControllerService(IMediator mediator,
IFactory<GlobalSystemMediaTransportControlsSession, MediaController> factory) :
IInitializer
IHostedService
{
private readonly AsyncLock asyncLock = new();
private readonly List<KeyValuePair<GlobalSystemMediaTransportControlsSession, MediaController>> cache = [];
private GlobalSystemMediaTransportControlsSessionManager? mediaTransportControlsSessionManager;
public async Task InitializeAsync()
public async Task StartAsync(CancellationToken cancellationToken)
{
mediaTransportControlsSessionManager = await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
mediaTransportControlsSessionManager.SessionsChanged += OnSessionsChanged;
IReadOnlyList<GlobalSystemMediaTransportControlsSession> sessions =
IReadOnlyList<GlobalSystemMediaTransportControlsSession> sessions =
mediaTransportControlsSessionManager.GetSessions();
foreach (GlobalSystemMediaTransportControlsSession session in sessions)
{
await InitializeSessionAsync(session);
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
private async Task InitializeSessionAsync(GlobalSystemMediaTransportControlsSession session)
{
if (factory.Create(session) is MediaController mediaController)
@@ -15,7 +15,7 @@ public class MediaControllerWidget :
.UseViewModelTemplate<MediaControllerWidgetViewModel, MediaControllerWidgetView>()
.ConfigureServices(args =>
{
args.AddSingleton<IInitializer, MediaControllerManager>()
args.AddHostedService<MediaControllerService>()
.AddTransient<IServiceScopeFactory<MediaController>, ServiceScopeFactory<MediaController>>()
.AddTransient<IServiceScopeProvider<MediaController>, ServiceScopeProvider<MediaController>>()
.AddCache<MediaController, IServiceScope>()