private static async Task <SaveResults> SaveLastTrackLevel3(LastTrack track) { try { //await SaveLastTrackLevel4(track); var preparedSong = track.ToSong(); preparedSong.Album = track.ToAlbum(); preparedSong.Artist = track.ToArtist(); preparedSong.Album.PrimaryArtist = preparedSong.Artist; if (App.Locator.CollectionService.SongAlreadyExists(track.Name, track.AlbumName, track.ArtistName)) { return(new SaveResults() { Error = SavingError.AlreadyExists }); } await App.Locator.CollectionService.AddSongAsync(preparedSong, isLastTrack : true).ConfigureAwait(false); CollectionHelper.MatchSong(preparedSong); return(new SaveResults { Error = SavingError.None, Song = preparedSong }); } catch { return(new SaveResults { Error = SavingError.Unknown }); } }
public static async Task <SaveResults> SaveTrackAsync(LastTrack track) { try { Song preparedSong = null; var providerId = track.ToSong().ProviderId; if (providerId == "lastid.") { preparedSong = await PrepareTrackForDownloadAsync(track); providerId = preparedSong.ProviderId; } var exists = App.Locator.CollectionService.SongAlreadyExists( providerId, track.Name, track.AlbumName, track.ArtistName); if (exists != null) { return(new SaveResults() { Error = SavingError.AlreadyExists, Entry = exists }); } if (preparedSong == null) { preparedSong = await PrepareTrackForDownloadAsync(track); } await App.Locator.CollectionService.AddSongAsync(preparedSong).ConfigureAwait(false); CollectionHelper.MatchSong(preparedSong); return(new SaveResults { Error = SavingError.None, Entry = preparedSong }); } catch (NetworkException) { return(new SaveResults { Error = SavingError.Network }); } catch { return(new SaveResults { Error = SavingError.Unknown }); } }
internal static async Task <Song> PrepareTrackForDownloadAsync(LastTrack track) { var lastTrack = await App.Locator.ScrobblerService.GetDetailTrack(track.Name, track.ArtistName).ConfigureAwait(false); LastArtist artist; if (lastTrack != null) { track = lastTrack; } var preparedSong = track.ToSong(); preparedSong.ArtistName = track.ArtistName; if (!string.IsNullOrEmpty(track.AlbumName + track.AlbumName)) { var lastAlbum = await App.Locator.ScrobblerService.GetDetailAlbum( track.AlbumName, track.ArtistName); artist = await App.Locator.ScrobblerService.GetDetailArtist(track.ArtistName).ConfigureAwait(false); if (lastAlbum != null) { preparedSong.Album = lastAlbum.ToAlbum(); } if (artist != null) { preparedSong.Album.PrimaryArtist = artist.ToArtist(); } } else { artist = await App.Locator.ScrobblerService.GetDetailArtist(track.ArtistName).ConfigureAwait(false); } if (artist != null) { preparedSong.Artist = artist.ToArtist(); } return(preparedSong); }