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

46 lines
1.4 KiB
C#

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;
}
}