Media controller WIP

This commit is contained in:
TheXamlGuy
2024-01-10 20:59:55 +00:00
parent 56c4e6883e
commit e742b97b44
7 changed files with 79 additions and 5 deletions
@@ -0,0 +1,3 @@
namespace Hyperbar.Windows.Primary;
public record BackwardRequest : INotification;
@@ -0,0 +1,3 @@
namespace Hyperbar.Windows.Primary;
public record FowardRequest : INotification;
@@ -1,9 +1,23 @@
namespace Hyperbar.Windows.Primary;
using Windows.Media.Control;
namespace Hyperbar.Windows.Primary;
public class MediaController :
IInitializer
INotificationHandler<PlayRequest>,
IDisposable
{
public Task InitializeAsync()
public MediaController(GlobalSystemMediaTransportControlsSession session)
{
}
public void Dispose()
{
throw new NotImplementedException();
}
public ValueTask Handle(PlayRequest notification,
CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
@@ -0,0 +1,47 @@
using Windows.Media.Control;
namespace Hyperbar.Windows.Primary;
public class MediaControllerInitializer :
IInitializer
{
private readonly List<GlobalSystemMediaTransportControlsSession> sessions = [];
public async Task InitializeAsync()
{
GlobalSystemMediaTransportControlsSessionManager mediaTransportControlsSessionManager =
await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
mediaTransportControlsSessionManager.SessionsChanged += OnSessionsChanged;
IReadOnlyList<GlobalSystemMediaTransportControlsSession> sessions =
mediaTransportControlsSessionManager.GetSessions();
foreach (var session in sessions)
{
this.sessions.Add(session);
}
}
private void OnSessionsChanged(GlobalSystemMediaTransportControlsSessionManager sender,
SessionsChangedEventArgs args)
{
IReadOnlyList<GlobalSystemMediaTransportControlsSession> sessions =
sender.GetSessions();
foreach (var session in this.sessions.ToList())
{
if (!sessions.Contains(session))
{
this.sessions.Remove(session);
}
}
foreach (var session in sessions)
{
if (!this.sessions.Contains(session))
{
this.sessions.Add(session);
}
}
}
}
@@ -9,6 +9,7 @@ public class MediaControllerWidgetProvider :
{
public void Create(HostBuilderContext comtext, IServiceCollection services) =>
services.AddWidgetTemplate<MediaControllerWidgetViewModel, MediaControllerWidgetView>()
.AddTransient<IInitializer, MediaControllerInitializer>()
.AddContentTemplate<MediaControllerViewModel, MediaControllerView>()
.AddContentTemplate<MediaControllerViewModel, MediaControllerView>()
.AddContentTemplate<MediaControllerViewModel, MediaControllerView>()
@@ -0,0 +1,3 @@
namespace Hyperbar.Windows.Primary;
public record PauseRequest : INotification;
@@ -0,0 +1,3 @@
namespace Hyperbar.Windows.Primary;
public record PlayRequest : INotification;