public void AddItemToBacklog(SpotifyBaseObject item) { if (!allowedBacklogItems.Contains(item.Type.ToLower())) { throw new InvalidOperationException($"Cannot add a SpotifyBaseIrem of type \"{item.Type}\" to the backlog"); } BacklogItems.Add(item); SessionStateChanged?.Invoke(this, EventArgs.Empty); }
private void CommandBindingViewItem_Executed(object sender, System.Windows.Input.ExecutedRoutedEventArgs e) { SpotifyBaseObject baseObject = null; if (e.OriginalSource is FrameworkElement fe) { if (fe.DataContext is SpotifyBaseObject sbo) { baseObject = sbo; } else if (fe.DataContext is AggregationSearchTrackItem agri) { baseObject = agri.Track; } ViewModelLoggedIn vm = this.DataContext as ViewModelLoggedIn; /* unfortunately, the generic method doesnt recognize the derived type of the SpotifyBaseObject. * This turns in to a problem if the user tries to reload the view tab (because all derived properties will not be return from DataLoader.GetItemByHref<T>()). * Because of that every type has to be handled explicit*/ switch (baseObject) { case null: break; case Playlist playlist: vm.ViewSpotifyBaseObject(playlist); break; case Album album: vm.ViewSpotifyBaseObject(album); break; case User user: vm.ViewSpotifyBaseObject(user); break; case Artist artist: vm.ViewSpotifyBaseObject(artist); break; /* not sure yet whether to implement a view for track or not */ //case Track track: // vm.ViewSpotifyBaseObject(track); // break; default: throw new Exception($"A object with the type {baseObject.GetType().ToString()} cannot be displayed"); } } }
public async Task AddItemToQueue(SpotifyBaseObject item) { if (!allowedBacklogItems.Contains(item.Type.ToLower())) { throw new InvalidOperationException($"Cannot add a SpotifyBaseIrem of type \"{item.Type}\" to the manual queue"); } if (item is Track singleTrack) { CurrentManualQueue.Push(singleTrack); } else { foreach (Track track in await ApiHelper.GetTracks(item, _user)) { CurrentManualQueue.Push(track); } } SessionStateChanged?.Invoke(this, EventArgs.Empty); }
public static async Task <List <Track> > GetTracks(SpotifyBaseObject spi, User user) { DataLoader dataLoader = DataLoader.GetInstance(); IEnumerable <Track> result; switch (spi) { case Playlist pl: result = (await dataLoader.GetAllItemsFromPagingWrapper(pl.Tracks)).Select(x => x.Track); break; case Artist artist: List <Album> albums = await dataLoader.GetArtitstAllAlbums(artist.Id, user.Country); result = ( await albums .Select(async(x) => await GetTracks(x, user)) //returns IEnumerable<Task<IEnumerable<Track>>> .Aggregate(async(y, z) => new List <Track>((await y).Union(await z))) //returns Task<IEnumerable<Track>> ) //returns IEnumerable<Track> .Distinct(new SpotifyObjectEqualityComparere()) //filters track (propably useless) .Select(x => (Track)x); //selects actual tracks (Filter retuerns SpotifyBaseObjects) break; case Album album: result = (await dataLoader.GetAblumAllTracks(album.Id)); break; default: throw new ArgumentException("The parameter provided has not a valid Type", "spi"); } return(result.Where(x => x?.Available_Markets != null && x.Available_Markets.Contains(user.Country)).ToList()); }