Esempio n. 1
0
        public async Task SyncTracksAsync(PlaylistGenerationContext context)
        {
            FullTrack[] toDelete = context.TargetTracks
                                   .Where(t => !context.SourceTracks.Any(s => s.Id == t.Id))
                                   .ToArray();

            FullTrack[] toAdd = context.SourceTracks
                                .Where(s => !context.TargetTracks.Any(t => t.Id == s.Id))
                                .ToArray();

            foreach (IEnumerable <FullTrack> batch in toDelete.Batch(100))
            {
                PlaylistRemoveItemsRequest req = new PlaylistRemoveItemsRequest
                {
                    Tracks = batch.Select(o => new PlaylistRemoveItemsRequest.Item {
                        Uri = o.Uri
                    }).ToList()
                };

                SnapshotResponse res = await context.Client.Playlists.RemoveItems(context.TargetPlaylist.Id, req);
            }

            foreach (IEnumerable <FullTrack> batch in toAdd.Batch(100))
            {
                SnapshotResponse res = await context.Client.Playlists.AddItems(context.TargetPlaylist.Id, new PlaylistAddItemsRequest(batch.Select(o => o.Uri).ToList()));
            }

            context.TargetTracks = context.TargetTracks
                                   .Except(toDelete)
                                   .Concat(toAdd)
                                   .ToList();
        }
Esempio n. 2
0
        public async Task ExecuteGenerationAsync(PlaylistDefinition playlistDefinition)
        {
            PlaylistGenerationContext context = await _generationContextBuilder.CreateContextAsync(playlistDefinition);

            await _syncWorker.SyncTracksAsync(context);

            await _syncWorker.SyncSortingAsync(context);
        }
Esempio n. 3
0
        public async Task SyncSortingAsync(PlaylistGenerationContext context)
        {
            for (int i = 0; i < context.SourceTracks.Count; i++)
            {
                FullTrack track = context.SourceTracks[i];

                int curIndex = context.TargetTracks.FindIndex(o => o.Id == track.Id);

                if (curIndex != i)
                {
                    await context.Client.Playlists.ReorderItems(context.TargetPlaylist.Id, new PlaylistReorderItemsRequest(curIndex, i));

                    context.TargetTracks = context.TargetTracks.Move(curIndex, 1, i).ToList();
                }
            }
        }