private Action Remove(Alert alert) { return(async() => { await Task.Delay(3000); Alerts.Remove(alert); RequestRefresh?.Invoke(); }); }
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(); }
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); }
public void RaiseRequestRefresh() => RequestRefresh?.Invoke(this, EventArgs.Empty);
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); }