Files
harmonia/Harmonia.WinUI/Session/SessionTracker.cs

48 lines
1.4 KiB
C#

using Harmonia.Core.Engine;
using Harmonia.Core.Player;
using Harmonia.Core.Playlists;
using System;
namespace Harmonia.WinUI.Session;
public class SessionTracker(
ISessionService sessionService,
IPlaylistManager playlistManager,
IAudioPlayer audioPlayer) : ISessionTracker
{
public void Start()
{
playlistManager.CurrentPlaylistChanged += OnCurrentPlaylistChanged;
audioPlayer.PlayingSongChanged += OnPlayingSongChanged;
}
private void OnCurrentPlaylistChanged(object? sender, EventArgs e)
{
PlaylistState playlistState = sessionService.Session.Playlist;
playlistState.OpenPlaylistUID = playlistManager.CurrentPlaylist?.UID;
}
private void OnPlayingSongChanged(object? sender, PlayingSongChangedEventArgs e)
{
AudioPlayerState audioPlayerState = sessionService.Session.Player;
audioPlayerState.PlaylistSongUID = e.NewSong?.UID;
}
public void Capture()
{
AudioPlayerState audioPlayerState = sessionService.Session.Player;
audioPlayerState.Position = audioPlayer.Position;
audioPlayerState.PlaybackState = GetSemanticPlaybackState();
}
private AudioPlaybackState GetSemanticPlaybackState()
{
if (audioPlayer.PlayingSong is null)
return AudioPlaybackState.Stopped;
return audioPlayer.State == AudioPlaybackState.Playing
? AudioPlaybackState.Playing
: AudioPlaybackState.Paused;
}
}