async Task <bool> SyncLibrary(string href = "") { try { var resp = await SyncRequestQueue.Enqueue(1, () => string.IsNullOrWhiteSpace(href)?Api.GetFavorites() : Api.Get <SApiResponse <STrack> >(href)).ConfigureAwait(false); Task <bool> nextTask = null; if (!string.IsNullOrWhiteSpace(resp?.NextUrl)) { nextTask = SyncLibrary(resp?.NextUrl); } var tracks = resp?.Items.Select(x => new FullTrackData(x.Title, x.User?.Username, "", "", x.Genre) { Id = x.Id.ToString(), Duration = x.Duration, ArtistServerId = x.UserId.ToString(), MediaType = MediaType.Audio, PlayCount = x.UserPlaybackCount ?? 0, ServiceId = Api.CurrentAccount.Identifier, ServiceType = this.ServiceType, FileExtension = "mp3", Rating = 5, Year = x.ReleaseYear ?? 0, AlbumArtwork = new List <AlbumArtwork> { new AlbumArtwork { Url = x.ArtworkUrl } }, }).ToList(); if ((tracks?.Count ?? 0) == 0) { return(true); } await MusicProvider.ProcessTracks(tracks); if (nextTask != null) { return(await nextTask); } return(true); } catch (Exception ex) { LogManager.Shared.Report(ex); } return(false); }
async Task <bool> GetTracks(string continuation = "") { try { var resp = await SyncRequestQueue.Enqueue(1, () => Api.GetSpecialFolderDelta("music", token: continuation)).ConfigureAwait(false); Task <bool> nextTask = null; if (!string.IsNullOrWhiteSpace(resp?.DeltaToken) && !string.IsNullOrWhiteSpace(resp?.NextLink)) { nextTask = GetTracks(resp?.DeltaToken); } var tracks = resp?.Value.Where(x => x.Audio != null).Select(x => new FullTrackData(x.Audio.Title, x.Audio.Artist, x.Audio.Artist, x.Audio.Album, x.Audio.Genre) { Id = x.Id, Duration = x.Audio.Duration, ArtistServerId = x.Audio.Artist, MediaType = MediaType.Audio, PlayCount = 0, ServiceId = Api.CurrentAccount.Identifier, ServiceType = this.ServiceType, FileExtension = System.IO.Path.GetExtension(x.Name), Rating = 5, Year = x.Audio.Year, }).ToList(); if ((tracks?.Count ?? 0) == 0) { return(true); } await MusicProvider.ProcessTracks(tracks); if (nextTask != null) { return(await nextTask); } Api.ExtraData.LastSongSync = resp.DeltaToken; return(true); } catch (Exception ex) { LogManager.Shared.Report(ex); } return(false); }