using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Sony.Filtr.Applications; using Sony.Filtr.Core.EditorialPlaylists; using Sony.Filtr.Utility.ConsoleUtility; using Sony.Filtr.Utility.Extensions; namespace Sony.Filtr.Worker.Onetime { public class RemoveDuplicatePlaylists { private readonly EditorialPlaylistManager _editorialPlaylistManager; private readonly ApplicationInstanceManager _applicationInstanceManager; public RemoveDuplicatePlaylists(EditorialPlaylistManager editorialPlaylistManager, ApplicationInstanceManager applicationInstanceManager) { _editorialPlaylistManager = editorialPlaylistManager; _applicationInstanceManager = applicationInstanceManager; } public async Task ExecuteAsync() { var allPlaylists = await _editorialPlaylistManager.GetEditorialPlaylistsAsync(null, onlyActive: false, lightWeight: true); var duplicates = allPlaylists.GroupBy(g => g.SpotifyLink.Uri + "|" + g.ApplicationID).Where(g => g.Count() > 1).ToList(); using(var progress = new ConsoleProgressBarCount(duplicates.Count())) { await duplicates.ForEachAsync(10, async duplicateGroup => { var playlists = duplicateGroup.OrderBy(p => p.ID).ToList(); //var playlistToLeave = playlists.First(); //Console.WriteLine("Would leave: " + playlistToLeave.Name + " " + playlistToLeave.ID); foreach (var editorialPlaylist in playlists.Skip(1)) { //Console.WriteLine("Would remove: " + editorialPlaylist.Name + " " + editorialPlaylist.ID); await _editorialPlaylistManager.DeleteEditorialPlaylistAsync(editorialPlaylist); } }, progress); } Console.WriteLine("Clearing caches"); var apps = _applicationInstanceManager.GetApplications(); foreach(var application in apps) { _editorialPlaylistManager.ClearCache(application.ID); } Console.WriteLine("All done"); Console.ReadLine(); } } }