From e742b97b44c80e0f011cde117df61649cbc72c62 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Wed, 10 Jan 2024 20:59:55 +0000 Subject: [PATCH] Media controller WIP --- .../BackwardRequest.cs | 3 ++ .../FowardRequest.cs | 3 ++ .../MediaController.cs | 24 ++++++++-- .../MediaControllerInitializer.cs | 47 +++++++++++++++++++ .../MediaControllerWidgetProvider.cs | 1 + .../PauseRequest.cs | 3 ++ .../PlayRequest.cs | 3 ++ 7 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 Hyperbar.Windows.MediaController/BackwardRequest.cs create mode 100644 Hyperbar.Windows.MediaController/FowardRequest.cs create mode 100644 Hyperbar.Windows.MediaController/MediaControllerInitializer.cs create mode 100644 Hyperbar.Windows.MediaController/PauseRequest.cs create mode 100644 Hyperbar.Windows.MediaController/PlayRequest.cs diff --git a/Hyperbar.Windows.MediaController/BackwardRequest.cs b/Hyperbar.Windows.MediaController/BackwardRequest.cs new file mode 100644 index 0000000..6a7153c --- /dev/null +++ b/Hyperbar.Windows.MediaController/BackwardRequest.cs @@ -0,0 +1,3 @@ +namespace Hyperbar.Windows.Primary; + +public record BackwardRequest : INotification; diff --git a/Hyperbar.Windows.MediaController/FowardRequest.cs b/Hyperbar.Windows.MediaController/FowardRequest.cs new file mode 100644 index 0000000..7cb05d1 --- /dev/null +++ b/Hyperbar.Windows.MediaController/FowardRequest.cs @@ -0,0 +1,3 @@ +namespace Hyperbar.Windows.Primary; + +public record FowardRequest : INotification; diff --git a/Hyperbar.Windows.MediaController/MediaController.cs b/Hyperbar.Windows.MediaController/MediaController.cs index 5deeec7..dd1440f 100644 --- a/Hyperbar.Windows.MediaController/MediaController.cs +++ b/Hyperbar.Windows.MediaController/MediaController.cs @@ -1,10 +1,24 @@ -namespace Hyperbar.Windows.Primary; +using Windows.Media.Control; -public class MediaController : - IInitializer +namespace Hyperbar.Windows.Primary; + +public class MediaController : + INotificationHandler, + IDisposable { - public Task InitializeAsync() + public MediaController(GlobalSystemMediaTransportControlsSession session) + { + + } + + public void Dispose() { throw new NotImplementedException(); } -} + + public ValueTask Handle(PlayRequest notification, + CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Hyperbar.Windows.MediaController/MediaControllerInitializer.cs b/Hyperbar.Windows.MediaController/MediaControllerInitializer.cs new file mode 100644 index 0000000..303a93f --- /dev/null +++ b/Hyperbar.Windows.MediaController/MediaControllerInitializer.cs @@ -0,0 +1,47 @@ +using Windows.Media.Control; + +namespace Hyperbar.Windows.Primary; + +public class MediaControllerInitializer : + IInitializer +{ + private readonly List sessions = []; + + public async Task InitializeAsync() + { + GlobalSystemMediaTransportControlsSessionManager mediaTransportControlsSessionManager = + await GlobalSystemMediaTransportControlsSessionManager.RequestAsync(); + + mediaTransportControlsSessionManager.SessionsChanged += OnSessionsChanged; + IReadOnlyList sessions = + mediaTransportControlsSessionManager.GetSessions(); + + foreach (var session in sessions) + { + this.sessions.Add(session); + } + } + + private void OnSessionsChanged(GlobalSystemMediaTransportControlsSessionManager sender, + SessionsChangedEventArgs args) + { + IReadOnlyList 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); + } + } + } +} diff --git a/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs b/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs index fe761f1..0794183 100644 --- a/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs +++ b/Hyperbar.Windows.MediaController/MediaControllerWidgetProvider.cs @@ -9,6 +9,7 @@ public class MediaControllerWidgetProvider : { public void Create(HostBuilderContext comtext, IServiceCollection services) => services.AddWidgetTemplate() + .AddTransient() .AddContentTemplate() .AddContentTemplate() .AddContentTemplate() diff --git a/Hyperbar.Windows.MediaController/PauseRequest.cs b/Hyperbar.Windows.MediaController/PauseRequest.cs new file mode 100644 index 0000000..8acbf03 --- /dev/null +++ b/Hyperbar.Windows.MediaController/PauseRequest.cs @@ -0,0 +1,3 @@ +namespace Hyperbar.Windows.Primary; + +public record PauseRequest : INotification; diff --git a/Hyperbar.Windows.MediaController/PlayRequest.cs b/Hyperbar.Windows.MediaController/PlayRequest.cs new file mode 100644 index 0000000..1e45b4a --- /dev/null +++ b/Hyperbar.Windows.MediaController/PlayRequest.cs @@ -0,0 +1,3 @@ +namespace Hyperbar.Windows.Primary; + +public record PlayRequest : INotification;