mirror of
https://github.com/LanZhan-Harmony/WindowsMusicPlayer-TheUntamedMusicPlayer.git
synced 2026-05-07 19:59:13 +08:00
192 lines
6.0 KiB
C#
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
|
|
);
|
|
}
|
|
}
|