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(); audioPlayerState.Volume = audioPlayer.Volume; audioPlayerState.IsMuted = audioPlayer.IsMuted; } private AudioPlaybackState GetSemanticPlaybackState() { if (audioPlayer.PlayingSong is null) return AudioPlaybackState.Stopped; return audioPlayer.State == AudioPlaybackState.Playing ? AudioPlaybackState.Playing : AudioPlaybackState.Paused; } }