Beispiel #1
0
        public async Task<AddTracksToPlaylistResult> AddTracksToStaticPlaylistAsync(IList<TrackViewModel> tracks, string playlistName)
        {
            if (tracks == null || tracks.Count == 0)
            {
                LogClient.Error("Cannot add tracks to playlist. No tracks were provided.");
                return AddTracksToPlaylistResult.Error;
            }

            if (string.IsNullOrEmpty(playlistName))
            {
                LogClient.Error("Cannot add tracks to playlist. No playlistName was provided.");
                return AddTracksToPlaylistResult.Error;
            }

            AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success;

            this.watcher.Suspend(); // Stop watching the playlist folder

            int numberTracksAdded = 0;
            string filename = this.CreatePlaylistFilePath(playlistName, PlaylistType.Static);

            await Task.Run(() =>
            {
                try
                {
                    using (FileStream fs = System.IO.File.Open(filename, FileMode.Append))
                    {
                        using (var writer = new StreamWriter(fs))
                        {
                            foreach (TrackViewModel track in tracks)
                            {
                                try
                                {
                                    writer.WriteLine(track.Path);
                                    numberTracksAdded++;
                                }
                                catch (Exception ex)
                                {
                                    LogClient.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlistName, filename, ex.Message);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogClient.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlistName, filename, ex.Message);
                    result = AddTracksToPlaylistResult.Error;
                }
            });

            if (result == AddTracksToPlaylistResult.Success)
            {
                this.TracksAdded(numberTracksAdded, playlistName);
            }

            this.watcher.Resume(); // Start watching the playlist folder

            return result;
        }
Beispiel #2
0
        public async Task <AddTracksToPlaylistResult> AddTracksToPlaylistAsync(IList <PlayableTrack> tracks, string playlistName)
        {
            if (tracks == null || tracks.Count == 0)
            {
                CoreLogger.Current.Error("Cannot add tracks to playlist. No tracks were provided.");
                return(AddTracksToPlaylistResult.Error);
            }

            if (string.IsNullOrEmpty(playlistName))
            {
                CoreLogger.Current.Error("Cannot add tracks to playlist. No playlistName was provided.");
                return(AddTracksToPlaylistResult.Error);
            }

            AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success;

            watcher.EnableRaisingEvents = false; // Stop watching the playlist folder

            int    numberTracksAdded = 0;
            string filename          = this.CreatePlaylistFilename(playlistName);

            await Task.Run(() =>
            {
                try
                {
                    using (FileStream fs = System.IO.File.Open(filename, FileMode.Append))
                    {
                        using (var writer = new StreamWriter(fs))
                        {
                            foreach (PlayableTrack track in tracks)
                            {
                                try
                                {
                                    writer.WriteLine(track.Path);
                                    numberTracksAdded++;
                                }
                                catch (Exception ex)
                                {
                                    CoreLogger.Current.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlistName, filename, ex.Message);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    CoreLogger.Current.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlistName, filename, ex.Message);
                    result = AddTracksToPlaylistResult.Error;
                }
            });

            if (result == AddTracksToPlaylistResult.Success)
            {
                this.TracksAdded(numberTracksAdded, playlistName);
            }

            watcher.EnableRaisingEvents = true; // Start watching the playlist folder

            return(result);
        }
Beispiel #3
0
        public async Task<AddTracksToPlaylistResult> AddAlbumsToStaticPlaylistAsync(IList<AlbumViewModel> albumViewModels, string playlistName)
        {
            IList<Track> tracks = await this.trackRepository.GetAlbumTracksAsync(albumViewModels.Select(x => x.AlbumKey).ToList());
            List<TrackViewModel> orderedTracks = await EntityUtils.OrderTracksAsync(tracks.Select(t => this.container.ResolveTrackViewModel(t)).ToList(), TrackOrder.ByAlbum);
            AddTracksToPlaylistResult result = await this.AddTracksToStaticPlaylistAsync(orderedTracks, playlistName);

            return result;
        }
Beispiel #4
0
        public async Task <AddTracksToPlaylistResult> AddAlbumsToPlaylistAsync(IList <Album> albums, string playlistName)
        {
            List <PlayableTrack> tracks = await DatabaseUtils.OrderTracksAsync(await this.trackRepository.GetTracksAsync(albums), TrackOrder.ByAlbum);

            AddTracksToPlaylistResult result = await this.AddTracksToPlaylistAsync(tracks, playlistName);

            return(result);
        }
Beispiel #5
0
        public async Task <AddTracksToPlaylistResult> AddGenresToPlaylistAsync(IList <long> genreIds, string playlistName)
        {
            List <PlayableTrack> tracks = await DataUtils.OrderTracksAsync(await this.trackRepository.GetGenreTracksAsync(genreIds), TrackOrder.ByAlbum);

            AddTracksToPlaylistResult result = await this.AddTracksToPlaylistAsync(tracks, playlistName);

            return(result);
        }
        public async Task <AddTracksToPlaylistResult> AddGenresToStaticPlaylistAsync(IList <string> genres, string playlistName)
        {
            IList <Track> tracks = await this.trackRepository.GetGenreTracksAsync(genres);

            List <TrackViewModel> orderedTracks = await EntityUtils.OrderTracksAsync(tracks.Select(t => this.container.ResolveTrackViewModel(t)).ToList(), TrackOrder.ByAlbum);

            AddTracksToPlaylistResult result = await this.AddTracksToStaticPlaylistAsync(orderedTracks, playlistName);

            return(result);
        }
Beispiel #7
0
        public async Task <AddTracksToPlaylistResult> AddTracksToPlaylistAsync(IList <PlayableTrack> tracks, string playlist)
        {
            AddTracksToPlaylistResult result = AddTracksToPlaylistResult.Success;

            int    numberTracksAdded = 0;
            string filename          = this.CreatePlaylistFilename(playlist);

            await Task.Run(() =>
            {
                try
                {
                    using (FileStream fs = System.IO.File.Create(filename))
                    {
                        using (var writer = new StreamWriter(fs))
                        {
                            foreach (PlayableTrack track in tracks)
                            {
                                try
                                {
                                    writer.WriteLine(track.Path);
                                    numberTracksAdded++;
                                }
                                catch (Exception ex)
                                {
                                    LogClient.Error("Could not write path '{0}' to playlist '{1}' with filename '{2}'. Exception: {3}", track.Path, playlist, filename, ex.Message);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogClient.Error("Could not add tracks to playlist '{0}' with filename '{1}'. Exception: {2}", playlist, filename, ex.Message);
                    result = AddTracksToPlaylistResult.Error;
                }
            });

            if (result == AddTracksToPlaylistResult.Success)
            {
                this.TracksAdded(numberTracksAdded, playlist);
            }

            return(result);
        }
Beispiel #8
0
        private async Task AddGenresToPlaylistAsync(IList <string> genres, string playlistName)
        {
            AddPlaylistResult addPlaylistResult = AddPlaylistResult.Success; // Default Success

            // If no playlist is provided, first create one.
            if (playlistName == null)
            {
                var responseText = ResourceUtils.GetString("Language_New_Playlist");

                if (this.dialogService.ShowInputDialog(
                        0xea37,
                        16,
                        ResourceUtils.GetString("Language_New_Playlist"),
                        ResourceUtils.GetString("Language_Enter_Name_For_New_Playlist"),
                        ResourceUtils.GetString("Language_Ok"),
                        ResourceUtils.GetString("Language_Cancel"),
                        ref responseText))
                {
                    playlistName      = responseText;
                    addPlaylistResult = await this.playlistService.AddPlaylistAsync(playlistName);
                }
            }

            // If playlist name is still null, the user clicked cancel on the previous dialog. Stop here.
            if (playlistName == null)
            {
                return;
            }

            // Verify if the playlist was added
            switch (addPlaylistResult)
            {
            case AddPlaylistResult.Success:
            case AddPlaylistResult.Duplicate:
                // Add items to playlist
                AddTracksToPlaylistResult result = await this.playlistService.AddGenresToPlaylistAsync(genres, playlistName);

                if (result == AddTracksToPlaylistResult.Error)
                {
                    this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetString("Language_Error"), ResourceUtils.GetString("Language_Error_Adding_Songs_To_Playlist").Replace("{playlistname}", "\"" + playlistName + "\""), ResourceUtils.GetString("Language_Ok"), true, ResourceUtils.GetString("Language_Log_File"));
                }
                break;

            case AddPlaylistResult.Error:
                this.dialogService.ShowNotification(
                    0xe711,
                    16,
                    ResourceUtils.GetString("Language_Error"),
                    ResourceUtils.GetString("Language_Error_Adding_Playlist"),
                    ResourceUtils.GetString("Language_Ok"),
                    true,
                    ResourceUtils.GetString("Language_Log_File"));
                break;

            case AddPlaylistResult.Blank:
                this.dialogService.ShowNotification(
                    0xe711,
                    16,
                    ResourceUtils.GetString("Language_Error"),
                    ResourceUtils.GetString("Language_Provide_Playlist_Name"),
                    ResourceUtils.GetString("Language_Ok"),
                    false,
                    string.Empty);
                break;

            default:
                // Never happens
                break;
            }
        }