62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
using Harmonia.Core.Engine;
|
|
using Harmonia.Core.Player;
|
|
using Harmonia.Core.Playlists;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Harmonia.WinUI.Session;
|
|
|
|
public class SessionRestorer(
|
|
ISessionService sessionService,
|
|
IPlaylistManager playlistManager,
|
|
IAudioPlayer audioPlayer) : ISessionRestorer
|
|
{
|
|
public async Task RestoreAsync()
|
|
{
|
|
RestorePlaylist();
|
|
await RestoreAudioPlayerAsync();
|
|
}
|
|
|
|
private void RestorePlaylist()
|
|
{
|
|
PlaylistState playlistState = sessionService.Session.Playlist;
|
|
|
|
if (string.IsNullOrWhiteSpace(playlistState.OpenPlaylistUID))
|
|
return;
|
|
|
|
Playlist? playlist = playlistManager.Playlists.FirstOrDefault(p => p.UID == playlistState.OpenPlaylistUID);
|
|
|
|
if (playlist is null)
|
|
return;
|
|
|
|
playlistManager.CurrentPlaylist = playlist;
|
|
}
|
|
|
|
private async Task RestoreAudioPlayerAsync()
|
|
{
|
|
AudioPlayerState audioPlayerState = sessionService.Session.Player;
|
|
audioPlayer.Volume = audioPlayerState.Volume;
|
|
audioPlayer.IsMuted = audioPlayerState.IsMuted;
|
|
|
|
if (string.IsNullOrWhiteSpace(audioPlayerState.PlaylistSongUID))
|
|
return;
|
|
|
|
Playlist? playlist = playlistManager.FindPlaylistContaining(audioPlayerState.PlaylistSongUID);
|
|
|
|
if (playlist is null)
|
|
return;
|
|
|
|
PlaylistSong? playlistSong = playlist.Songs.FirstOrDefault(s => s.UID == audioPlayerState.PlaylistSongUID);
|
|
|
|
if (playlistSong is null)
|
|
return;
|
|
|
|
await audioPlayer.LoadAsync(playlistSong, PlaybackMode.LoadOnly);
|
|
|
|
if (audioPlayerState.Position > 0 && audioPlayerState.Position <= playlistSong.Song.Length.TotalSeconds)
|
|
audioPlayer.Position = audioPlayerState.Position;
|
|
|
|
if (audioPlayerState.PlaybackState == AudioPlaybackState.Playing)
|
|
audioPlayer.Play();
|
|
}
|
|
} |