public static List <trackObj> getPlaylistsDuplicates(string playlistName) { PrivateProfile profile = api.GetPrivateProfile(); Paging <SimplePlaylist> playlists = api.GetUserPlaylists(profile.Id); Console.WriteLine($"Look at playlist: {playlistName}"); List <trackObj> processedTracks = new List <trackObj>(); List <trackObj> rtn = new List <trackObj>(); do { playlists.Items.ForEach(playlist => { if (playlist.Name == playlistName || (playlist.Id == playlistName)) { //Console.WriteLine($"Checking playlist: {playlist.Name}"); Paging <PlaylistTrack> PTracks = api.GetPlaylistTracks(playlist.Id, "", 100, 0); int counter = 0; List <FullTrack> tracks = new List <FullTrack>(); while (counter < PTracks.Total) { PTracks.Items.ForEach(tr => { tracks.Add(tr.Track); }); counter += PTracks.Items.Count; PTracks = api.GetPlaylistTracks(playlist.Id, "", 100, counter); } //Console.WriteLine("tracks.Total: " + PTracks.Total); tracks.ForEach(track => { if (track != null) { trackObj tO = new trackObj { albumId = track.Album.Id, uri = track.Uri, artists = track.Artists, artistsNames = track.Artists.Select(r => r.Name).ToList(), duration = track.DurationMs, id = track.Id, name = track.Name.Trim(), actualName = getActualSongName(track.Name.Trim()).str, isRemix = getActualSongName(track.Name.Trim()).bol }; processedTracks.ForEach(pTrack => { double distance = JaroWinklerDistance.proximity(tO.actualName, pTrack.actualName); if (distance >= 0.9) { List <SimpleArtist> PTDub = new List <SimpleArtist>(); List <SimpleArtist> PTnonDub = new List <SimpleArtist>(); List <SimpleArtist> tODub = new List <SimpleArtist>(); List <SimpleArtist> tOnonDub = new List <SimpleArtist>(); pTrack.artists.ForEach(artist => { double highestDistance = 0.0; tO.artists.ForEach(artist2 => { double distance2 = JaroWinklerDistance.proximity(artist.Name, artist2.Name); if (distance2 > highestDistance) { highestDistance = distance2; } }); if (highestDistance >= 0.8) { PTDub.Add(artist); } else { PTnonDub.Add(artist); } }); tO.artists.ForEach(artist => { double highestDistance = 0.0; pTrack.artists.ForEach(artist2 => { double distance2 = JaroWinklerDistance.proximity(artist.Name, artist2.Name); if (distance2 > highestDistance) { highestDistance = distance2; } }); if (highestDistance >= 0.8) { tODub.Add(artist); } else { tOnonDub.Add(artist); } }); pTrack.dupList.Add(new trackDistance { distance = distance, track = tO, nonDupArtists = tOnonDub, dupArtists = tODub }); trackObj tmp = pTrack; tmp.dupList = new List <trackDistance>(); tO.dupList.Add(new trackDistance { distance = distance, track = tmp, nonDupArtists = PTnonDub, dupArtists = PTDub }); } }); processedTracks.Add(tO); } }); processedTracks.ForEach(pTrack => { if (pTrack.dupList.Count >= 1) { pTrack.dupList = pTrack.dupList.OrderBy(o => o.distance).ToList(); rtn.Add(pTrack); //string joinedString = string.Join(", ", pTrack.dupList); //Console.WriteLine(pTrack.name + ": " + joinedString); } }); } }); playlists = api.GetNextPage(playlists); } while(playlists.HasNextPage()); return(rtn); }
private static void PrintUsefulData() { PrivateProfile profile = api.GetPrivateProfile(); string name = string.IsNullOrEmpty(profile.DisplayName) ? profile.Id : profile.DisplayName; Console.WriteLine($"Hello there, {name}!"); Console.WriteLine("Your playlists:"); Paging <SimplePlaylist> playlists = api.GetUserPlaylists(profile.Id); do { playlists.Items.ForEach(playlist => { Console.WriteLine($"- ({playlist.Id}){playlist.Name}"); }); playlists = api.GetNextPage(playlists); } while(playlists.HasNextPage()); playlists = api.GetUserPlaylists(profile.Id); Console.Write("Enter playlist name or ID: "); string playlistName = Console.ReadLine(); Console.WriteLine($"Look at playlist: {playlistName}"); List <trackObj> processedTracks = new List <trackObj>(); do { playlists.Items.ForEach(playlist => { if (playlist.Name == playlistName || (playlist.Id == playlistName)) { Console.WriteLine($"Checking playlist: {playlist.Name}"); Paging <PlaylistTrack> PTracks = api.GetPlaylistTracks(playlist.Id, "", 100, 0); int counter = 0; List <FullTrack> tracks = new List <FullTrack>(); while (counter < PTracks.Total) { PTracks.Items.ForEach(tr => { tracks.Add(tr.Track); }); counter += PTracks.Items.Count; PTracks = api.GetPlaylistTracks(playlist.Id, "", 100, counter); } Console.WriteLine("tracks.Total: " + PTracks.Total); tracks.ForEach(track => { trackObj tO = new trackObj { albumId = track.Album.Id, artists = track.Artists, artistsNames = track.Artists.Select(r => r.Name).ToList(), duration = track.DurationMs, id = track.Id, name = track.Name.Trim(), actualName = getActualSongName(track.Name.Trim()).str, isRemix = getActualSongName(track.Name.Trim()).bol }; processedTracks.ForEach(pTrack => { double distance = JaroWinklerDistance.proximity(tO.actualName, pTrack.actualName); if (distance >= 0.9) { trackDistance PTrackDistance = new trackDistance { distance = distance, track = tO }; trackDistance tOTrackDistance = new trackDistance { distance = distance, track = pTrack }; pTrack.artists.ForEach(artist => { double highestDistance = 0.0; tO.artists.ForEach(artist2 => { double distance2 = JaroWinklerDistance.proximity(artist.Name, artist2.Name); if (distance2 > highestDistance) { highestDistance = distance2; } }); if (highestDistance >= 0.9) { PTrackDistance.dupArtists.Add(artist); } else { PTrackDistance.nonDupArtists.Add(artist); } }); tO.artists.ForEach(artist => { double highestDistance = 0.0; pTrack.artists.ForEach(artist2 => { double distance2 = JaroWinklerDistance.proximity(artist.Name, artist2.Name); if (distance2 > highestDistance) { highestDistance = distance2; } }); if (highestDistance >= 0.9) { tOTrackDistance.dupArtists.Add(artist); } else { tOTrackDistance.nonDupArtists.Add(artist); } }); pTrack.dupList.Add(PTrackDistance); tO.dupList.Add(tOTrackDistance); } }); processedTracks.Add(tO); }); processedTracks.ForEach(pTrack => { if (pTrack.dupList.Count >= 1) { pTrack.dupList = pTrack.dupList.OrderBy(o => o.distance).ToList(); string joinedString = string.Join(", ", pTrack.dupList); pTrack.dupList.ForEach(dupTrack => { }); //Console.WriteLine(pTrack.name + ": " + joinedString); } }); } }); playlists = api.GetNextPage(playlists); } while(playlists.HasNextPage()); }