Skip to content

Commit e9a1443

Browse files
author
aytac.kayadelen
committed
Added Latest updated media state information
Fixed not unsubscribing from some events, causing re-enabling the plugin breaking most of the things
1 parent 0bc539c commit e9a1443

3 files changed

Lines changed: 29 additions & 14 deletions

File tree

Artemis.MediaInfo/DataModels/MediaInfoDataModel.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Artemis.Core;
1+
using Windows.Media.Control;
2+
using Artemis.Core;
23
using Artemis.Core.Modules;
34

45
namespace Artemis.MediaInfo.DataModels
@@ -16,5 +17,10 @@ public class MediaInfoDataModel : DataModel
1617

1718
[DataModelProperty(Name = "Previous media can be played")]
1819
public bool HasPreviousMedia { get; set; }
20+
21+
[DataModelProperty(Name = "Latest updated media state",
22+
Description = " Note that there may be other media sessions. " +
23+
"Other values become true when any of the sessions meet the conditions.")]
24+
public GlobalSystemMediaTransportControlsSessionPlaybackStatus MediaState { get; set; }
1925
}
2026
}

Artemis.MediaInfo/MediaInfoModule.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,25 @@ namespace Artemis.MediaInfo
1111
[PluginFeature(Name = "MediaInfo")]
1212
public class MediaInfoModule : Module<MediaInfoDataModel>
1313
{
14-
private readonly MediaManager _mediaManager = new();
14+
private MediaManager _mediaManager;
1515

1616
public override List<IModuleActivationRequirement> ActivationRequirements { get; } = new();
1717

18-
private readonly List<string> _mediaSessions = new();
18+
private List<string> _mediaSessions = new();
1919

2020
public override void Enable()
2121
{
22+
_mediaManager = new MediaManager();
2223
_mediaManager.OnAnySessionOpened += MediaManager_OnSessionOpened;
2324
_mediaManager.OnAnySessionClosed += MediaManager_OnAnySessionClosed;
2425
_mediaManager.OnAnyPlaybackStateChanged += MediaManager_OnAnyPlaybackStateChanged;
2526

2627
_mediaManager.Start();
27-
while(!_mediaManager.IsStarted){}
28-
28+
2929
DataModel.HasMedia = _mediaManager.CurrentMediaSessions.Count > 0;
3030

3131
if (_mediaManager.CurrentMediaSessions.Count == 0) return;
32-
32+
_mediaSessions = new List<string>(_mediaManager.CurrentMediaSessions.Select(pair => pair.Value.Id));
3333

3434
DataModel.HasNextMedia = _mediaManager.CurrentMediaSessions.Any(pair => pair.Value.ControlSession.GetPlaybackInfo().Controls.IsNextEnabled);
3535
DataModel.HasPreviousMedia = _mediaManager.CurrentMediaSessions.Any(pair => pair.Value.ControlSession.GetPlaybackInfo().Controls.IsPreviousEnabled);
@@ -39,9 +39,16 @@ public override void Enable()
3939

4040
public override void Disable()
4141
{
42+
foreach (var (_, mediaSession) in _mediaManager.CurrentMediaSessions)
43+
{
44+
mediaSession.OnSessionClosed -= MediaManager_OnAnySessionClosed;
45+
}
46+
4247
_mediaManager.OnAnySessionOpened -= MediaManager_OnSessionOpened;
4348
_mediaManager.OnAnySessionClosed -= MediaManager_OnAnySessionClosed;
4449
_mediaManager.OnAnyPlaybackStateChanged -= MediaManager_OnAnyPlaybackStateChanged;
50+
_mediaManager.Dispose();
51+
_mediaManager = null;
4552
}
4653

4754
public override void Update(double deltaTime)
@@ -59,19 +66,19 @@ public override void ModuleDeactivated(bool isOverride)
5966

6067
}
6168

62-
private void MediaManager_OnSessionOpened(MediaManager.MediaSession mediasession)
69+
private void MediaManager_OnSessionOpened(MediaManager.MediaSession mediaSession)
6370
{
6471
DataModel.HasMedia = true;
6572

66-
_mediaSessions.Add(mediasession.Id);
73+
_mediaSessions.Add(mediaSession.Id);
6774

68-
mediasession.OnSessionClosed += MediaManager_OnAnySessionClosed;
75+
mediaSession.OnSessionClosed += MediaManager_OnAnySessionClosed;
6976
}
7077

71-
private void MediaManager_OnAnySessionClosed(MediaManager.MediaSession mediasession)
78+
private void MediaManager_OnAnySessionClosed(MediaManager.MediaSession mediaSession)
7279
{
73-
mediasession.OnSessionClosed -= MediaManager_OnAnySessionClosed;
74-
_mediaSessions.Remove(mediasession.Id);
80+
mediaSession.OnSessionClosed -= MediaManager_OnAnySessionClosed;
81+
_mediaSessions.Remove(mediaSession.Id);
7582

7683
if (_mediaSessions.Count == 0)
7784
{
@@ -85,9 +92,11 @@ private void MediaManager_OnAnySessionClosed(MediaManager.MediaSession mediasess
8592
}
8693
}
8794

88-
private void MediaManager_OnAnyPlaybackStateChanged(MediaManager.MediaSession mediasession, GlobalSystemMediaTransportControlsSessionPlaybackInfo playbackinfo)
95+
private void MediaManager_OnAnyPlaybackStateChanged(MediaManager.MediaSession mediaSession,
96+
GlobalSystemMediaTransportControlsSessionPlaybackInfo playbackInfo)
8997
{
9098
UpdateButtons();
99+
DataModel.MediaState = playbackInfo.PlaybackStatus;
91100
}
92101

93102
private void UpdateButtons()

Artemis.MediaInfo/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
"Main": "Artemis.MediaInfo.dll",
77
"Name": "Media Info",
88
"Repository": "https://github.com/Aytackydln/Artemis.MediaInfo",
9-
"Version": "0.0.1.0"
9+
"Version": "0.0.2.0"
1010
}

0 commit comments

Comments
 (0)