예제 #1
0
        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
                });
            }
        }
예제 #2
0
        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
                });
            }
        }
예제 #3
0
        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);
        }