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