Index: Source/UI/UiComponents/Media/General/Consts.cs =================================================================== --- Source/UI/UiComponents/Media/General/Consts.cs (revision 3811) +++ Source/UI/UiComponents/Media/General/Consts.cs (working copy) @@ -192,6 +192,7 @@ public const string RES_SAVE_PLAYLIST_FAILED_LOCAL_MEDIAITEMS_TEXT = "[Media.CannotSavePlaylistWithLocalMediaItems]"; public const string RES_SAVE_PLAYLIST_LOCAL_SUCCESSFUL_TEXT = "[Media.SavePlaylistLocalSuccessfulText]"; public const string RES_SAVE_PLAYLIST_SERVER_SUCCESSFUL_TEXT = "[Media.SavePlaylistServerSuccessfulText]"; + public const string RES_SAVE_PLAYLIST_FAILED_PLAYLIST_ALREADY_EXISTS = "[Media.SavePlaylistFailedAlreadyExists]"; public const string RES_PLAYLIST_LOAD_NO_PLAYLIST = "[Media.PlaylistLoadNoPlaylistText]"; public const string RES_PLAYLIST_LOAD_ERROR_LOADING = "[Media.PlaylistLoadErrorLoadingPlaylist]"; Index: Source/UI/UiComponents/Media/Language/strings_en.xml =================================================================== --- Source/UI/UiComponents/Media/Language/strings_en.xml (revision 3811) +++ Source/UI/UiComponents/Media/Language/strings_en.xml (working copy) @@ -210,6 +210,7 @@ + Index: Source/UI/UiComponents/Media/Models/ManagePlaylistsModel.cs =================================================================== --- Source/UI/UiComponents/Media/Models/ManagePlaylistsModel.cs (revision 3811) +++ Source/UI/UiComponents/Media/Models/ManagePlaylistsModel.cs (working copy) @@ -99,7 +99,7 @@ void OnPlaylistNameChanged(AbstractProperty prop, object oldVal) { - IsPlaylistNameValid = !string.IsNullOrEmpty(PlaylistName); + IsPlaylistNameValid = !string.IsNullOrEmpty(PlaylistName.Trim()); if (_playlist != null) _playlist.Name = PlaylistName; } @@ -315,16 +315,33 @@ { if (_playlistLocation == PlaylistLocation.Local) { - string fileName; - _localPlaylistsHandler.SavePlaylist(playlistData, out fileName); - _message = LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_LOCAL_SUCCESSFUL_TEXT, fileName); - workflowManager.NavigatePush(Consts.WF_STATE_ID_PLAYLIST_SAVE_SUCCESSFUL); + if (!(_localPlaylistsHandler.Playlists.Any(p => p.Name == _playlist.Name))) + { + string fileName; + _localPlaylistsHandler.SavePlaylist(playlistData, out fileName); + _message = LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_LOCAL_SUCCESSFUL_TEXT, fileName); + workflowManager.NavigatePush(Consts.WF_STATE_ID_PLAYLIST_SAVE_SUCCESSFUL); + } + else + { + //TODO : Add new screen to allow playlist name change instead of error message + SaveFailed(LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_FAILED_PLAYLIST_ALREADY_EXISTS, _playlist.Name)); + } } else { - Models.ServerPlaylists.SavePlaylist(playlistData); - _message = LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_SERVER_SUCCESSFUL_TEXT); - workflowManager.NavigatePush(Consts.WF_STATE_ID_PLAYLIST_SAVE_SUCCESSFUL); + if (!(Models.ServerPlaylists.GetPlaylists().Any(p => p.Name == _playlist.Name))) + { + Models.ServerPlaylists.SavePlaylist(playlistData); + _message = LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_SERVER_SUCCESSFUL_TEXT); + workflowManager.NavigatePush(Consts.WF_STATE_ID_PLAYLIST_SAVE_SUCCESSFUL); + } + else + { + //TODO : Add new screen to allow playlist name change instead of error message + SaveFailed(LocalizationHelper.Translate(Consts.RES_SAVE_PLAYLIST_FAILED_PLAYLIST_ALREADY_EXISTS, _playlist.Name)); + } + } } catch (Exception e)