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; audioPlayer.PropertyChanged += OnAudioPlayerPropertyChanged; } 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; } private void OnAudioPlayerPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(IAudioPlayer.State): sessionService.Session.Player.PlaybackState = audioPlayer.State; break; } } public void Capture() { sessionService.Session.Player.Position = audioPlayer.Position; } }