예제 #1
0
        private async Task<EditPlaylistResult> EditStaticPlaylistAsync(EditablePlaylistViewModel editablePlaylistViewModel)
        {
            if (!System.IO.File.Exists(editablePlaylistViewModel.Path))
            {
                LogClient.Error("Error while renaming playlist. The playlist '{0}' could not be found", editablePlaylistViewModel.Path);
                return EditPlaylistResult.Error;
            }

            string sanitizedNewPlaylistName = this.SanitizePlaylistFilename(editablePlaylistViewModel.PlaylistName);
            string newFilename = this.CreatePlaylistFilePath(sanitizedNewPlaylistName, PlaylistType.Static);

            if (System.IO.File.Exists(newFilename))
            {
                return EditPlaylistResult.Duplicate;
            }

            EditPlaylistResult result = EditPlaylistResult.Success;

            await Task.Run(() =>
            {
                try
                {
                    System.IO.File.Move(editablePlaylistViewModel.Path, newFilename);
                }
                catch (Exception ex)
                {
                    LogClient.Error($"Error while editing static playlist '{editablePlaylistViewModel.Path}'. Exception: {ex.Message}");
                    result = EditPlaylistResult.Error;
                }
            });

            return result;
        }
예제 #2
0
        public async Task<EditPlaylistResult> EditPlaylistAsync(EditablePlaylistViewModel editablePlaylistViewModel)
        {
            if (editablePlaylistViewModel == null)
            {
                LogClient.Error($"{nameof(editablePlaylistViewModel)} is null");
                return EditPlaylistResult.Error;
            }

            if (string.IsNullOrWhiteSpace(editablePlaylistViewModel.Path))
            {
                LogClient.Error($"{nameof(editablePlaylistViewModel.Path)} is null or empty");
                return EditPlaylistResult.Error;
            }

            if (string.IsNullOrWhiteSpace(editablePlaylistViewModel.PlaylistName))
            {
                LogClient.Error($"{nameof(editablePlaylistViewModel.PlaylistName)} is empty");
                return EditPlaylistResult.Blank;
            }

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

            EditPlaylistResult result = EditPlaylistResult.Error;

            if (editablePlaylistViewModel.Type.Equals(PlaylistType.Static))
            {
                result = await this.EditStaticPlaylistAsync(editablePlaylistViewModel);
            }
            else if (editablePlaylistViewModel.Type.Equals(PlaylistType.Smart))
            {
                result = await this.EditSmartPlaylistAsync(editablePlaylistViewModel);
            }

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

            if (result == EditPlaylistResult.Success)
            {
                this.PlaylistFolderChanged(this, new EventArgs());
            }

            return result;
        }
예제 #3
0
        private async Task <EditPlaylistResult> EditSmartPlaylistAsync(EditablePlaylistViewModel editablePlaylistViewModel)
        {
            if (!System.IO.File.Exists(editablePlaylistViewModel.Path))
            {
                LogClient.Error("Error while renaming playlist. The playlist '{0}' could not be found", editablePlaylistViewModel.Path);
                return(EditPlaylistResult.Error);
            }

            IList <PlaylistViewModel> existingSmartPlaylists = await this.GetSmartPlaylistsAsync();

            string oldSmartPlaylistName = this.GetSmartPlaylistName(editablePlaylistViewModel.Path);

            bool isEditingSamePlaylist     = oldSmartPlaylistName.ToLower().Equals(editablePlaylistViewModel.PlaylistName.ToLower());
            bool playlistNameIsAlreadyUsed = existingSmartPlaylists.Any(x => x.Name.ToLower().Equals(editablePlaylistViewModel.PlaylistName.ToLower()));

            if (!isEditingSamePlaylist & playlistNameIsAlreadyUsed)
            {
                return(EditPlaylistResult.Duplicate);
            }

            EditPlaylistResult result = EditPlaylistResult.Success;

            try
            {
                PlaylistViewModel playlistViewModel = await this.UpdateSmartPlaylistAsync(editablePlaylistViewModel);

                if (playlistViewModel == null)
                {
                    LogClient.Error($"Error while editing smart playlist '{editablePlaylistViewModel.Path}'. {nameof(playlistViewModel)} is null");
                    result = EditPlaylistResult.Error;
                }
            }
            catch (Exception ex)
            {
                LogClient.Error($"Error while editing smart playlist '{editablePlaylistViewModel.Path}'. Exception: {ex.Message}");
                result = EditPlaylistResult.Error;
            }

            return(result);
        }
        private async Task EditSelectedPlaylistAsync()
        {
            if (!this.IsPlaylistSelected)
            {
                return;
            }

            UserControl view = null;
            CollectionPlaylistEditorViewModel viewModel = null;

            try
            {
                var getCollectionPlaylistEditorViewModel = this.container.Resolve <Func <PlaylistViewModel, CollectionPlaylistEditorViewModel> >();
                viewModel = getCollectionPlaylistEditorViewModel(this.selectedPlaylist);

                if (this.selectedPlaylist.Type.Equals(PlaylistType.Static))
                {
                    view = this.container.Resolve <CollectionStaticPlaylistEditor>();
                }
                else if (this.selectedPlaylist.Type.Equals(PlaylistType.Smart))
                {
                    view = this.container.Resolve <CollectionSmartPlaylistEditor>();
                }

                if (viewModel == null)
                {
                    throw new Exception($"{nameof(viewModel)} is null");
                }

                if (view == null)
                {
                    throw new Exception($"{nameof(view)} is null");
                }
            }
            catch (Exception ex)
            {
                LogClient.Error($"Error while constructing Smart playlist editor View or ViewModel. Exception: {ex.Message}");

                this.dialogService.ShowNotification(
                    0xe711,
                    16,
                    ResourceUtils.GetString("Language_Error"),
                    ResourceUtils.GetString("Language_Error_Editing_Playlist"),
                    ResourceUtils.GetString("Language_Ok"),
                    true,
                    ResourceUtils.GetString("Language_Log_File"));
            }

            view.DataContext = viewModel;

            if (this.dialogService.ShowCustomDialog(
                    0xea37,
                    16,
                    ResourceUtils.GetString("Language_Edit_Playlist"),
                    view,
                    500,
                    0,
                    false,
                    true,
                    true,
                    true,
                    ResourceUtils.GetString("Language_Ok"),
                    ResourceUtils.GetString("Language_Cancel"),
                    null))
            {
                EditPlaylistResult result = await this.playlistService.EditPlaylistAsync(viewModel.EditablePlaylist);

                switch (result)
                {
                case EditPlaylistResult.Duplicate:
                    this.dialogService.ShowNotification(
                        0xe711,
                        16,
                        ResourceUtils.GetString("Language_Already_Exists"),
                        ResourceUtils.GetString("Language_Already_Playlist_With_That_Name").Replace("{playlistname}", viewModel.EditablePlaylist.PlaylistName),
                        ResourceUtils.GetString("Language_Ok"),
                        false,
                        string.Empty);
                    break;

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

                case EditPlaylistResult.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;
                }
            }
        }