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; }
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; }
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; } } }