This commit is contained in:
TheXamlGuy
2024-02-10 20:19:01 +00:00
parent ecfac99868
commit 565c6866d8
60 changed files with 445 additions and 381 deletions
@@ -5,10 +5,11 @@ namespace Hyperbar.Widget.MediaController.Windows;
public partial class MediaButtonViewModel<TMediaButton>(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
IRelayCommand invokeCommand) :
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer),
WidgetComponentViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
INotificationHandler<Changed<MediaButton<TMediaButton>>>,
IMediaButtonViewModel
{
@@ -29,5 +30,5 @@ public partial class MediaButtonViewModel<TMediaButton>(IServiceProvider service
}
public override async Task InitializeAsync() =>
await Mediator.PublishAsync<Request<TMediaButton>>();
await Publisher.PublishAsync<Request<TMediaButton>>();
}
@@ -14,23 +14,24 @@ public class MediaController :
IDisposable
{
private readonly IDisposer disposer;
private readonly IMediator mediator;
private readonly IPublisher publisher;
private readonly GlobalSystemMediaTransportControlsSession session;
private bool isNextEnabled;
private bool isPreviousEnabled;
private GlobalSystemMediaTransportControlsSessionPlaybackStatus playbackStatus;
public MediaController(IMediator mediator,
public MediaController(IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
GlobalSystemMediaTransportControlsSession session)
{
this.mediator = mediator;
this.publisher = publisher;
this.disposer = disposer;
this.session = session;
disposer.Add(this);
mediator.Subscribe(this);
subscriber.Add(this);
session.MediaPropertiesChanged += OnMediaPropertiesChanged;
session.PlaybackInfoChanged += OnPlaybackInfoChanged;
@@ -117,7 +118,7 @@ public class MediaController :
buffer = memoryStream.ToArray();
}
await mediator.PublishAsync(new Changed<MediaInformation>(new MediaInformation(mediaProperties.Title,
await publisher.PublishAsync(new Changed<MediaInformation>(new MediaInformation(mediaProperties.Title,
mediaProperties.Artist, buffer)));
}
catch
@@ -133,7 +134,7 @@ public class MediaController :
GlobalSystemMediaTransportControlsSessionPlaybackInfo playbackInfo =
session.GetPlaybackInfo();
await mediator.PublishAsync(new Changed<MediaButton<MediaPlayPauseButton>>(new
await publisher.PublishAsync(new Changed<MediaButton<MediaPlayPauseButton>>(new
MediaButton<MediaPlayPauseButton>(playbackInfo.PlaybackStatus is
GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing ?
new MediaButtonPlaying() :
@@ -142,7 +143,7 @@ public class MediaController :
bool isPreviousEnabled = playbackInfo.Controls.IsPreviousEnabled;
if (this.isPreviousEnabled != isPreviousEnabled)
{
await mediator.PublishAsync(new Changed<MediaButton<MediaPreviousButton>>(new
await publisher.PublishAsync(new Changed<MediaButton<MediaPreviousButton>>(new
MediaButton<MediaPreviousButton>(isPreviousEnabled ? new MediaButtonEnabled() :
new MediaButtonDisabled())));
@@ -152,7 +153,7 @@ public class MediaController :
bool isNextEnabled = playbackInfo.Controls.IsNextEnabled;
if (this.isNextEnabled != isNextEnabled)
{
await mediator.PublishAsync(new Changed<MediaButton<MediaNextButton>>(new
await publisher.PublishAsync(new Changed<MediaButton<MediaNextButton>>(new
MediaButton<MediaNextButton>(isNextEnabled ? new MediaButtonEnabled() :
new MediaButtonDisabled())));
@@ -2,7 +2,7 @@
namespace Hyperbar.Widget.MediaController.Windows;
public class MediaControllerHandler(IMediator mediator,
public class MediaControllerHandler(IPublisher publisher,
IServiceScopeProvider<MediaController> scopeProvider,
ICache<MediaController, MediaControllerViewModel> cache) :
INotificationHandler<Create<MediaController>>,
@@ -18,7 +18,7 @@ public class MediaControllerHandler(IMediator mediator,
factory.Create(mediaController) is MediaControllerViewModel viewModel)
{
cache.Add(mediaController, viewModel);
await mediator.PublishAsync(new Create<MediaControllerViewModel>(viewModel), cancellationToken);
await publisher.PublishAsync(new Create<MediaControllerViewModel>(viewModel), cancellationToken);
}
}
@@ -28,7 +28,7 @@ public class MediaControllerHandler(IMediator mediator,
cache.TryGetValue(mediaController, out MediaControllerViewModel? viewModel) &&
viewModel is not null)
{
await mediator.PublishAsync(new Remove<MediaControllerViewModel>(viewModel), cancellationToken);
await publisher.PublishAsync(new Remove<MediaControllerViewModel>(viewModel), cancellationToken);
cache.Remove(mediaController);
}
}
@@ -3,7 +3,7 @@ using Windows.Media.Control;
namespace Hyperbar.Widget.MediaController.Windows;
public class MediaControllerService(IMediator mediator,
public class MediaControllerService(IPublisher publisher,
IFactory<GlobalSystemMediaTransportControlsSession, MediaController> factory) :
IHostedService
{
@@ -34,7 +34,7 @@ public class MediaControllerService(IMediator mediator,
{
if (factory.Create(session) is MediaController mediaController)
{
await mediator.PublishAsync(new Create<MediaController>(mediaController));
await publisher.PublishAsync(new Create<MediaController>(mediaController));
cache.Add(new KeyValuePair<GlobalSystemMediaTransportControlsSession, MediaController>(session,
mediaController));
}
@@ -53,7 +53,7 @@ public class MediaControllerService(IMediator mediator,
{
if (!sessions.Any(x => x.SourceAppUserModelId == session.Key.SourceAppUserModelId))
{
await mediator.PublishAsync(new Remove<MediaController>(session.Value));
await publisher.PublishAsync(new Remove<MediaController>(session.Value));
cache.Remove(session);
}
}
@@ -10,21 +10,22 @@ public class MediaControllerViewModel :
public MediaControllerViewModel(IViewModelTemplate template,
IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
IMediator mediator,
IDisposer disposer) : base(serviceProvider, serviceFactory, mediator, disposer)
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer)
{
Template = template;
Add<MediaInformationViewModel>();
Add<MediaButtonViewModel<MediaPreviousButton>>(new RelayCommand(async () =>
await mediator.PublishAsync<Request<MediaPrevious>>()));
await publisher.PublishAsync<Request<MediaPrevious>>()));
Add<MediaButtonViewModel<MediaPlayPauseButton>>(new RelayCommand(async () =>
await mediator.PublishAsync<Request<MediaPlayPause>>()));
await publisher.PublishAsync<Request<MediaPlayPause>>()));
Add<MediaButtonViewModel<MediaNextButton>>(new RelayCommand(async () =>
await mediator.PublishAsync<Request<MediaNext>>()));
await publisher.PublishAsync<Request<MediaNext>>()));
}
public IViewModelTemplate Template { get; }
@@ -5,10 +5,11 @@ namespace Hyperbar.Widget.MediaController.Windows;
public class MediaControllerWidgetViewModel(IViewModelTemplate template,
IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer,
IEnumerable<MediaControllerViewModel> items) :
ObservableCollectionViewModel<MediaControllerViewModel>(serviceProvider, serviceFactory, mediator, disposer, items),
ObservableCollectionViewModel<MediaControllerViewModel>(serviceProvider, serviceFactory, publisher, subscriber, disposer, items),
IWidgetViewModel
{
public IViewModelTemplate Template => template;
@@ -4,9 +4,10 @@ namespace Hyperbar.Widget.MediaController.Windows;
public partial class MediaInformationViewModel(IServiceProvider serviceProvider,
IServiceFactory serviceFactory,
IMediator mediator,
IPublisher publisher,
ISubscriber subscriber,
IDisposer disposer) :
WidgetComponentViewModel(serviceProvider, serviceFactory, mediator, disposer),
WidgetComponentViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer),
INotificationHandler<Changed<MediaInformation>>
{
[ObservableProperty]
@@ -32,5 +33,5 @@ public partial class MediaInformationViewModel(IServiceProvider serviceProvider,
}
public override async Task InitializeAsync() =>
await Mediator.PublishAsync<Request<MediaInformation>>();
await Publisher.PublishAsync<Request<MediaInformation>>();
}