Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }