Files
WindowsMusicPlayer-TheUntam…/UntamedMusicPlayer/ViewModels/LocalArtistDetailViewModel.cs
2026-01-19 12:04:12 +08:00

192 lines
6.0 KiB
C#

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media.Animation;
using UntamedMusicPlayer.Contracts.Models;
using UntamedMusicPlayer.Contracts.Services;
using UntamedMusicPlayer.Models;
using UntamedMusicPlayer.Views;
namespace UntamedMusicPlayer.ViewModels;
public sealed class LocalArtistDetailViewModel
{
private readonly ILocalSettingsService _localSettingsService =
App.GetService<ILocalSettingsService>();
public LocalArtistInfo Artist { get; set; } = Data.SelectedLocalArtist!;
public List<LocalArtistAlbumInfo> AlbumList { get; set; }
public LocalArtistDetailViewModel()
{
AlbumList = Data.MusicLibrary.GetAlbumsByArtist(Artist);
}
public void PlayAllButton_Click(object _1, RoutedEventArgs _2)
{
Data.PlayQueueManager.SetNormalPlayQueue(
$"LocalSongs:Artist:{Artist.Name}",
ConvertAllSongsToFlatArray()
);
Data.MusicPlayer.PlaySongByInfo(AlbumList[0].SongList[0]);
}
public void ShuffledPlayAllButton_Click(object _1, RoutedEventArgs _2)
{
Data.PlayQueueManager.SetShuffledPlayQueue(
$"ShuffledLocalSongs:Artist:{Artist.Name}",
ConvertAllSongsToFlatArray()
);
Data.MusicPlayer.PlaySongByIndexedInfo(Data.PlayQueueManager.CurrentQueue[0]);
}
public async void AddToPlaylistFlyoutButton_Click(PlaylistInfo playlist)
{
await Data.PlaylistLibrary.AddToPlaylist(playlist, ConvertAllSongsToFlatArray());
}
public void AddToPlayQueueFlyoutButton_Click()
{
var allSongs = ConvertAllSongsToFlatArray();
if (Data.PlayQueueManager.CurrentQueue.Count == 0)
{
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Artist:{Artist.Name}", allSongs);
Data.MusicPlayer.PlaySongByInfo(allSongs[0]);
}
else
{
Data.PlayQueueManager.AddSongsToEnd(allSongs);
}
}
public void SongListView_ItemClick(BriefLocalSongInfo info)
{
Data.PlayQueueManager.SetNormalPlayQueue(
$"LocalSongs:Artist:{Artist.Name}",
ConvertAllSongsToFlatArray()
);
Data.MusicPlayer.PlaySongByInfo(info);
}
public void SongListViewPlayButton_Click(BriefLocalSongInfo info)
{
Data.PlayQueueManager.SetNormalPlayQueue(
$"LocalSongs:Artist:{Artist.Name}",
ConvertAllSongsToFlatArray()
);
Data.MusicPlayer.PlaySongByInfo(info);
}
public void SongListViewPlayNextButton_Click(BriefLocalSongInfo info)
{
if (Data.PlayQueueManager.CurrentQueue.Count == 0)
{
var list = new List<BriefLocalSongInfo> { info };
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Artist:{Artist.Name}:Part", list);
Data.MusicPlayer.PlaySongByInfo(info);
}
else
{
Data.PlayQueueManager.AddSongsToNextPlay([info]);
}
}
public void SongListViewAddToPlayQueueButton_Click(BriefLocalSongInfo info)
{
if (Data.PlayQueueManager.CurrentQueue.Count == 0)
{
var list = new List<BriefLocalSongInfo> { info };
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Artist:{Artist.Name}:Part", list);
Data.MusicPlayer.PlaySongByInfo(info);
}
else
{
Data.PlayQueueManager.AddSongsToEnd([info]);
}
}
public async void SongListViewAddToPlaylistButton_Click(
BriefLocalSongInfo info,
PlaylistInfo playlist
)
{
await Data.PlaylistLibrary.AddToPlaylist(playlist, info);
}
public void SongListViewShowAlbumButton_Click(BriefLocalSongInfo info)
{
var localAlbumInfo = Data.MusicLibrary.GetAlbumInfoBySong(info.Album);
if (localAlbumInfo is not null)
{
Data.SelectedLocalAlbum = localAlbumInfo;
Data.ShellPage!.Navigate(
nameof(LocalAlbumDetailPage),
"",
new SuppressNavigationTransitionInfo()
);
}
}
public void AlbumGridViewPlayButton_Click(LocalArtistAlbumInfo info)
{
var songList = info.SongList;
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Album:{info.Name}", songList);
Data.MusicPlayer.PlaySongByInfo(songList[0]);
}
public void AlbumGridViewPlayNextButton_Click(LocalArtistAlbumInfo info)
{
var songList = info.SongList;
if (Data.PlayQueueManager.CurrentQueue.Count == 0)
{
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Album:{info.Name}", songList);
Data.MusicPlayer.PlaySongByInfo(songList[0]);
}
else
{
Data.PlayQueueManager.AddSongsToNextPlay(songList);
}
}
public void AlbumGridViewAddToPlayQueueButton_Click(LocalArtistAlbumInfo info)
{
var songList = info.SongList;
if (Data.PlayQueueManager.CurrentQueue.Count == 0)
{
Data.PlayQueueManager.SetNormalPlayQueue($"LocalSongs:Album:{info.Name}", songList);
Data.MusicPlayer.PlaySongByInfo(songList[0]);
}
else
{
Data.PlayQueueManager.AddSongsToEnd(songList);
}
}
public async void AlbumGridViewAddToPlaylistButton_Click(
LocalArtistAlbumInfo info,
PlaylistInfo playlist
)
{
await Data.PlaylistLibrary.AddToPlaylist(playlist, info.SongList);
}
private IBriefSongInfoBase[] ConvertAllSongsToFlatArray()
{
return [.. AlbumList.SelectMany(album => album.SongList)];
}
public async Task<int> LoadSelectionBarSelectedIndex()
{
return await _localSettingsService.ReadSettingAsync<int>(
"LocalArtistDetailSelectionBarSelectedIndex"
);
}
public async void SaveSelectionBarSelectedIndex(int selectedIndex)
{
await _localSettingsService.SaveSettingAsync(
"LocalArtistDetailSelectionBarSelectedIndex",
selectedIndex
);
}
}