46 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|