Example #1
0
        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);
        }
Example #2
0
        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");
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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());
        }