Ejemplo n.º 1
0
        private Action Remove(Alert alert)
        {
            return(async() =>
            {
                await Task.Delay(3000);

                Alerts.Remove(alert);
                RequestRefresh?.Invoke();
            });
        }
Ejemplo n.º 2
0
        public void PushMessage(AlertMessageEnum type, string message, bool isAutoRemovable = true)
        {
            var alert = new Alert {
                Message = message, Type = type
            };

            Alerts.Add(alert);
            if (isAutoRemovable)
            {
                Task.Run(Remove(alert));
            }

            RequestRefresh?.Invoke();
        }
Ejemplo n.º 3
0
        public async Task <List <LastFmTrack> > GetTracksList(PlaylistType type, string lastFmUser, int nrToGet)
        {
            var returnValue = new List <LastFmTrack>();
            var perPage     = nrToGet < 100 ? nrToGet : 100;
            var pageNr      = 1;
            var method      = Extensions.GetAttributeNameProperty <PlaylistType, LastFmMethod>(type.ToString());
            var result      = await _client.GetStringAsync($"{_apiUrl}/lastfm/tracks?user={lastFmUser}&method={method}&perpage={perPage}&page={pageNr}");

            var lfmResult   = GetTracksResult(type, result);
            var totalTracks = lfmResult.Attributes.TotalTracks;

            nrToGet = (int)totalTracks < nrToGet ? (int)totalTracks : nrToGet;
            returnValue.AddRange(lfmResult.Tracks);
            while (returnValue.Count < nrToGet)
            {
                if ((nrToGet - returnValue.Count) < perPage)
                {
                    perPage = nrToGet - returnValue.Count;
                }
                pageNr++;
                result = await _client.GetStringAsync($"{_apiUrl}/lastfm/tracks?user={lastFmUser}&method={method}&perpage={perPage}&page={pageNr}");

                returnValue.AddRange(GetTracksResult(type, result).Tracks);
                if (returnValue.Count % 50 == 0)
                {
                    RequestRefresh?.Invoke(this, new MessageEventArgs
                    {
                        Messages = new List <string> {
                            $"{returnValue.Count} of {nrToGet} fetched."
                        },
                        Type = UIUpdateType.Processing
                    });
                }
            }
            return(returnValue);
        }
Ejemplo n.º 4
0
 public void RaiseRequestRefresh() => RequestRefresh?.Invoke(this, EventArgs.Empty);
Ejemplo n.º 5
0
        public async Task <SpotifyPlaylist> CreatePlaylist(string name, List <LastFmTrack> tracks)
        {
            var notFound  = 0;
            var processed = 0;
            var toPost    = new List <SpotifyTrack>();

            _addedTracks = new List <SpotifyTrack>();
            var token = await _localStore.GetItemAsync <string>(Constants.SpotifyTokenKey);

            var user = await _localStore.GetItemAsync <SpotifyUser>(Constants.SpotifyUserKey);

            _client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
            var playlist = new CreateSpotifyPlaylist
            {
                Name = name
            };
            var result = await _client.PostAsJsonAsync($"{_baseUrl}/users/{user.Id}/playlists", playlist);

            if (!result.IsSuccessStatusCode)
            {
                RequestRefresh?.Invoke(this, new MessageEventArgs {
                    Messages = new List <string> {
                        "Could not create playlist."
                    }
                });
                return(null);
            }
            var created = JsonSerializer.Deserialize <SpotifyPlaylist>(await result.Content.ReadAsStringAsync());

            foreach (var lfmTrack in tracks)
            {
                var track = await SearchTrack(lfmTrack.Artist.Name, lfmTrack.Name);

                if (track.NotFound)
                {
                    notFound++;
                }
                else
                {
                    toPost.Add(track);
                    _addedTracks.Add(track);
                }
                processed++;
                if (toPost.Count == 10)
                {
                    var query = string.Join(',', toPost.Select(_ => _.Uri?.ToString()));
                    await _client.PostAsync($"{_baseUrl}/playlists/{created.Id}/tracks?uris={query}", new StringContent(""));

                    toPost.Clear();
                    RequestRefresh?.Invoke(this, new MessageEventArgs
                    {
                        Messages = new List <string> {
                            $"Added {processed} of {tracks.Count}. {notFound} not found."
                        },
                        Type = UIUpdateType.Processing
                    });
                }
            }
            if (toPost.Any())
            {
                var query = string.Join(',', toPost.Select(_ => _.Uri?.ToString()));
                await _client.PostAsync($"{_baseUrl}/playlists/{created.Id}/tracks?uris={query}", new StringContent(""));
            }
            CreationDone?.Invoke(this, new MessageEventArgs
            {
                Type     = UIUpdateType.Done,
                Messages = new List <string>
                {
                    $"Your playlist {name} was created.",
                    $"{tracks.Count - notFound} added.",
                    $"{notFound} tracks could not be found on Spotify.",
                }
            });
            return(created);
        }