//saving spotify full tracks using viez. public static async Task <SavingError> SaveSpotifyTrackLevel1(FullTrack track, bool manualMatch = false) { //clean track only english letters track.Name = SongSavingHelper.ToCleanQuery(track.Name); track.Artist.Name = SongSavingHelper.ToCleanQuery(track.Artist.Name); track.Album.Name = SongSavingHelper.ToCleanQuery(track.Album.Name); //check if it is track properties are noll or not; if (!CheckUp(track)) { ShowResults(SavingError.Unknown, track.Name); return(SavingError.Unknown); } if (App.Locator.CollectionService.SongAlreadyExists(track.Name, track.Album.Name, track.Artist.Name)) { ShowResults(SavingError.AlreadyExists, track.Name); return(SavingError.AlreadyExists); } SavingError result; try { var album = await App.Locator.Spotify.GetAlbum(track.Album.Id); result = await SaveSpotifyTrackLevel2(track, album); } catch { result = SavingError.Network; } return(result); }
public static async Task <SavingError> SaveViezTrackLevel1(WebSong track) { if (!string.IsNullOrEmpty(track.Id) && track.Provider != Data.Mp3Provider.YouTube) { track.Album = await GetAlbumName(track.Id); } else if (track.Album.ToLower().Contains("unknown") || track.Album.ToLower().Contains("various") || track.Album.ToLower().Contains("random")) { await SaveViezTrackFindAlbum(track); } //clean track only english letters track.Name = SongSavingHelper.ToCleanQuery(track.Name); track.Artist = SongSavingHelper.ToCleanQuery(track.Artist); track.Album = SongSavingHelper.ToCleanQuery(track.Album); //check if it is track properties are noll or not; if (!CheckUp(track)) { ShowResults(SavingError.Unknown, track.Name); return(SavingError.Unknown); } if (App.Locator.CollectionService.ViezSongAlreadyExists(track.Name, track.Album, track.Artist)) { ShowResults(SavingError.AlreadyExists, track.Name); return(SavingError.AlreadyExists); } if (App.Locator.Network.IsActive) { var result = await SaveViezTrackLevel2(track); return(result); } ShowResults(SavingError.Network, track.Name); return(SavingError.Network); }
public static async Task <SavingError> SaveSpotifyChartTrackLevel1(ChartTrack chartTrack) { //clean track only english letters chartTrack.Name = SongSavingHelper.ToCleanQuery(chartTrack.Name); chartTrack.ArtistName = SongSavingHelper.ToCleanQuery(chartTrack.ArtistName); chartTrack.album_name = SongSavingHelper.ToCleanQuery(chartTrack.album_name); //check if it is track properties are noll or not; if (!CheckUp(chartTrack)) { ShowResults(SavingError.Unknown, chartTrack.Name); return(SavingError.Unknown); } //checking for duplicate songs. if (App.Locator.CollectionService.SongAlreadyExists(chartTrack.Name, chartTrack.album_name, chartTrack.ArtistName)) { ShowResults(SavingError.AlreadyExists, chartTrack.Name); return(SavingError.AlreadyExists); } //getting track metadata from spotify and search using viez. var track = await App.Locator.Spotify.GetTrack(chartTrack.track_id); if (track != null) { var album = await App.Locator.Spotify.GetAlbum(track.Album.Id); var result = await SaveSpotifyTrackLevel2(track, album); return(result); } //network fail ShowResults(SavingError.Network, chartTrack.Name); return(SavingError.Network); }
public static async Task SaveSpotifyAlbumLevel1(FullAlbum album) { if (album.Tracks.Items.Count == 0) { ToastManager.ShowError("Nothing found."); return; } //clean track only english letters album.Name = SongSavingHelper.ToCleanQuery(album.Name); album.Artist.Name = SongSavingHelper.ToCleanQuery(album.Artist.Name); foreach (var obj in album.Tracks.Items) { obj.Name = SongSavingHelper.ToCleanQuery(obj.Name); } //check if it is track properties are noll or not; if (!CheckUp(album)) { ShowResults(SavingError.Unknown, album.Name); return; } var alreadySaving = SpotifySavingAlbums.FirstOrDefault(p => p == album.Id) != null; if (alreadySaving) { ShowResults(SavingError.AlreadySaving, album.Name); return; } SpotifySavingAlbums.Add(album.Id); //ignore //problem when os is not under this thread. //solution: use dispatcher. //testing under android pending. while (!App.Locator.CollectionService.IsLibraryLoaded) { } //var collAlbum = App.Locator.CollectionService.Albums.FirstOrDefault(p => p.ProviderId.Contains(album.Id)); var collAlbum = App.Locator.CollectionService.Albums.FirstOrDefault(p => string.Equals(p.Name.ToLower(), album.Name.ToLower())); var alreadySaved = collAlbum != null; if (alreadySaved) { var missingTracks = collAlbum.Songs.Count < album.Tracks.Items.Count; if (!missingTracks) { ShowResults(SavingError.AlreadyExists, album.Name); SpotifySavingAlbums.Remove(album.Id); return; } } ToastManager.ShowError("Saving " + album.Name + "."); var index = 0; if (!alreadySaved) { SavingError result; do { // first save one song (to avoid duplicate album creation) result = await SaveSpotifyTrackLevel3(album.Tracks.Items[index], album, false); index++; }while (result != SavingError.None && index < album.Tracks.Items.Count); } bool success; var missing = false; if (album.Tracks.Items.Count > 1) { App.Locator.SqlService.BeginTransaction(); // save the rest at the rest time var songs = album.Tracks.Items.Skip(index).Select(track => SaveSpotifyTrackLevel3(track, album, false)); var results = await Task.WhenAll(songs); // now wait a split second before showing success message await Task.Delay(1000); var alreadySavedCount = results.Count(p => p == SavingError.AlreadyExists); var successCount = results.Count( p => p == SavingError.None || p == SavingError.AlreadyExists || p == SavingError.AlreadySaving); var missingCount = successCount == 0 ? -1 : album.Tracks.Items.Count - (successCount + index); success = missingCount == 0; missing = missingCount > 0; if (missing) { ToastManager.ShowError("Problem while saving " + missingCount + " tracks."); } App.Locator.SqlService.Commit(); } else { success = App.Locator.CollectionService.Albums.FirstOrDefault(p => p.ProviderId.Contains(album.Id)) != null; } if (success) { ShowResults(SavingError.None, album.Name); } else if (!missing) { ShowResults(SavingError.Unknown, album.Name); } SpotifySavingAlbums.Remove(album.Id); if (collAlbum == null) { collAlbum = App.Locator.CollectionService.Albums.FirstOrDefault(p => string.Equals(p.Name.ToLower(), album.Name.ToLower())); if (collAlbum != null && !collAlbum.HasArtwork && !collAlbum.NoArtworkFound) { await DownloadArtworks.SaveAlbumImageAsync(collAlbum, album.Images[0].Url); } if (App.Locator.Setting.SpotifyArtworkSync) { await DownloadArtworks.DownloadArtistsArtworkAsyncFromSpotify(false, album.Artist.Name); } else { await DownloadArtworks.DownloadArtistsArtworkAsync(false, album.Artist.Name); } } }