using System.Threading.Tasks; using CommunityToolkit.Diagnostics; using StrixMusic.Sdk; using StrixMusic.Sdk.ViewModels; using StrixMusic.Sdk.WinUI.Controls.Collections.Events; using StrixMusic.Shells.ZuneDesktop.Controls.Views.Items; using Windows.System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; namespace StrixMusic.Shells.ZuneDesktop.Controls.Views.Collections { /// /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class CollectionContent : UserControl { /// /// Initializes a new instance of the class. /// public CollectionContent() { this.InitializeComponent(); Loaded += CollectionContent_Loaded; } private void CollectionContent_Loaded(object sender, RoutedEventArgs e) { Loaded -= CollectionContent_Loaded; ZuneAlbumCollection.ZuneCollectionType = CollectionContentType.Artist; SwapPage("Artists"); } /// /// The root used by the shell. /// public StrixDataRootViewModel? DataRoot { get { return (StrixDataRootViewModel)GetValue(DataRootProperty); } set { SetValue(DataRootProperty, value); } } /// /// The backing dependency property for . /// public static readonly DependencyProperty DataRootProperty = DependencyProperty.Register(nameof(DataRoot), typeof(StrixDataRootViewModel), typeof(CollectionContent), new PropertyMetadata(null)); /// /// Trigger animation on the if its visible. /// public void AnimateAlbumCollection() { if (ZuneAlbumCollection.Visibility == Visibility.Visible && ZuneAlbumCollection.AlbumsLoaded) { ZuneAlbumCollection.AnimateCollection(); } } private void SwapPage(string pageVisualStateName) { AnimateAlbumCollection(); VisualStateManager.GoToState(this, pageVisualStateName, true); PageTransition.Begin(); ClearSelections(); } private void ArtistsPageSelected(object sender, RoutedEventArgs e) { ZuneAlbumCollection.ZuneCollectionType = CollectionContentType.Artist; SwapPage("Artists"); } private void AlbumsPageSelected(object sender, RoutedEventArgs e) { ZuneAlbumCollection.ZuneCollectionType = CollectionContentType.Albums; SwapPage("Albums"); } private void SongsPageSelected(object sender, RoutedEventArgs e) { ZuneAlbumCollection.ZuneCollectionType = CollectionContentType.Tracks; SwapPage("Songs"); } private void PlaylistPageSelected(object sender, RoutedEventArgs e) { SwapPage("Playlists"); } private void ArtistSelected(object sender, SelectionChangedEventArgs e) { if (e.SelectedItem == null) return; e.SelectedItem.PopulateMoreAlbumsCommand.Execute(e.SelectedItem.TotalAlbumItemsCount); ZuneAlbumCollection.Collection = e.SelectedItem; e.SelectedItem.PopulateMoreTracksCommand.Execute(e.SelectedItem.TotalTrackCount); TrackCollection.Collection = e.SelectedItem; } private void AlbumSelected(object sender, SelectionChangedEventArgs e) { if (e.SelectedItem == null) return; e.SelectedItem.PopulateMoreTracksCommand.Execute(e.SelectedItem.TotalTrackCount); TrackCollection.Collection = e.SelectedItem; } private void PlaylistSelected(object sender, SelectionChangedEventArgs e) { if (e.SelectedItem == null) return; e.SelectedItem.PopulateMoreTracksCommand.Execute(e.SelectedItem.TotalTrackCount); TrackTable.Collection = e.SelectedItem; DetailsPane.DataContext = e.SelectedItem; } private void ClearSelections() { if (DataRoot == null) return; ArtistCollection.ClearSelected(); ZuneAlbumCollection.ClearSelected(); TrackTable.ClearSelected(); TrackCollection.ClearSelected(); PlaylistCollection.ClearSelected(); // Clears by rebinding TrackTable.DataContext = null; Guard.IsNotNull(DataRoot?.Library, nameof(DataRoot.Library)); ArtistCollection.Collection = (LibraryViewModel)DataRoot.Library; ZuneAlbumCollection.Collection = (LibraryViewModel)DataRoot.Library; TrackCollection.Collection = (LibraryViewModel)DataRoot.Library; TrackTable.Collection = (LibraryViewModel)DataRoot.Library; PlaylistCollection.Collection = (LibraryViewModel)DataRoot.Library; DetailsPane.DataContext = null; } private void Grid_KeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Escape) { ClearSelections(); } } } }