More work on MC visuals
This commit is contained in:
@@ -1,23 +1,24 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using Windows.Media.Control;
|
||||
using Windows.Media.Control;
|
||||
using Windows.Storage.Streams;
|
||||
|
||||
namespace Hyperbar.Widget.MediaController.Windows;
|
||||
|
||||
public class MediaController :
|
||||
INotificationHandler<Request<MediaPrevious>>,
|
||||
INotificationHandler<Request<MediaPlayPause>>,
|
||||
INotificationHandler<Request<MediaNext>>,
|
||||
INotificationHandler<Request<MediaInformation>>,
|
||||
INotificationHandler<Request<MediaPreviousButton>>,
|
||||
INotificationHandler<Request<MediaPlayPauseButton>>,
|
||||
INotificationHandler<Request<MediaNextButton>>,
|
||||
IDisposable
|
||||
{
|
||||
private readonly AsyncLock asyncLock = new();
|
||||
private readonly IDisposer disposer;
|
||||
private readonly IMediator mediator;
|
||||
private readonly GlobalSystemMediaTransportControlsSession session;
|
||||
|
||||
private bool isNextEnabled;
|
||||
private bool isPreviousEnabled;
|
||||
private GlobalSystemMediaTransportControlsSessionPlaybackStatus playbackStatus;
|
||||
|
||||
public MediaController(IMediator mediator,
|
||||
@@ -63,6 +64,28 @@ public class MediaController :
|
||||
public async Task Handle(Request<MediaNextButton> args,
|
||||
CancellationToken cancellationToken) => await UpdateMediaStateAsync();
|
||||
|
||||
public async Task Handle(Request<MediaPlayPause> args,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
GlobalSystemMediaTransportControlsSessionPlaybackInfo playbackInfo =
|
||||
session.GetPlaybackInfo();
|
||||
|
||||
if (playbackInfo.PlaybackStatus is GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing)
|
||||
{
|
||||
await session.TryPauseAsync();
|
||||
}
|
||||
|
||||
if (playbackInfo.PlaybackStatus is GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused)
|
||||
{
|
||||
await session.TryPlayAsync();
|
||||
}
|
||||
|
||||
await UpdateMediaStateAsync();
|
||||
}
|
||||
|
||||
public async Task Handle(Request<MediaPlayPauseButton> args,
|
||||
CancellationToken cancellationToken) => await UpdateMediaStateAsync();
|
||||
|
||||
private async void OnMediaPropertiesChanged(GlobalSystemMediaTransportControlsSession sender,
|
||||
MediaPropertiesChangedEventArgs args)
|
||||
{
|
||||
@@ -103,9 +126,6 @@ public class MediaController :
|
||||
}
|
||||
}
|
||||
|
||||
private bool isPreviousEnabled;
|
||||
private bool isNextEnabled;
|
||||
|
||||
private async Task UpdateMediaStateAsync()
|
||||
{
|
||||
try
|
||||
@@ -113,11 +133,18 @@ public class MediaController :
|
||||
GlobalSystemMediaTransportControlsSessionPlaybackInfo playbackInfo =
|
||||
session.GetPlaybackInfo();
|
||||
|
||||
await mediator.PublishAsync(new Changed<MediaButton<MediaPlayPauseButton>>(new
|
||||
MediaButton<MediaPlayPauseButton>(playbackInfo.PlaybackStatus is
|
||||
GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing ?
|
||||
new MediaButtonPlaying() :
|
||||
new MediaButtonPaused())));
|
||||
|
||||
bool isPreviousEnabled = playbackInfo.Controls.IsPreviousEnabled;
|
||||
if (this.isPreviousEnabled != isPreviousEnabled)
|
||||
{
|
||||
await mediator.PublishAsync(new Changed<MediaPreviousButton>(new
|
||||
MediaPreviousButton(isPreviousEnabled)));
|
||||
await mediator.PublishAsync(new Changed<MediaButton<MediaPreviousButton>>(new
|
||||
MediaButton<MediaPreviousButton>(isPreviousEnabled ? new MediaButtonEnabled() :
|
||||
new MediaButtonDisabled())));
|
||||
|
||||
this.isPreviousEnabled = isPreviousEnabled;
|
||||
}
|
||||
@@ -125,8 +152,9 @@ public class MediaController :
|
||||
bool isNextEnabled = playbackInfo.Controls.IsNextEnabled;
|
||||
if (this.isNextEnabled != isNextEnabled)
|
||||
{
|
||||
await mediator.PublishAsync(new Changed<MediaNextButton>(new
|
||||
MediaNextButton(isNextEnabled)));
|
||||
await mediator.PublishAsync(new Changed<MediaButton<MediaNextButton>>(new
|
||||
MediaButton<MediaNextButton>(isNextEnabled ? new MediaButtonEnabled() :
|
||||
new MediaButtonDisabled())));
|
||||
|
||||
this.isNextEnabled = isNextEnabled;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user