diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs index 822946c8..1fcf18c2 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs @@ -655,9 +655,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe switch (_GameData.SongSource) { case ESongSource.TR_PLAYLIST: - for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(_GameData.PlaylistID); i++) + for (int i = 0; i < CBase.Playlist.GetSongCount(_GameData.PlaylistID); i++) { - int id = CBase.Playlist.GetPlaylistSong(_GameData.PlaylistID, i).SongID; + int id = CBase.Playlist.GetSong(_GameData.PlaylistID, i).SongID; // ReSharper disable LoopCanBeConvertedToQuery foreach (EGameMode mode in CBase.Songs.GetSongByID(id).AvailableGameModes) // ReSharper restore LoopCanBeConvertedToQuery diff --git a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs index 894f6386..f44f881c 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyScreenTicTacToeConfig.cs @@ -180,11 +180,11 @@ namespace VocaluxeLib.PartyModes.TicTacToe _SelectSlides[_SelectSlideSongSource].Clear(); _SelectSlides[_SelectSlideSongSource].SetValues((int)_Data.ScreenConfig.SongSource); - List playlists = CBase.Playlist.GetPlaylistNames(); + List playlists = CBase.Playlist.GetNames(); _SelectSlides[_SelectSlidePlaylist].Clear(); for (int i = 0; i < playlists.Count; i++) { - string value = playlists[i] + " (" + CBase.Playlist.GetPlaylistSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; + string value = playlists[i] + " (" + CBase.Playlist.GetSongCount(i) + " " + CBase.Language.Translate("TR_SONGS", _PartyModeID) + ")"; _SelectSlides[_SelectSlidePlaylist].AddValue(value); } _SelectSlides[_SelectSlidePlaylist].Selection = _Data.ScreenConfig.PlaylistID; @@ -241,12 +241,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe { if (CBase.Playlist.GetNumPlaylists() > 0) { - if (CBase.Playlist.GetPlaylistSongCount(_Data.ScreenConfig.PlaylistID) > 0) + if (CBase.Playlist.GetSongCount(_Data.ScreenConfig.PlaylistID) > 0) { _ConfigOk = false; - for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(_Data.ScreenConfig.PlaylistID); i++) + for (int i = 0; i < CBase.Playlist.GetSongCount(_Data.ScreenConfig.PlaylistID); i++) { - int id = CBase.Playlist.GetPlaylistSong(_Data.ScreenConfig.PlaylistID, i).SongID; + int id = CBase.Playlist.GetSong(_Data.ScreenConfig.PlaylistID, i).SongID; _ConfigOk = CBase.Songs.GetSongByID(id).AvailableGameModes.Any(mode => mode == gm); if (_ConfigOk) break; diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 8e9c691a..c52a77a3 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -865,29 +865,34 @@ namespace Vocaluxe.Base class CBplaylist : IPlaylist { - public void SetPlaylistName(int playlistID, string name) + public void SetName(int playlistID, string name) { - CPlaylists.SetPlaylistName(playlistID, name); + CPlaylists.SetName(playlistID, name); } - public List GetPlaylistNames() + public List GetNames() { - return CPlaylists.PlaylistNames; + return CPlaylists.Names; } - public string GetPlaylistName(int playlistID) + public bool Exists(int playlistID) { - return CPlaylists.GetPlaylistName(playlistID); + return CPlaylists.Get(playlistID) != null; } - public void DeletePlaylist(int playlistID) + public string GetName(int playlistID) { - CPlaylists.DeletePlaylist(playlistID); + return CPlaylists.GetName(playlistID); } - public void SavePlaylist(int playlistID) + public void Delete(int playlistID) { - CPlaylists.SavePlaylist(playlistID); + CPlaylists.Delete(playlistID); + } + + public void Save(int playlistID) + { + CPlaylists.Save(playlistID); } public int GetNumPlaylists() @@ -895,49 +900,49 @@ namespace Vocaluxe.Base return CPlaylists.NumPlaylists; } - public void AddPlaylistSong(int playlistID, int songID) + public void AddSong(int playlistID, int songID) { - CPlaylists.AddPlaylistSong(playlistID, songID); + CPlaylists.AddSong(playlistID, songID); } - public void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode) + public void AddSong(int playlistID, int songID, EGameMode gameMode) { - CPlaylists.AddPlaylistSong(playlistID, songID, gameMode); + CPlaylists.AddSong(playlistID, songID, gameMode); } - public void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) + public void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) { - CPlaylists.InsertPlaylistSong(playlistID, positionIndex, songID, gameMode); + CPlaylists.InsertSong(playlistID, positionIndex, songID, gameMode); } - public void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex) + public void MoveSong(int playlistID, int sourceIndex, int destIndex) { - CPlaylists.MovePlaylistSong(playlistID, sourceIndex, destIndex); + CPlaylists.MoveSong(playlistID, sourceIndex, destIndex); } - public void MovePlaylistSongDown(int playlistID, int songIndex) + public void MoveSongDown(int playlistID, int songIndex) { - CPlaylists.MovePlaylistSongDown(playlistID, songIndex); + CPlaylists.MovePSongDown(playlistID, songIndex); } - public void MovePlaylistSongUp(int playlistID, int songIndex) + public void MoveSongUp(int playlistID, int songIndex) { - CPlaylists.MovePlaylistSongUp(playlistID, songIndex); + CPlaylists.MoveSongUp(playlistID, songIndex); } - public void DeletePlaylistSong(int playlistID, int songIndex) + public void DeleteSong(int playlistID, int songIndex) { - CPlaylists.DeletePlaylistSong(playlistID, songIndex); + CPlaylists.DeleteSong(playlistID, songIndex); } - public int GetPlaylistSongCount(int playlistID) + public int GetSongCount(int playlistID) { - return CPlaylists.GetPlaylistSongCount(playlistID); + return CPlaylists.GetSongCount(playlistID); } - public CPlaylistSong GetPlaylistSong(int playlistID, int songIndex) + public CPlaylistSong GetSong(int playlistID, int songIndex) { - return CPlaylists.GetPlaylistSong(playlistID, songIndex); + return CPlaylists.GetSong(playlistID, songIndex); } } } \ No newline at end of file diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 8a58baa6..2189fee2 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -31,13 +31,14 @@ namespace Vocaluxe.Base static class CPlaylists { private static List _Playlists; + private static int _NextID; - public static CPlaylistFile[] Playlists + public static IEnumerable Playlists { - get { return _Playlists.ToArray(); } + get { return _Playlists.AsReadOnly(); } } - public static List PlaylistNames + public static List Names { get { return _Playlists.Select(t => t.Name).ToList(); } } @@ -49,10 +50,10 @@ namespace Vocaluxe.Base public static void Init() { - LoadPlaylists(); + Load(); _ConvertUSDXPlaylists(); - _SortPlaylistsByName(); + _SortByName(); } private static void _ConvertUSDXPlaylists() @@ -63,12 +64,12 @@ namespace Vocaluxe.Base foreach (string file in files) { CPlaylistFile playlist = _ConvertUSDXPlaylist(file); - playlist.SavePlaylist(); + playlist.Save(); _Playlists.Add(playlist); } } - public static void LoadPlaylists() + public static void Load() { _Playlists = new List(); @@ -77,148 +78,141 @@ namespace Vocaluxe.Base foreach (string file in files) { - CPlaylistFile playlist = new CPlaylistFile(file, files.IndexOf(file)); + CPlaylistFile playlist = new CPlaylistFile(files.IndexOf(file), file); _Playlists.Add(playlist); } } - public static string GetPlaylistName(int playlistID) + public static CPlaylistFile Get(int playlistID) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return "Error: Can't find Playlist"; - - return _Playlists[playlistID].Name; + return _Playlists.FirstOrDefault(pl => pl.Id == playlistID); } - public static void SetPlaylistName(int playlistID, string name) + public static string GetName(int playlistID) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].Name = name; + CPlaylistFile pl = Get(playlistID); + return pl == null ? "Error: Can't find Playlist" : pl.Name; } - public static void DeletePlaylist(int playlistID) + public static void SetName(int playlistID, string name) { - if (playlistID < 0 || playlistID >= _Playlists.Count) + CPlaylistFile pl = Get(playlistID); + + if (pl != null) + pl.Name = name; + } + + public static void Delete(int playlistID) + { + CPlaylistFile pl = Get(playlistID); + if (pl == null) return; - if (_Playlists[playlistID].File != "") + if (pl.File != "" && File.Exists(pl.File)) { try { - File.Delete(_Playlists[playlistID].File); + File.Delete(pl.File); } catch (Exception) { CLog.LogError("Can't delete Playlist File " + _Playlists[playlistID].File + ".xml"); } } - _Playlists.RemoveAt(playlistID); + _Playlists.Remove(pl); } - public static void SavePlaylist(int playlistID) + public static void Save(int playlistID) { - if (playlistID < 0 || playlistID >= _Playlists.Count) - return; - _Playlists[playlistID].SavePlaylist(); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.Save(); } - public static int NewPlaylist() + public static int NewPlaylist(string name = "New Playlist") { - CPlaylistFile pl = new CPlaylistFile {Name = "New Playlist", Id = _Playlists.Count}; + CPlaylistFile pl = new CPlaylistFile(_NextID++) {Name = name}; _Playlists.Add(pl); - return _Playlists.Count - 1; + return pl.Id; } - public static void AddPlaylistSong(int playlistID, int songID) + public static void AddSong(int playlistID, int songID) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].AddSong(songID); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.AddSong(songID); } - public static void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode) + public static void AddSong(int playlistID, int songID, EGameMode gameMode) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].AddSong(songID, gameMode); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.AddSong(songID, gameMode); } - public static void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) + public static void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].SongInsert(positionIndex, songID, gameMode); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.InsertSong(positionIndex, songID, gameMode); } - public static void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex) + public static void MoveSong(int playlistID, int sourceIndex, int destIndex) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].SongMove(sourceIndex, destIndex); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.MoveSong(sourceIndex, destIndex); } - public static void MovePlaylistSongDown(int playlistID, int songIndex) + public static void MovePSongDown(int playlistID, int songIndex) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].SongDown(songIndex); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.MoveSongDown(songIndex); } - public static void MovePlaylistSongUp(int playlistID, int songIndex) + public static void MoveSongUp(int playlistID, int songIndex) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].SongUp(songIndex); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.MoveSongUp(songIndex); } - public static void DeletePlaylistSong(int playlistID, int songIndex) + public static void DeleteSong(int playlistID, int songIndex) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return; - - _Playlists[playlistID].DeleteSong(songIndex); + CPlaylistFile pl = Get(playlistID); + if (pl != null) + pl.DeleteSong(songIndex); } - public static int GetPlaylistSongCount(int playlistID) + public static int GetSongCount(int playlistID) { - if (playlistID >= _Playlists.Count || playlistID < 0) - return 0; - - return _Playlists[playlistID].Songs.Count; + CPlaylistFile pl = Get(playlistID); + return pl != null ? pl.Songs.Count : -1; } - public static CPlaylistSong GetPlaylistSong(int playlistID, int songIndex) + public static CPlaylistSong GetSong(int playlistID, int songIndex) { - if (playlistID >= _Playlists.Count || playlistID < 0) + CPlaylistFile pl = Get(playlistID); + if (pl == null || songIndex >= pl.Songs.Count) return null; - if (songIndex >= _Playlists[playlistID].Songs.Count) - return null; - - return _Playlists[playlistID].Songs[songIndex]; + return pl.Songs[songIndex]; } #region private methods - private static void _SortPlaylistsByName() + private static void _SortByName() { - _Playlists.Sort(_CompareByPlaylistName); + _Playlists.Sort(_CompareByName); } - private static int _CompareByPlaylistName(CPlaylistFile a, CPlaylistFile b) + private static int _CompareByName(CPlaylistFile a, CPlaylistFile b) { return String.CompareOrdinal(a.Name, b.Name); } private static CPlaylistFile _ConvertUSDXPlaylist(string file) { - var pl = new CPlaylistFile(); + var pl = new CPlaylistFile(_NextID++); ReadOnlyCollection allSongs = CSongs.AllSongs; if (!File.Exists(file)) @@ -234,30 +228,23 @@ namespace Vocaluxe.Base int pos = line.IndexOf(":", StringComparison.Ordinal); if (pos <= 0) continue; - //Name or comment if (line[0] == '#') { + //Name or comment string identifier = line.Substring(1, pos - 1).Trim(); string value = line.Substring(pos + 1, line.Length - pos - 1).Trim(); if (identifier.ToUpper() == "NAME") pl.Name = value; } - //Song else { + //Song string artist = line.Substring(0, pos - 1).Trim(); string title = line.Substring(pos + 1, line.Length - pos - 1).Trim(); - bool found = false; - foreach (CSong song in allSongs) - { - if (song.Artist == artist && song.Title == title) - { - pl.AddSong(song.ID); - found = true; - break; - } - } - if (!found) + CSong plSong = allSongs.FirstOrDefault(song => song.Artist == artist && song.Title == title); + if (plSong != null) + pl.AddSong(plSong.ID); + else CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + file); } } diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 2ff5caa8..e0afa162 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -461,20 +461,20 @@ namespace Vocaluxe.Base.Server private static SPlaylistInfo _GetPlaylist(int playlistId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + if (CPlaylists.Get(playlistId) == null) throw new ArgumentException("invalid playlistId"); - return _GetPlaylistInfo(CPlaylists.Playlists[playlistId]); + return _GetPlaylistInfo(CPlaylists.Get(playlistId)); } private static void _AddSongToPlaylist(int songId, int playlistId, bool allowDuplicates) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + if (CPlaylists.Get(playlistId) == null) throw new ArgumentException("invalid playlistId"); if (allowDuplicates || !_PlaylistContainsSong(songId, playlistId)) { - CPlaylists.AddPlaylistSong(playlistId, songId); - CPlaylists.SavePlaylist(playlistId); + CPlaylists.AddSong(playlistId, songId); + CPlaylists.Save(playlistId); } else throw new ArgumentException("song exists in this playlist"); @@ -482,45 +482,49 @@ namespace Vocaluxe.Base.Server private static void _RemoveSongFromPlaylist(int position, int playlistId, int songId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + CPlaylistFile pl = CPlaylists.Get(playlistId); + if (pl == null) throw new ArgumentException("invalid playlistId"); if (!_PlaylistContainsSong(songId, playlistId)) throw new ArgumentException("invalid songId"); - if (position < 0 || CPlaylists.Playlists[playlistId].Songs.Count <= position - || CPlaylists.Playlists[playlistId].Songs[position].SongID != songId) + if (position < 0 || pl.Songs.Count <= position + || pl.Songs[position].SongID != songId) throw new ArgumentException("invalid position"); - CPlaylists.Playlists[playlistId].DeleteSong(position); - CPlaylists.SavePlaylist(playlistId); + pl.DeleteSong(position); + pl.Save(); } private static void _MoveSongInPlaylist(int newPosition, int playlistId, int songId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + CPlaylistFile pl = CPlaylists.Get(playlistId); + if (pl == null) throw new ArgumentException("invalid playlistId"); if (!_PlaylistContainsSong(songId, playlistId)) throw new ArgumentException("invalid songId"); - if (CPlaylists.Playlists[playlistId].Songs.Count < newPosition) + if (pl.Songs.Count < newPosition) throw new ArgumentException("invalid newPosition"); - int oldPosition = CPlaylists.Playlists[playlistId].Songs.FindIndex(s => s.SongID == songId); - CPlaylists.MovePlaylistSong(playlistId, oldPosition, newPosition); - CPlaylists.SavePlaylist(playlistId); + int oldPosition = pl.Songs.FindIndex(s => s.SongID == songId); + pl.MoveSong(oldPosition, newPosition); + pl.Save(); } private static bool _PlaylistContainsSong(int songId, int playlistId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + CPlaylistFile pl = CPlaylists.Get(playlistId); + if (pl == null) throw new ArgumentException("invalid playlistId"); - return CPlaylists.Playlists[playlistId].Songs.Any(s => s.SongID == songId); + return pl.Songs.Any(s => s.SongID == songId); } private static SPlaylistSongInfo[] _GetPlaylistSongs(int playlistId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + CPlaylistFile pl = CPlaylists.Get(playlistId); + if (pl == null) throw new ArgumentException("invalid playlistId"); - return _GetPlaylistSongInfos(CPlaylists.Playlists[playlistId]); + return _GetPlaylistSongInfos(pl); } private static SPlaylistSongInfo _GetPlaylistSongInfo(CPlaylistSong playlistSong, int playlistId, int playlistPos) @@ -557,16 +561,15 @@ namespace Vocaluxe.Base.Server private static void _RemovePlaylist(int playlistId) { - if (CPlaylists.Playlists.Length <= playlistId || playlistId < 0) + if (CPlaylists.Get(playlistId) == null) throw new ArgumentException("invalid playlistId"); - CPlaylists.DeletePlaylist(playlistId); + CPlaylists.Delete(playlistId); } private static int _AddPlaylist(string playlistName) { - int newPlaylistId = CPlaylists.NewPlaylist(); - CPlaylists.Playlists[newPlaylistId].Name = playlistName; - CPlaylists.SavePlaylist(newPlaylistId); + int newPlaylistId = CPlaylists.NewPlaylist(playlistName); + CPlaylists.Save(newPlaylistId); return newPlaylistId; } diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 9e6804cf..bdadd99b 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Xml; using Vocaluxe.Base; using VocaluxeLib; @@ -28,25 +29,20 @@ namespace Vocaluxe.Lib.Playlist { public class CPlaylistFile { - public string Name; + public string Name = ""; public string File; - public int Id = -1; + public readonly int Id = -1; public List Songs = new List(); - public CPlaylistFile() - { - Name = string.Empty; - File = string.Empty; - } - - public CPlaylistFile(string file, int id) + public CPlaylistFile(int id, string file = "") { Id = id; File = file; - _LoadPlaylist(); + if (File != "") + _Load(); } - public void SavePlaylist() + public void Save() { if (File == "") { @@ -113,43 +109,34 @@ namespace Vocaluxe.Lib.Playlist } } - private void _LoadPlaylist() + private void _Load() { CXMLReader xmlReader = CXMLReader.OpenFile(File); if (xmlReader == null) return; - string value = String.Empty; - if (xmlReader.GetValue("//root/Info/PlaylistName", out value, value)) + string value; + if (xmlReader.GetValue("//root/Info/PlaylistName", out value, "")) { Name = value; Songs = new List(); List songs = xmlReader.GetValues("Songs"); - var gm = EGameMode.TR_GAMEMODE_NORMAL; - foreach (string song in songs) + foreach (string songEntry in songs) { string artist; string title; - xmlReader.GetValue("//root/Songs/" + song + "/Artist", out artist, String.Empty); - xmlReader.GetValue("//root/Songs/" + song + "/Title", out title, String.Empty); - xmlReader.TryGetEnumValue("//root/Songs/" + song + "/GameMode", ref gm); + xmlReader.GetValue("//root/Songs/" + songEntry + "/Artist", out artist, String.Empty); + xmlReader.GetValue("//root/Songs/" + songEntry + "/Title", out title, String.Empty); + EGameMode gm = EGameMode.TR_GAMEMODE_NORMAL; + xmlReader.TryGetEnumValue("//root/Songs/" + songEntry + "/GameMode", ref gm); - var playlistSong = new CPlaylistSong {SongID = -1}; - - foreach (CSong curSong in CSongs.AllSongs) + CSong plSong = CSongs.AllSongs.FirstOrDefault(song => song.Artist == artist && song.Title == title); + if (plSong != null) { - if (curSong.Artist != artist || curSong.Title != title) - continue; - playlistSong.SongID = curSong.ID; - break; - } - - if (playlistSong.SongID != -1) - { - playlistSong.GameMode = gm; + var playlistSong = new CPlaylistSong(plSong.ID, gm); Songs.Add(playlistSong); } else @@ -173,7 +160,7 @@ namespace Vocaluxe.Lib.Playlist public void AddSong(int songID, EGameMode gm) { - var song = new CPlaylistSong {SongID = songID, GameMode = gm}; + var song = new CPlaylistSong(songID, gm); Songs.Add(song); } @@ -183,31 +170,31 @@ namespace Vocaluxe.Lib.Playlist Songs.RemoveAt(songNr); } - public void SongUp(int songNr) + public void MoveSongUp(int songNr) { - if (songNr < Songs.Count - 1 && songNr > 0) + if (songNr < Songs.Count && songNr > 0) Songs.Reverse(songNr - 1, 2); } - public void SongDown(int songNr) + public void MoveSongDown(int songNr) { if (songNr < Songs.Count - 1 && songNr >= 0) Songs.Reverse(songNr, 2); } - public void SongMove(int sourceNr, int destNr) + public void MoveSong(int sourceNr, int destNr) { - if (sourceNr < 0 || destNr < 0 || sourceNr == destNr || sourceNr > Songs.Count - 1 || destNr > Songs.Count - 1) + if (sourceNr < 0 || destNr < 0 || sourceNr == destNr || sourceNr >= Songs.Count || destNr >= Songs.Count) return; - var ps = new CPlaylistSong(Songs[sourceNr]); + CPlaylistSong song = Songs[sourceNr]; Songs.RemoveAt(sourceNr); - Songs.Insert(destNr, ps); + Songs.Insert(destNr, song); } - public void SongInsert(int destNr, int songID, EGameMode gm) + public void InsertSong(int destNr, int songID, EGameMode gm) { - if (destNr < 0 || destNr > Songs.Count - 1) + if (destNr < 0 || destNr >= Songs.Count) return; CPlaylistSong ps = new CPlaylistSong(songID, gm); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 4461b2ae..b70017d5 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -1265,9 +1265,8 @@ namespace Vocaluxe.Screens private void _OpenPlaylist(int playlistID) { - if (CPlaylists.Playlists.Length > playlistID && playlistID >= 0) + if (_Playlist.LoadPlaylist(playlistID)) { - _Playlist.LoadPlaylist(playlistID); _SongMenu.SmallView = true; _Playlist.Visible = true; } @@ -1289,17 +1288,17 @@ namespace Vocaluxe.Screens { _SelectSlides[_SelectSlideOptionsPlaylistAdd].Clear(); _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue("TR_SCREENSONG_NEWPLAYLIST"); - _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.PlaylistNames); + _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValues(CPlaylists.Names); _SelectSlides[_SelectSlideOptionsPlaylistOpen].Clear(); - _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.PlaylistNames); + _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValues(CPlaylists.Names); } private void _OpenAndAddPlaylistAction() { - //Open an existing playlist and add song if (_Playlist.ActivePlaylistID != (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) && (_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) != -1) { + //Open an existing playlist and add song //Check selected game-mode EGameMode gm; if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection) @@ -1315,7 +1314,7 @@ namespace Vocaluxe.Screens _Playlist.ActivePlaylistID = _SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1; //Add song to playlist - CPlaylists.Playlists[_Playlist.ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); + CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); //Open playlist _OpenPlaylist(_Playlist.ActivePlaylistID); @@ -1323,9 +1322,9 @@ namespace Vocaluxe.Screens _Playlist.ScrollToBottom(); } } - //Create a new playlist and add song else if ((_SelectSlides[_SelectSlideOptionsPlaylistAdd].Selection - 1) == -1) { + //Create a new playlist and add song //Check selected game-mode EGameMode gm; if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection) @@ -1339,18 +1338,18 @@ namespace Vocaluxe.Screens _Playlist.ActivePlaylistID = CPlaylists.NewPlaylist(); //Add song to playlist - CPlaylists.Playlists[_Playlist.ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); + CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); //Open playlist _OpenPlaylist(_Playlist.ActivePlaylistID); //Add new playlist to select-slide - _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.Playlists[_Playlist.ActivePlaylistID].Name); - _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.Playlists[_Playlist.ActivePlaylistID].Name); + _SelectSlides[_SelectSlideOptionsPlaylistAdd].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID)); + _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.GetName(_Playlist.ActivePlaylistID)); } - //Add song to loaded playlist else { + //Add song to loaded playlist //Check selected game-mode EGameMode gm; if (_AvailableGameModes.Count >= _SelectSlides[_SelectSlideOptionsMode].Selection) @@ -1359,7 +1358,7 @@ namespace Vocaluxe.Screens gm = EGameMode.TR_GAMEMODE_DUET; else gm = EGameMode.TR_GAMEMODE_NORMAL; - CPlaylists.Playlists[_Playlist.ActivePlaylistID].AddSong(CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); + CPlaylists.AddSong(_Playlist.ActivePlaylistID, CSongs.VisibleSongs[_SongMenu.GetPreviewSongNr()].ID, gm); _Playlist.UpdatePlaylist(); _Playlist.ScrollToBottom(); } diff --git a/VocaluxeLib/CXMLReader.cs b/VocaluxeLib/CXMLReader.cs index 6d4a14af..c35f12ef 100644 --- a/VocaluxeLib/CXMLReader.cs +++ b/VocaluxeLib/CXMLReader.cs @@ -62,10 +62,7 @@ namespace VocaluxeLib { string val; if (GetValue(cast, out val, Enum.GetName(typeof(T), value))) - { - CHelper.TryParse(val, out value, true); - return true; - } + return CHelper.TryParse(val, out value, true); return false; } diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 2e7bdf74..404e55a2 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -290,24 +290,25 @@ namespace VocaluxeLib public interface IPlaylist { - string GetPlaylistName(int playlistID); - List GetPlaylistNames(); + bool Exists(int playlistID); + string GetName(int playlistID); + List GetNames(); - void SetPlaylistName(int playlistID, string name); - void DeletePlaylist(int playlistID); - void SavePlaylist(int playlistID); + void SetName(int playlistID, string name); + void Delete(int playlistID); + void Save(int playlistID); int GetNumPlaylists(); - void AddPlaylistSong(int playlistID, int songID); - void AddPlaylistSong(int playlistID, int songID, EGameMode gameMode); - void InsertPlaylistSong(int playlistID, int positionIndex, int songID, EGameMode gameMode); + void AddSong(int playlistID, int songID); + void AddSong(int playlistID, int songID, EGameMode gameMode); + void InsertSong(int playlistID, int positionIndex, int songID, EGameMode gameMode); - void MovePlaylistSong(int playlistID, int sourceIndex, int destIndex); - void MovePlaylistSongDown(int playlistID, int songIndex); - void MovePlaylistSongUp(int playlistID, int songIndex); - void DeletePlaylistSong(int playlistID, int songIndex); + void MoveSong(int playlistID, int sourceIndex, int destIndex); + void MoveSongDown(int playlistID, int songIndex); + void MoveSongUp(int playlistID, int songIndex); + void DeleteSong(int playlistID, int songIndex); - int GetPlaylistSongCount(int playlistID); - CPlaylistSong GetPlaylistSong(int playlistID, int songIndex); + int GetSongCount(int playlistID); + CPlaylistSong GetSong(int playlistID, int songIndex); } } \ No newline at end of file diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index 1e71a262..428955d0 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -176,7 +176,7 @@ namespace VocaluxeLib.Menu { if (EditMode == EEditMode.ChangeOrder && _ChangeOrderSource != -1 && _PlaylistElements.Count > _ChangeOrderSource) { - CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[_ChangeOrderSource].Content); + CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[_ChangeOrderSource].Content); UpdatePlaylist(); } _ChangeOrderSource = -1; @@ -503,13 +503,13 @@ namespace VocaluxeLib.Menu switch (keyEvent.Key) { case Keys.Enter: - CBase.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); - CBase.Playlist.SavePlaylist(ActivePlaylistID); + CBase.Playlist.SetName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); + CBase.Playlist.Save(ActivePlaylistID); EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; break; case Keys.Escape: - _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); + _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID); EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; break; @@ -600,7 +600,7 @@ namespace VocaluxeLib.Menu break; case Keys.Delete: - CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[CurrentPlaylistElement].Content); + CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[CurrentPlaylistElement].Content); UpdatePlaylist(); if (Offset > 0) @@ -626,7 +626,7 @@ namespace VocaluxeLib.Menu case Keys.Add: //move the selected song up if (_PlaylistElementContents.Count > 1 && (CurrentPlaylistElement > 0 || Offset > 0)) { - CBase.Playlist.MovePlaylistSongUp(ActivePlaylistID, CurrentPlaylistElement + Offset); + CBase.Playlist.MoveSongUp(ActivePlaylistID, CurrentPlaylistElement + Offset); UpdatePlaylist(); var key = new SKeyEvent {Key = Keys.Up}; @@ -655,7 +655,7 @@ namespace VocaluxeLib.Menu case Keys.Subtract: //move the selected song down if (_PlaylistElementContents.Count > 1 && CurrentPlaylistElement + Offset < _PlaylistElementContents.Count - 1) { - CBase.Playlist.MovePlaylistSongDown(ActivePlaylistID, CurrentPlaylistElement + Offset); + CBase.Playlist.MoveSongDown(ActivePlaylistID, CurrentPlaylistElement + Offset); UpdatePlaylist(); var key = new SKeyEvent {Key = Keys.Down}; @@ -724,7 +724,7 @@ namespace VocaluxeLib.Menu if (CurrentPlaylistElement != -1) { - CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = + CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } @@ -736,7 +736,7 @@ namespace VocaluxeLib.Menu if (CurrentPlaylistElement != -1) { - CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = + CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } @@ -764,10 +764,10 @@ namespace VocaluxeLib.Menu else if (_Theme.ButtonPlaylistSing.Selected) _StartPlaylistSongs(); else if (_Theme.ButtonPlaylistSave.Selected) - CBase.Playlist.SavePlaylist(ActivePlaylistID); + CBase.Playlist.Save(ActivePlaylistID); else if (_Theme.ButtonPlaylistDelete.Selected) { - CBase.Playlist.DeletePlaylist(ActivePlaylistID); + CBase.Playlist.Delete(ActivePlaylistID); ClosePlaylist(); } else if (_Theme.ButtonPlaylistName.Selected) @@ -888,7 +888,7 @@ namespace VocaluxeLib.Menu //Delete Entry with RB if (CHelper.IsInBounds(_PlaylistElements[i].Background.Rect, mouseEvent) && mouseEvent.RB && _PlaylistElements[i].Content != -1) { - CBase.Playlist.DeletePlaylistSong(ActivePlaylistID, _PlaylistElements[i].Content); + CBase.Playlist.DeleteSong(ActivePlaylistID, _PlaylistElements[i].Content); UpdatePlaylist(); return true; } @@ -906,7 +906,7 @@ namespace VocaluxeLib.Menu { if (CurrentPlaylistElement != -1) { - CBase.Playlist.GetPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = + CBase.Playlist.GetSong(ActivePlaylistID, CurrentPlaylistElement + Offset).GameMode = _PlaylistElementContents[CurrentPlaylistElement + Offset].Modes[_PlaylistElements[CurrentPlaylistElement].SelectSlide.Selection]; UpdatePlaylist(); } @@ -922,12 +922,12 @@ namespace VocaluxeLib.Menu } if (_Theme.ButtonPlaylistSave.Selected) { - CBase.Playlist.SavePlaylist(ActivePlaylistID); + CBase.Playlist.Save(ActivePlaylistID); return true; } if (_Theme.ButtonPlaylistDelete.Selected) { - CBase.Playlist.DeletePlaylist(ActivePlaylistID); + CBase.Playlist.Delete(ActivePlaylistID); ClosePlaylist(); return true; } @@ -981,14 +981,14 @@ namespace VocaluxeLib.Menu if (CurrentPlaylistElement != -1) { - CBase.Playlist.InsertPlaylistSong(ActivePlaylistID, CurrentPlaylistElement + Offset, DragAndDropSongID, gm); + CBase.Playlist.InsertSong(ActivePlaylistID, CurrentPlaylistElement + Offset, DragAndDropSongID, gm); UpdatePlaylist(); } else { if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0) { - CBase.Playlist.InsertPlaylistSong(ActivePlaylistID, 0, DragAndDropSongID, gm); + CBase.Playlist.InsertSong(ActivePlaylistID, 0, DragAndDropSongID, gm); UpdatePlaylist(); } else @@ -1007,7 +1007,7 @@ namespace VocaluxeLib.Menu if (mouseEvent.Y > min) { - CBase.Playlist.AddPlaylistSong(ActivePlaylistID, DragAndDropSongID, gm); + CBase.Playlist.AddSong(ActivePlaylistID, DragAndDropSongID, gm); UpdatePlaylist(); ScrollToBottom(); } @@ -1028,8 +1028,8 @@ namespace VocaluxeLib.Menu { if (_Theme.ButtonPlaylistName.Selected) { - CBase.Playlist.SetPlaylistName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); - CBase.Playlist.SavePlaylist(ActivePlaylistID); + CBase.Playlist.SetName(ActivePlaylistID, _Theme.ButtonPlaylistName.Text.Text); + CBase.Playlist.Save(ActivePlaylistID); EditMode = EEditMode.None; return true; } @@ -1038,7 +1038,7 @@ namespace VocaluxeLib.Menu { if (_Theme.ButtonPlaylistName.Selected) { - _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); + _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID); EditMode = EEditMode.None; _Theme.ButtonPlaylistName.EditMode = false; return true; @@ -1058,13 +1058,13 @@ namespace VocaluxeLib.Menu { if (CurrentPlaylistElement != -1 && CurrentPlaylistElement + Offset != _ChangeOrderSource) { - CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, CurrentPlaylistElement + Offset); + CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, CurrentPlaylistElement + Offset); UpdatePlaylist(); } else if (CurrentPlaylistElement == -1) { if (mouseEvent.Y < _PlaylistElements[0].Background.Rect.Y && Offset == 0) - CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, 0); + CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, 0); else { if (_PlaylistElements.Count + Offset >= _PlaylistElementContents.Count) @@ -1080,7 +1080,7 @@ namespace VocaluxeLib.Menu } if (mouseEvent.Y > min) - CBase.Playlist.MovePlaylistSong(ActivePlaylistID, _ChangeOrderSource, _PlaylistElementContents.Count - 1); + CBase.Playlist.MoveSong(ActivePlaylistID, _ChangeOrderSource, _PlaylistElementContents.Count - 1); } } @@ -1134,35 +1134,33 @@ namespace VocaluxeLib.Menu public bool LoadPlaylist(int playlistID) { - if (playlistID > -1 && playlistID < CBase.Playlist.GetNumPlaylists()) + if (!CBase.Playlist.Exists(playlistID)) + return false; + ActivePlaylistID = playlistID; + _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetName(ActivePlaylistID); + _PlaylistElementContents.Clear(); + for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++) { - ActivePlaylistID = playlistID; - _Theme.ButtonPlaylistName.Text.Text = CBase.Playlist.GetPlaylistName(ActivePlaylistID); - _PlaylistElementContents.Clear(); - for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) - { - var pec = new CPlaylistElementContent - { - SongID = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID, - Modes = CBase.Songs.GetSongByID(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID).AvailableGameModes, - Mode = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode - }; - _PlaylistElementContents.Add(pec); - } - Update(); - return true; + var pec = new CPlaylistElementContent + { + SongID = CBase.Playlist.GetSong(ActivePlaylistID, i).SongID, + Modes = CBase.Songs.GetSongByID(CBase.Playlist.GetSong(ActivePlaylistID, i).SongID).AvailableGameModes, + Mode = CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode + }; + _PlaylistElementContents.Add(pec); } - return false; + Update(); + return true; } public void UpdatePlaylist() { _PlaylistElementContents.Clear(); - for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) + for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++) { - var pec = new CPlaylistElementContent {SongID = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID}; + var pec = new CPlaylistElementContent {SongID = CBase.Playlist.GetSong(ActivePlaylistID, i).SongID}; pec.Modes = CBase.Songs.GetSongByID(pec.SongID).AvailableGameModes; - pec.Mode = CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode; + pec.Mode = CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode; _PlaylistElementContents.Add(pec); } @@ -1181,10 +1179,10 @@ namespace VocaluxeLib.Menu CBase.Game.Reset(); CBase.Game.ClearSongs(); - if (ActivePlaylistID > -1 && ActivePlaylistID < CBase.Playlist.GetNumPlaylists()) + if (CBase.Playlist.Exists(ActivePlaylistID)) { - for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(ActivePlaylistID); i++) - CBase.Game.AddSong(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).SongID, CBase.Playlist.GetPlaylistSong(ActivePlaylistID, i).GameMode); + for (int i = 0; i < CBase.Playlist.GetSongCount(ActivePlaylistID); i++) + CBase.Game.AddSong(CBase.Playlist.GetSong(ActivePlaylistID, i).SongID, CBase.Playlist.GetSong(ActivePlaylistID, i).GameMode); if (CBase.Game.GetNumSongs() > 0) CBase.Graphics.FadeTo(EScreens.ScreenNames); //TODO: What is if someone uses that in PartyMode? } @@ -1195,7 +1193,7 @@ namespace VocaluxeLib.Menu CBase.Game.Reset(); CBase.Game.ClearSongs(); - CBase.Game.AddSong(CBase.Playlist.GetPlaylistSong(ActivePlaylistID, selected).SongID, CBase.Playlist.GetPlaylistSong(ActivePlaylistID, selected).GameMode); + CBase.Game.AddSong(CBase.Playlist.GetSong(ActivePlaylistID, selected).SongID, CBase.Playlist.GetSong(ActivePlaylistID, selected).GameMode); if (CBase.Game.GetNumSongs() > 0) CBase.Graphics.FadeTo(EScreens.ScreenNames); @@ -1203,7 +1201,7 @@ namespace VocaluxeLib.Menu public void Update() { - if (ActivePlaylistID > -1 && ActivePlaylistID < CBase.Playlist.GetNumPlaylists()) + if (CBase.Playlist.Exists(ActivePlaylistID)) { for (int i = 0; i < _PlaylistElements.Count; i++) {