Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 35 additions & 3 deletions FluentFlyoutWPF/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public partial class MainWindow : MicaWindow
private long _lastFlyoutTime = 0;

public readonly WindowsMediaController.MediaManager mediaManager = new();
private MediaSession wasPlayingSession;

// for detecting changes in settings (lazy way)
private int _position = SettingsManager.Current.Position;
Expand Down Expand Up @@ -499,7 +500,10 @@ public void openLogsFolder(object? sender, EventArgs e)
}
}

private void pauseOtherMediaSessionsIfNeeded(MediaSession mediaSession)
/**
* Can either pause all or resume previous session based on setting
*/
private void modifyOtherMediaSessionsIfNeeded(MediaSession mediaSession)
{
if (
SettingsManager.Current.PauseOtherSessionsEnabled
Expand All @@ -508,14 +512,25 @@ private void pauseOtherMediaSessionsIfNeeded(MediaSession mediaSession)
{
PauseOtherSessions(mediaSession);
}

// temporary feature testing
var ps = mediaSession.ControlSession.GetPlaybackInfo().PlaybackStatus;
if (ps == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused)
{
if (wasPlayingSession != null && wasPlayingSession.Id != mediaSession.Id && wasPlayingSession.ControlSession.GetPlaybackInfo().PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused)
{
PlaySession(wasPlayingSession);
}
}
}


private void CurrentSession_OnPlaybackStateChanged(MediaSession mediaSession, GlobalSystemMediaTransportControlsSessionPlaybackInfo? playbackInfo = null)
{
#if DEBUG
Logger.Debug("Playback state changed: " + mediaSession.Id + " " + mediaSession.ControlSession.GetPlaybackInfo().PlaybackStatus);
#endif
pauseOtherMediaSessionsIfNeeded(mediaSession);
modifyOtherMediaSessionsIfNeeded(mediaSession);

var focusedSession = mediaManager.GetFocusedSession();
if (focusedSession == null)
Expand All @@ -542,6 +557,7 @@ private void CurrentSession_OnPlaybackStateChanged(MediaSession mediaSession, Gl
// for determining whether MediaPropertyChanged has no changes
private string previousMediaProperty = "";
private int previousMediaPropertyThumbnail = 0;

private void MediaManager_OnAnyMediaPropertyChanged(MediaSession mediaSession, GlobalSystemMediaTransportControlsSessionMediaProperties mediaProperties)
{
// sometimes mediaSession.ControlSession can be null
Expand Down Expand Up @@ -580,7 +596,7 @@ private void MediaManager_OnAnyMediaPropertyChanged(MediaSession mediaSession, G
BitmapHelper.GetDominantColors(1);
taskbarWindow?.UpdateUi(songInfo.Title, songInfo.Artist, thumbnail, playbackInfo.PlaybackStatus, playbackInfo.Controls);

pauseOtherMediaSessionsIfNeeded(mediaSession);
modifyOtherMediaSessionsIfNeeded(mediaSession);

if (SettingsManager.Current.NextUpEnabled && !FullscreenDetector.IsFullscreenApplicationRunning()) // show NextUpWindow if enabled in settings
{
Expand Down Expand Up @@ -653,6 +669,11 @@ private void MediaManager_OnAnySessionClosed(MediaSession mediaSession)
#if DEBUG
Logger.Debug("Session closed: " + (mediaSession.Id).ToString());
#endif
if (wasPlayingSession != null && wasPlayingSession.Id != mediaSession.Id)
{
PlaySession(wasPlayingSession);
}

var focusedSession = mediaManager.GetFocusedSession();

if (focusedSession == null)
Expand Down Expand Up @@ -1569,12 +1590,23 @@ private Task PauseOtherSessions(MediaSession currentMediaSession)
session.ControlSession.GetPlaybackInfo().PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Playing
)
{
wasPlayingSession = session;
return session.ControlSession.TryPauseAsync().AsTask();
}
return Task.CompletedTask;
})
);
}

private Task PlaySession(MediaSession mediaSession)
{
if (mediaSession.ControlSession.GetPlaybackInfo().PlaybackStatus == GlobalSystemMediaTransportControlsSessionPlaybackStatus.Paused)
{
return mediaSession.ControlSession.TryPlayAsync().AsTask();
}
return Task.CompletedTask;
}

internal void ToggleBlur()
{
if (SettingsManager.Current.MediaFlyoutAcrylicWindowEnabled)
Expand Down