add a central cache, for easy data retriveal
This commit is contained in:
@@ -2,8 +2,7 @@
|
||||
|
||||
namespace Hyperbar.Windows.MediaController;
|
||||
|
||||
public class MediaControllerFactory(IMediator mediator,
|
||||
IServiceScopeFactory<MediaController> serviceScopeFactory) :
|
||||
public class MediaControllerFactory(IServiceScopeFactory<MediaController> serviceScopeFactory) :
|
||||
IFactory<GlobalSystemMediaTransportControlsSession, MediaController?>
|
||||
{
|
||||
public MediaController? Create(GlobalSystemMediaTransportControlsSession value)
|
||||
@@ -11,22 +10,6 @@ public class MediaControllerFactory(IMediator mediator,
|
||||
if (serviceScopeFactory.Create(value) is MediaController mediaController)
|
||||
{
|
||||
return mediaController;
|
||||
|
||||
//if (serviceScope.ServiceProvider.GetService<IServiceFactory>() is IServiceFactory serviceFactory)
|
||||
//{
|
||||
// if (serviceFactory.Create<MediaController>(value) is MediaController mediaController)
|
||||
// {
|
||||
// //if (serviceScope.ServiceProvider.GetService<IFactory<MediaControllerViewModel?>>()
|
||||
// // is IFactory<MediaControllerViewModel?> factory)
|
||||
// //{
|
||||
// // if (factory.Create() is MediaControllerViewModel mediaControllerViewModel)
|
||||
// // {
|
||||
// // _ = await mediator.PublishAsync(new Created<MediaControllerViewModel>(mediaControllerViewModel));
|
||||
// // }
|
||||
// //}
|
||||
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
return default;
|
||||
|
||||
@@ -6,7 +6,7 @@ public class MediaControllerManager(IMediator mediator,
|
||||
IFactory<GlobalSystemMediaTransportControlsSession, MediaController> factory) :
|
||||
IInitializer
|
||||
{
|
||||
private readonly ConcurrentDictionary<GlobalSystemMediaTransportControlsSession, MediaController> cachedSessions = [];
|
||||
private readonly List<KeyValuePair<GlobalSystemMediaTransportControlsSession, MediaController>> cachedSessions = [];
|
||||
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
@@ -28,7 +28,7 @@ public class MediaControllerManager(IMediator mediator,
|
||||
if (factory.Create(session) is MediaController mediaController)
|
||||
{
|
||||
await mediator.PublishAsync(new Created<MediaController>(mediaController));
|
||||
cachedSessions.TryAdd(session, mediaController);
|
||||
cachedSessions.Add(new KeyValuePair<GlobalSystemMediaTransportControlsSession, MediaController>(session, mediaController));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,17 +39,20 @@ public class MediaControllerManager(IMediator mediator,
|
||||
sender.GetSessions();
|
||||
|
||||
foreach (KeyValuePair<GlobalSystemMediaTransportControlsSession, MediaController> session in
|
||||
cachedSessions)
|
||||
cachedSessions.ToList())
|
||||
{
|
||||
if (!sessions.Contains(session.Key))
|
||||
if (!sessions.Any(x => x.SourceAppUserModelId == session.Key.SourceAppUserModelId))
|
||||
{
|
||||
cachedSessions.TryRemove(session);
|
||||
cachedSessions.Remove(session);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (GlobalSystemMediaTransportControlsSession session in sessions)
|
||||
{
|
||||
await InitializeSessionAsync(session);
|
||||
if (!cachedSessions.Any(x => x.Key.SourceAppUserModelId == session.SourceAppUserModelId))
|
||||
{
|
||||
await InitializeSessionAsync(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,11 @@ public class MediaControllerWidgetProvider :
|
||||
.AddSingleton<IInitializer, MediaControllerManager>()
|
||||
.AddTransient<IServiceScopeFactory<MediaController>, ServiceScopeFactory<MediaController>>()
|
||||
.AddTransient<IServiceScopeProvider<MediaController>, ServiceScopeProvider<MediaController>>()
|
||||
.AddSingleton<ConcurrentDictionary<MediaController, IServiceScope>>()
|
||||
.AddCache<MediaController, IServiceScope>()
|
||||
.AddTransient<IFactory<GlobalSystemMediaTransportControlsSession, MediaController?>, MediaControllerFactory>()
|
||||
.AddHandler<MediaControllerHandler>()
|
||||
.AddTransient<IFactory<MediaControllerViewModel?>, MediaControllerViewModelFactory>()
|
||||
.AddCache<MediaControllerViewModel>()
|
||||
.AddContentTemplate<MediaControllerViewModel, MediaControllerView>()
|
||||
.AddContentTemplate<MediaInformationViewModel, MediaInformationView>();
|
||||
}
|
||||
Reference in New Issue
Block a user