diff --git a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs index b0129bec..da2b74f7 100644 --- a/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs +++ b/PartyModes/PartyModeChallenge/CPartyModeChallenge.cs @@ -475,12 +475,12 @@ namespace VocaluxeLib.PartyModes.Challenge players[i].ProfileID = -1; } - CBase.Songs.AddPartySongSung(songID); CBase.Graphics.FadeTo(EScreens.ScreenSing); } public override void LeavingHighscore() { + CBase.Songs.AddPartySongSung(CBase.Game.GetSong(0).ID); _GameData.CurrentRoundNr++; CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); } diff --git a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs b/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs index 46f9edda..c6f0d619 100644 --- a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs +++ b/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs @@ -457,6 +457,8 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley public override void LeavingHighscore() { + for (int i = 0; i < CBase.Game.GetNumSongs();i++ ) + CBase.Songs.AddPartySongSung(CBase.Game.GetSong(i).ID); _GameData.CurrentRoundNr++; CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); } @@ -542,7 +544,6 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley { int songID = ids[CBase.Game.GetRandom(ids.Count)]; CBase.Game.AddSong(songID, EGameMode.TR_GAMEMODE_MEDLEY); - CBase.Songs.AddPartySongSung(songID); ids.Remove(songID); s++; } diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs index d3f29442..1fcf18c2 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs @@ -515,12 +515,12 @@ namespace VocaluxeLib.PartyModes.TicTacToe } CBase.Game.AddSong(songID, gm); - CBase.Songs.AddPartySongSung(songID); CBase.Graphics.FadeTo(EScreens.ScreenSing); } public override void LeavingHighscore() { + CBase.Songs.AddPartySongSung(CBase.Game.GetSong(0).ID); _UpdateScores(); CBase.Graphics.FadeTo(EScreens.ScreenPartyDummy); } @@ -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/ServerLib/CServer.cs b/ServerLib/CServer.cs index 2f5f0e78..d0162e74 100644 --- a/ServerLib/CServer.cs +++ b/ServerLib/CServer.cs @@ -187,7 +187,7 @@ namespace ServerLib ProcessStartInfo info = new ProcessStartInfo { FileName = "VocaluxeServerConfig.exe", - WorkingDirectory = Environment.CurrentDirectory, + WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory, Arguments = port + " " + (_Encrypted ? "true" : "false") + (reserve ? " reserve" : ""), UseShellExecute = true, CreateNoWindow = true, diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index b4be306f..86023cad 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -135,7 +135,7 @@ namespace Vocaluxe.Base if (_Initialized) return; - List soundFiles = CHelper.ListSoundFiles(CSettings.FolderBackgroundMusic, true, true); + List soundFiles = CHelper.ListSoundFiles(CSettings.FolderNameBackgroundMusic, true, true); foreach (string path in soundFiles) _BGMusicFiles.Add(new CPlaylistElement(path)); diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index d6265f3c..2e73bc8e 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -46,11 +46,9 @@ namespace Vocaluxe.Base private static bool _Initialized; // Base file and folder names (formerly from CSettings but they can be changed) - private const string _FolderProfiles = "Profiles"; //Use ProfileFolders for access - private const string _FolderSongs = "Songs"; //Use SongFolders for access - public static string FolderPlaylists = "Playlists"; - public static string FileHighscoreDB = "HighscoreDB.sqlite"; - private static string _FileConfig = "Config.xml"; + public static string FolderPlaylists = Path.Combine(CSettings.DataFolder, "Playlists"); + public static string FileHighscoreDB = Path.Combine(CSettings.DataFolder, "HighscoreDB.sqlite"); + private static string _FileConfig = Path.Combine(CSettings.DataFolder, "Config.xml"); // Debug public static EDebugLevel DebugLevel = EDebugLevel.TR_CONFIG_OFF; @@ -108,10 +106,10 @@ namespace Vocaluxe.Base //Folders public static readonly List SongFolders = new List { - Path.Combine(Directory.GetCurrentDirectory(), _FolderSongs) + Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameSongs) #if INSTALLER - ,Path.Combine(CSettings.DataPath, CSettings.FolderSongs); + ,Path.Combine(CSettings.DataFolder, CSettings.FolderNameSongs); #endif }; /// @@ -121,9 +119,9 @@ namespace Vocaluxe.Base public static readonly List ProfileFolders = new List { #if INSTALLER - Path.Combine(Environment.CurrentDirectory, CSettings.FolderProfiles), + Path.Combine(Environment.CurrentDirectory, CSettings.FolderNameProfiles), #endif - Path.Combine(CSettings.DataPath, _FolderProfiles) + Path.Combine(CSettings.DataFolder, CSettings.FolderNameProfiles) }; // Game @@ -202,7 +200,7 @@ namespace Vocaluxe.Base return; // Init config file - if (!File.Exists(Path.Combine(CSettings.DataPath, _FileConfig))) + if (!File.Exists(_FileConfig)) SaveConfig(); else _LoadConfig(); @@ -212,7 +210,7 @@ namespace Vocaluxe.Base private static void _LoadConfig() { - CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.DataPath, _FileConfig)); + CXMLReader xmlReader = CXMLReader.OpenFile(_FileConfig); if (xmlReader == null) return; @@ -357,7 +355,7 @@ namespace Vocaluxe.Base XmlWriter writer = null; try { - writer = XmlWriter.Create(Path.Combine(CSettings.DataPath, _FileConfig), XMLSettings); + writer = XmlWriter.Create(_FileConfig, XMLSettings); writer.WriteStartDocument(); writer.WriteStartElement("root"); @@ -373,7 +371,7 @@ namespace Vocaluxe.Base writer.WriteElementString("Screens", Screen.AllScreens.Length.ToString()); writer.WriteElementString("PrimaryScreenResolution", Screen.PrimaryScreen.Bounds.Size.ToString()); - writer.WriteElementString("Directory", Environment.CurrentDirectory); + writer.WriteElementString("Directory", CSettings.ProgramFolder); writer.WriteEndElement(); @@ -806,10 +804,8 @@ namespace Vocaluxe.Base //Check each parameter for (int i = 0; i < _Params.Count; i++) { - //Switch parameter as lower case - string param = _Params[i]; - - param = param.ToLower(); + //Switch parameter to lower case + string param = _Params[i].ToLower(); string value = _Values[i]; diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 26eb6866..62527cd3 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -143,7 +143,7 @@ namespace Vocaluxe.Base { _CoverThemes.Clear(); - const string path = CSettings.FolderCover; + string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover); List files = CHelper.ListFiles(path, "*.xml"); foreach (string file in files) @@ -179,10 +179,10 @@ namespace Vocaluxe.Base var ignoreList = new List(); - string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder); + string coverPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder); List files = CHelper.ListImageFiles(coverPath, true, true); - CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File)); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.File)); lock (_Covers) { if (xmlReader != null) @@ -195,7 +195,7 @@ namespace Vocaluxe.Base string filePath; xmlReader.GetValue("//root/Cover/" + coverName + "/Name", out name, String.Empty); xmlReader.GetValue("//root/Cover/" + coverName + "/Path", out filePath, String.Empty); - string coverFilePath = Path.Combine(CSettings.FolderCover, Path.Combine(coverTheme.Folder, filePath)); + string coverFilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder, filePath); if (!File.Exists(coverFilePath)) continue; diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 065e7170..6297433e 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -32,9 +32,9 @@ namespace Vocaluxe.Base public static bool Init() { - _HighscoreDB = new CHighscoreDB(Path.Combine(Environment.CurrentDirectory, CConfig.FileHighscoreDB)); - _CoverDB = new CCoverDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCoverDB)); - _ResourceDB = new CResourceDB(Path.Combine(Environment.CurrentDirectory, CSettings.FileCreditsRessourcesDB)); + _HighscoreDB = new CHighscoreDB(CConfig.FileHighscoreDB); + _CoverDB = new CCoverDB(Path.Combine(CSettings.DataFolder, CSettings.FileNameCoverDB)); + _ResourceDB = new CResourceDB(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameCreditsRessourcesDB)); if (!_HighscoreDB.Init()) { diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index c3828223..c78b3ed5 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -74,7 +74,7 @@ namespace Vocaluxe.Base _Languages = new List(); var files = new List(); - files.AddRange(CHelper.ListFiles(CSettings.FolderLanguages, "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(CSettings.FolderNameLanguages, "*.xml", true, true)); foreach (string file in files) _LoadLanguageFile(file); @@ -214,7 +214,7 @@ namespace Vocaluxe.Base private static void _LoadLanguageFile(string fileName) { - var lang = new SLanguage {LanguageFilePath = Path.Combine(CSettings.FolderLanguages, fileName)}; + var lang = new SLanguage {LanguageFilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameLanguages, fileName)}; CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath); if (xmlReader == null) diff --git a/Vocaluxe/Base/CLog.cs b/Vocaluxe/Base/CLog.cs index f90b7043..31d26f5a 100644 --- a/Vocaluxe/Base/CLog.cs +++ b/Vocaluxe/Base/CLog.cs @@ -42,7 +42,7 @@ namespace Vocaluxe.Base { if (_LogFile != null) return; - _LogFile = new StreamWriter(Path.Combine(CSettings.DataPath, _LogFileName), false, Encoding.UTF8); + _LogFile = new StreamWriter(Path.Combine(CSettings.DataFolder, _LogFileName), false, Encoding.UTF8); _LogFile.WriteLine(_LogName + " " + CSettings.GetFullVersionText() + " " + DateTime.Now); _LogFile.WriteLine("----------------------------------------"); @@ -117,11 +117,11 @@ namespace Vocaluxe.Base public static void Init() { - _ErrorLog = new CErrorLogFile(CSettings.FileErrorLog, "Error-Log"); - _PerformanceLog = new CLogFile(CSettings.FilePerformanceLog, "Performance-Log"); - _BenchmarkLog = new CLogFile(CSettings.FileBenchmarkLog, "Benchmark-Log"); - _DebugLog = new CLogFile(CSettings.FileDebugLog, "Debug-Log"); - _SongInfoLog = new CLogFile(CSettings.FileSongInfoLog, "Song-Information-Log"); + _ErrorLog = new CErrorLogFile(CSettings.FileNameErrorLog, "Error-Log"); + _PerformanceLog = new CLogFile(CSettings.FileNamePerformanceLog, "Performance-Log"); + _BenchmarkLog = new CLogFile(CSettings.FileNameBenchmarkLog, "Benchmark-Log"); + _DebugLog = new CLogFile(CSettings.FileNameDebugLog, "Debug-Log"); + _SongInfoLog = new CLogFile(CSettings.FileNameSongInfoLog, "Song-Information-Log"); _BenchmarkTimer = new Stopwatch[_MaxBenchmarks]; for (int i = 0; i < _BenchmarkTimer.Length; i++) diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 8676956b..c52a77a3 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -231,7 +231,7 @@ namespace Vocaluxe.Base public string GetDataPath() { - return CSettings.DataPath; + return CSettings.DataFolder; } public float GetSlideShowImageTime() @@ -577,6 +577,16 @@ namespace Vocaluxe.Base { return CGame.GetNumSongs(); } + + public CSong GetSong() + { + return CGame.GetSong(); + } + + public CSong GetSong(int round) + { + return CGame.GetSong(round); + } } class CBprofiles : IProfiles @@ -855,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() @@ -885,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/CParty.cs b/Vocaluxe/Base/CParty.cs index 2fd180c1..1dada7f9 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -218,7 +218,7 @@ namespace Vocaluxe.Base private static void _LoadPartyModes() { var files = new List(); - files.AddRange(CHelper.ListFiles(CSettings.FolderPartyModes, "*.xml", false, true)); + files.AddRange(CHelper.ListFiles(CSettings.FolderNamePartyModes, "*.xml", false, true)); foreach (string file in files) { @@ -269,7 +269,8 @@ namespace Vocaluxe.Base return pm; } - string pathToCode = Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeCode); + string pathToPm = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNamePartyModes, pm.Folder); + string pathToCode = Path.Combine(pathToPm, CSettings.FolderNamePartyModeCode); var filesToCompile = new List(); filesToCompile.AddRange(CHelper.ListFiles(pathToCode, "*.cs", false, true)); @@ -278,7 +279,7 @@ namespace Vocaluxe.Base if (output == null) return pm; - if (!CLanguage.LoadPartyLanguageFiles(pm.PartyModeID, Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeLanguages))) + if (!CLanguage.LoadPartyLanguageFiles(pm.PartyModeID, Path.Combine(pathToPm, CSettings.FolderNamePartyModeLanguages))) { CLog.LogError("Error loading language files for PartyMode: " + file); return pm; @@ -301,9 +302,9 @@ namespace Vocaluxe.Base return pm; } pm.PartyMode.Initialize(); - pm.PartyMode.SetFolder(Path.Combine(Directory.GetCurrentDirectory(), Path.Combine(CSettings.FolderPartyModes, pm.Folder))); + pm.PartyMode.SetFolder(pathToPm); - if (!CTheme.AddTheme(Path.Combine(pm.PartyMode.GetFolder(), "Theme.xml"), pm.PartyModeID)) + if (!CTheme.AddTheme(Path.Combine(pathToPm, "Theme.xml"), pm.PartyModeID)) return pm; int themeIndex = CTheme.GetThemeIndex(pm.PartyModeID); @@ -318,7 +319,7 @@ namespace Vocaluxe.Base foreach (string screenfile in pm.ScreenFiles) { - string xmlPath = Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), CSettings.FolderPartyModeScreens); + string xmlPath = Path.Combine(pathToPm, CSettings.FolderNamePartyModeScreens); CMenuParty screen = _GetPartyScreenInstance(output, screenfile, pm.Folder); if (screen != null) diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 5d928c7c..2189fee2 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -31,15 +31,16 @@ 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.PlaylistName).ToList(); } + get { return _Playlists.Select(t => t.Name).ToList(); } } public static int NumPlaylists @@ -49,176 +50,169 @@ namespace Vocaluxe.Base public static void Init() { - LoadPlaylists(); + Load(); _ConvertUSDXPlaylists(); - _SortPlaylistsByName(); + _SortByName(); } private static void _ConvertUSDXPlaylists() { var files = new List(); - files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.upl", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), "*.upl", true, true)); 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(); var files = new List(); - files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists), "*.xml", true, true)); + files.AddRange(CHelper.ListFiles(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), "*.xml", true, true)); 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].PlaylistName; + 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].PlaylistName = 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].PlaylistFile != "") + if (pl.File != "" && File.Exists(pl.File)) { try { - File.Delete(_Playlists[playlistID].PlaylistFile); + File.Delete(pl.File); } catch (Exception) { - CLog.LogError("Can't delete Playlist File " + _Playlists[playlistID].PlaylistFile + ".xml"); + 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 {PlaylistName = "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.PlaylistName, b.PlaylistName); + 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.PlaylistName = value; + 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/CSettings.cs b/Vocaluxe/Base/CSettings.cs index 3de72e98..828a49a0 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -71,45 +71,51 @@ namespace Vocaluxe.Base public const int VertexBufferElements = 10000; + public static readonly string ProgramFolder = AppDomain.CurrentDomain.BaseDirectory; + #if INSTALLER - public static readonly string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); + public static readonly string DataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Vocaluxe"); #else - public static readonly string DataPath = Environment.CurrentDirectory; + public static readonly string DataFolder = ProgramFolder; #endif - public const string Icon = "Vocaluxe.ico"; - public const string Logo = "Logo.png"; public const string FallbackLanguage = "English"; - public const string FileFonts = "Fonts.xml"; - public const string FileOldHighscoreDB = "Ultrastar.db"; - public const string FileCoverDB = "CoverDB.sqlite"; - public const string FileCreditsRessourcesDB = "CreditsRessourcesDB.sqlite"; - public const string FilePerformanceLog = "Performance.log"; - public const string FileErrorLog = "Error.log"; - public const string FileBenchmarkLog = "Benchmark.log"; - public const string FileDebugLog = "Debug.log"; - public const string FileSongInfoLog = "SongInformation.log"; + public const string FileNameIcon = "Vocaluxe.ico"; + public const string FileNameLogo = "Logo.png"; + public const string FileNameFonts = "Fonts.xml"; - public const string SoundT440 = "440Hz.mp3"; + public const string FileNameOldHighscoreDB = "Ultrastar.db"; + public const string FileNameCoverDB = "CoverDB.sqlite"; + public const string FileNameCreditsRessourcesDB = "CreditsRessourcesDB.sqlite"; - public const string FolderCover = "Cover"; - public const string FolderGraphics = "Graphics"; - public const string FolderFonts = "Fonts"; - public const string FolderThemes = "Themes"; - public const string FolderThemeFonts = "Fonts"; - public const string FolderScreens = "Screens"; - public const string FolderPhotos = "Photos"; - public const string FolderSounds = "Sounds"; - public const string FolderLanguages = "Languages"; - public const string FolderScreenshots = "Screenshots"; - public const string FolderBackgroundMusic = "BackgroundMusic"; + public const string FileNamePerformanceLog = "Performance.log"; + public const string FileNameErrorLog = "Error.log"; + public const string FileNameBenchmarkLog = "Benchmark.log"; + public const string FileNameDebugLog = "Debug.log"; + public const string FileNameSongInfoLog = "SongInformation.log"; - public const string FolderPartyModes = "PartyModes"; - public const string FolderPartyModeCode = "Code"; - public const string FolderPartyModeScreens = "Screens"; - public const string FolderPartyModeLanguages = "Languages"; - public const string FolderPartyModeFonts = "Fonts"; + public const string FileNameSoundT440 = "440Hz.mp3"; + + public const string FolderNameSongs = "Songs"; + public const string FolderNameProfiles = "Profiles"; + public const string FolderNameCover = "Cover"; + public const string FolderNameGraphics = "Graphics"; + public const string FolderNameFonts = "Fonts"; + public const string FolderNameThemes = "Themes"; + public const string FolderNameThemeFonts = "Fonts"; + public const string FolderNameScreens = "Screens"; + public const string FolderNamePhotos = "Photos"; + public const string FolderNameSounds = "Sounds"; + public const string FolderNameLanguages = "Languages"; + public const string FolderNameScreenshots = "Screenshots"; + public const string FolderNameBackgroundMusic = "BackgroundMusic"; + + public const string FolderNamePartyModes = "PartyModes"; + public const string FolderNamePartyModeCode = "Code"; + public const string FolderNamePartyModeScreens = "Screens"; + public const string FolderNamePartyModeLanguages = "Languages"; + public const string FolderNamePartyModeFonts = "Fonts"; public const string LinkAndroidApp = "https://build.phonegap.com/apps/639714/download/android/?qr_key=uY98ymvTr6K144RyTdhs"; public const string LinkSymbianApp = "https://build.phonegap.com/apps/639714/download/symbian/?qr_key=uY98ymvTr6K144RyTdhs"; @@ -211,12 +217,12 @@ namespace Vocaluxe.Base { var folders = new List { - Path.Combine(Environment.CurrentDirectory, FolderCover), - Path.Combine(Environment.CurrentDirectory, FolderFonts), - Path.Combine(DataPath, FolderScreenshots), - Path.Combine(Environment.CurrentDirectory, FolderBackgroundMusic), - Path.Combine(Environment.CurrentDirectory, FolderSounds), - Path.Combine(DataPath, CConfig.FolderPlaylists) + Path.Combine(ProgramFolder, FolderNameCover), + Path.Combine(ProgramFolder, FolderNameFonts), + Path.Combine(DataFolder, FolderNameScreenshots), + Path.Combine(ProgramFolder, FolderNameBackgroundMusic), + Path.Combine(ProgramFolder, FolderNameSounds), + Path.Combine(DataFolder, CConfig.FolderPlaylists) }; folders.AddRange(CConfig.ProfileFolders); folders.AddRange(CConfig.SongFolders); diff --git a/Vocaluxe/Base/CSound.cs b/Vocaluxe/Base/CSound.cs index 9d7f65dd..d20061f2 100644 --- a/Vocaluxe/Base/CSound.cs +++ b/Vocaluxe/Base/CSound.cs @@ -85,7 +85,7 @@ namespace Vocaluxe.Base } #region Stream Handling - public static int Load(string media, bool loop=false, bool prescan=false) + public static int Load(string media, bool loop = false, bool prescan = false) { return _Playback.Load(media, loop, prescan); } @@ -176,11 +176,11 @@ namespace Vocaluxe.Base #region Sounds public static int PlaySound(ESounds sound, bool fade = true) { - string file = Path.Combine(Environment.CurrentDirectory, CSettings.FolderSounds); + string file = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameSounds); switch (sound) { case ESounds.T440: - file = Path.Combine(file, CSettings.SoundT440); + file = Path.Combine(file, CSettings.FileNameSoundT440); break; default: return -1; diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index 4f9dd431..e382191e 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -266,13 +266,13 @@ namespace Vocaluxe.Base { CFonts.LoadThemeFonts( _Themes[themeIndex].Name, - Path.Combine(Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder), CSettings.FolderThemeFonts), + Path.Combine(Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder), CSettings.FolderNameThemeFonts), xmlReader); } else { CFonts.LoadPartyModeFonts(_Themes[themeIndex].PartyModeID, - Path.Combine(_Themes[themeIndex].Path, CSettings.FolderPartyModeFonts), + Path.Combine(_Themes[themeIndex].Path, CSettings.FolderNamePartyModeFonts), xmlReader); } return true; @@ -385,11 +385,11 @@ namespace Vocaluxe.Base { _Themes.Clear(); - string path = Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderThemes); - List files = CHelper.ListFiles(path, "*.xml"); + string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameThemes); + List files = CHelper.ListFiles(path, "*.xml", false, true); foreach (string file in files) - AddTheme(Path.Combine(path, file), -1); + AddTheme(file, -1); } public static bool AddTheme(string filePath, int partyModeID) @@ -546,7 +546,7 @@ namespace Vocaluxe.Base if (themeIndex != -1) { path = Path.Combine(_Themes[themeIndex].Path, _Themes[themeIndex].SkinFolder); - path = Path.Combine(path, CSettings.FolderScreens); + path = Path.Combine(path, CSettings.FolderNameScreens); } else CLog.LogError("Can't find current Theme"); diff --git a/Vocaluxe/Base/Fonts/CFonts.cs b/Vocaluxe/Base/Fonts/CFonts.cs index 2c838aac..1fa9ee31 100644 --- a/Vocaluxe/Base/Fonts/CFonts.cs +++ b/Vocaluxe/Base/Fonts/CFonts.cs @@ -341,11 +341,11 @@ namespace Vocaluxe.Base.Fonts /// private static void _LoadFontList() { - CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderFonts, CSettings.FileFonts)); + CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameFonts, CSettings.FileNameFonts)); if (xmlReader == null) return; - _LoadFontFiles(xmlReader, Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderFonts)); + _LoadFontFiles(xmlReader, Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameFonts)); } /// diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index c25462d0..e0afa162 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -342,7 +342,7 @@ namespace Vocaluxe.Base.Server return false; string name = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); - string filePath = _SaveImage(photoData.Photo, name, CSettings.FolderPhotos); + string filePath = _SaveImage(photoData.Photo, name, CSettings.FolderNamePhotos); if (!string.IsNullOrEmpty(filePath)) { _PhotosOfThisRound.Add(filePath); @@ -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) @@ -549,7 +553,7 @@ namespace Vocaluxe.Base.Server return new SPlaylistInfo { PlaylistId = playlist.Id, - PlaylistName = playlist.PlaylistName, + PlaylistName = playlist.Name, SongCount = playlist.Songs.Count, LastChanged = DateTime.Now.ToLongDateString() }; @@ -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].PlaylistName = playlistName; - CPlaylists.SavePlaylist(newPlaylistId); + int newPlaylistId = CPlaylists.NewPlaylist(playlistName); + CPlaylists.Save(newPlaylistId); return newPlaylistId; } @@ -682,19 +685,10 @@ namespace Vocaluxe.Base.Server if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); - string filename = Path.Combine(folder, name); - if (File.Exists(filename + "." + extension)) - { - int i = 0; - while (File.Exists(filename + "_" + i + "." + extension)) - i++; - filename = filename + "_" + i + "." + extension; - } - else - filename = filename + "." + extension; + string file = CHelper.GetUniqueFileName(folder, name + "." + extension); - avatarImage.Save(filename); - return filename; + avatarImage.Save(file); + return file; } } } \ No newline at end of file diff --git a/Vocaluxe/CSplashScreen.cs b/Vocaluxe/CSplashScreen.cs index cf31ae7b..bba2749c 100644 --- a/Vocaluxe/CSplashScreen.cs +++ b/Vocaluxe/CSplashScreen.cs @@ -29,7 +29,7 @@ namespace Vocaluxe public CSplashScreen() { - string path = Path.Combine(Environment.CurrentDirectory, Path.Combine(CSettings.FolderGraphics, CSettings.Logo)); + string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameGraphics, CSettings.FileNameLogo); if (File.Exists(path)) { try @@ -45,7 +45,7 @@ namespace Vocaluxe else CLog.LogError("Can't find " + path); - path = Path.Combine(Environment.CurrentDirectory, CSettings.Icon); + path = Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon); if (File.Exists(path)) { try diff --git a/Vocaluxe/Lib/Database/CHighscoreDB.cs b/Vocaluxe/Lib/Database/CHighscoreDB.cs index 43d25424..5e9b20ce 100644 --- a/Vocaluxe/Lib/Database/CHighscoreDB.cs +++ b/Vocaluxe/Lib/Database/CHighscoreDB.cs @@ -47,7 +47,7 @@ namespace Vocaluxe.Lib.Database public override bool Init() { - string oldDBFilePath = Path.Combine(Environment.CurrentDirectory, CSettings.FileOldHighscoreDB); + string oldDBFilePath = Path.Combine(CSettings.DataFolder, CSettings.FileNameOldHighscoreDB); if (File.Exists(oldDBFilePath)) { if (File.Exists(_FilePath)) diff --git a/Vocaluxe/Lib/Database/CResourceDB.cs b/Vocaluxe/Lib/Database/CResourceDB.cs index 51e07bf5..4891a19e 100644 --- a/Vocaluxe/Lib/Database/CResourceDB.cs +++ b/Vocaluxe/Lib/Database/CResourceDB.cs @@ -119,7 +119,7 @@ namespace Vocaluxe.Lib.Database { foreach (string file in _FilesV1) { - string filePath = Path.Combine(Environment.CurrentDirectory, file); + string filePath = Path.Combine(CSettings.ProgramFolder, file); if (!_AddImageToCreditsDB(filePath, transaction)) { transaction.Rollback(); diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index 6198e622..1c04f6fd 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -84,7 +84,7 @@ namespace Vocaluxe.Lib.Draw /// public CDirect3D() { - Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); + Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); //Fill Queue with 100000 IDs for (int i = 0; i < _MaxID; i++) @@ -730,18 +730,13 @@ namespace Vocaluxe.Lib.Draw /// public void MakeScreenShot() { - const string file = "Screenshot_"; - string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots); - - int i = 0; - while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".bmp"))) - i++; + string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp"); //create a surface of the frame using (Surface surface = _Device.GetBackBuffer(0, 0)) { var screen = new Bitmap(Surface.ToStream(surface, ImageFileFormat.Bmp)); - screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); + screen.Save(file, ImageFormat.Bmp); screen.Dispose(); } } diff --git a/Vocaluxe/Lib/Draw/CDrawWinForm.cs b/Vocaluxe/Lib/Draw/CDrawWinForm.cs index c1fd96b9..08720117 100644 --- a/Vocaluxe/Lib/Draw/CDrawWinForm.cs +++ b/Vocaluxe/Lib/Draw/CDrawWinForm.cs @@ -51,7 +51,7 @@ namespace Vocaluxe.Lib.Draw public CDrawWinForm() { - Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); + Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); _Keys = new CKeys(); _Mouse = new CMouse(); @@ -304,14 +304,9 @@ namespace Vocaluxe.Lib.Draw public void MakeScreenShot() { - const string file = "Screenshot_"; - string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots); + string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp"); - int i = 0; - while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".png"))) - i++; - - _Backbuffer.Save(Path.Combine(path, file + i.ToString("00000") + ".png"), ImageFormat.Png); + _Backbuffer.Save(file, ImageFormat.Png); } public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2) diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index 5b7e19ae..43ba70c2 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -111,7 +111,7 @@ namespace Vocaluxe.Lib.Draw public COpenGL() { - Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); + Icon = new Icon(Path.Combine(CSettings.ProgramFolder, CSettings.FileNameIcon)); for (int i = 1; i < _MaxID; i++) _IDs.Enqueue(i); @@ -534,12 +534,7 @@ namespace Vocaluxe.Lib.Draw public void MakeScreenShot() { - const string file = "Screenshot_"; - string path = Path.Combine(CSettings.DataPath, CSettings.FolderScreenshots); - - int i = 0; - while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".bmp"))) - i++; + string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CSettings.FolderNameScreenshots), "Screenshot.bmp"); int width = GetScreenWidth(); int height = GetScreenHeight(); @@ -552,7 +547,7 @@ namespace Vocaluxe.Lib.Draw screen.UnlockBits(bmpData); screen.RotateFlip(RotateFlipType.RotateNoneFlipY); - screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); + screen.Save(file, ImageFormat.Bmp); } } diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index ef439692..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,31 +29,26 @@ namespace Vocaluxe.Lib.Playlist { public class CPlaylistFile { - public string PlaylistName; - public string PlaylistFile; - public int Id = -1; + public string Name = ""; + public string File; + public readonly int Id = -1; public List Songs = new List(); - public CPlaylistFile() - { - PlaylistName = string.Empty; - PlaylistFile = string.Empty; - } - - public CPlaylistFile(string file, int id) + public CPlaylistFile(int id, string file = "") { Id = id; - PlaylistFile = file; - _LoadPlaylist(); + File = file; + if (File != "") + _Load(); } - public void SavePlaylist() + public void Save() { - if (PlaylistFile == "") + if (File == "") { string filename = string.Empty; // ReSharper disable LoopCanBeConvertedToQuery - foreach (char chr in PlaylistName) + foreach (char chr in Name) // ReSharper restore LoopCanBeConvertedToQuery { if (char.IsLetter(chr)) @@ -62,25 +58,17 @@ namespace Vocaluxe.Lib.Playlist if (filename == "") filename = "1"; - int i = 0; - while (File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml"))) - { - i++; - if (!File.Exists(Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + i + ".xml"))) - filename += i; - } - - PlaylistFile = Path.Combine(CSettings.DataPath, CConfig.FolderPlaylists, filename + ".xml"); + File = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CConfig.FolderPlaylists), filename + ".xml"); } XmlWriter writer; try { - writer = XmlWriter.Create(PlaylistFile, CConfig.XMLSettings); + writer = XmlWriter.Create(File, CConfig.XMLSettings); } catch (Exception e) { - CLog.LogError("Error creating/opening Playlist File " + PlaylistFile + ": " + e.Message); + CLog.LogError("Error creating/opening Playlist File " + File + ": " + e.Message); return; } @@ -90,7 +78,7 @@ namespace Vocaluxe.Lib.Playlist writer.WriteStartElement("root"); writer.WriteStartElement("Info"); - writer.WriteElementString("PlaylistName", PlaylistName); + writer.WriteElementString("PlaylistName", Name); writer.WriteEndElement(); writer.WriteStartElement("Songs"); @@ -121,51 +109,42 @@ namespace Vocaluxe.Lib.Playlist } } - private void _LoadPlaylist() + private void _Load() { - CXMLReader xmlReader = CXMLReader.OpenFile(PlaylistFile); + 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, "")) { - PlaylistName = 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 - CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + PlaylistFile); + CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + File); } } else - CLog.LogError("Can't find PlaylistName in Playlist File: " + PlaylistFile); + CLog.LogError("Can't find PlaylistName in Playlist File: " + File); } public void AddSong(int songID) @@ -181,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); } @@ -191,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/Lib/Sound/Playback/CPlaybackBase.cs b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs index 05f5a35f..a9ce5959 100644 --- a/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs +++ b/Vocaluxe/Lib/Sound/Playback/CPlaybackBase.cs @@ -142,10 +142,7 @@ namespace Vocaluxe.Lib.Sound.Playback { int index = _GetStreamIndex(streamID); if (index >= 0) - { _Streams[index].Close(); - _Streams.RemoveAt(index); - } } } diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index de49bff9..b4720e87 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -301,6 +301,7 @@ namespace Vocaluxe if (args.Name.IndexOf(".resources", StringComparison.Ordinal) >= 0) return null; + Assembly assembly = null; string[] arr = args.Name.Split(new char[] {','}); if (arr.Length > 0) { @@ -311,27 +312,25 @@ namespace Vocaluxe #if ARCH_X64 string path = "x64"; #endif - path = Path.Combine(path, arr[0] + ".dll"); + path = Path.Combine(CSettings.ProgramFolder, path, arr[0] + ".dll"); try { - Assembly assembly; + assembly = Assembly.LoadFrom(path); + } + catch (FileLoadException e1) + { + //possibly loading from network, this would work always but better use the normal LoadFrom for more specific errors try { - assembly = Assembly.LoadFrom(path); - } - catch (FileLoadException) - { - //possibly loading from network, this would work always but better use the normal LoadFrom for more specific errors assembly = Assembly.Load(File.ReadAllBytes(path)); } - return assembly; - } - catch (Exception e) - { - CLog.LogError("Cannot load assembly " + args.Name + " from " + path + ": " + e); + catch (Exception e) + { + CLog.LogError("Cannot load assembly " + args.Name + " from " + path + ": " + e + "\r\nOuter Error: " + e1); + } } } - return null; + return assembly; } private static readonly Mutex _Mutex = new Mutex(false, Application.ProductName + "-SingleInstanceMutex"); diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index 2c29383d..c8fdacfb 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -345,13 +345,8 @@ namespace Vocaluxe.Screens private void _OnSaveSnapshot() { - string filename = Path.Combine(CSettings.DataPath, CConfig.ProfileFolders[0], "snapshot"); - int i = 0; - while (File.Exists(filename + i + ".png")) - i++; - - filename = filename + i + ".png"; - _Snapshot.Save(filename, ImageFormat.Png); + string file = CHelper.GetUniqueFileName(Path.Combine(CSettings.DataFolder, CConfig.ProfileFolders[0]), "snapshot.png"); + _Snapshot.Save(file, ImageFormat.Png); _Snapshot = null; CDraw.RemoveTexture(ref _WebcamTexture); @@ -361,7 +356,7 @@ namespace Vocaluxe.Screens _Buttons[_ButtonTakeSnapshot].Visible = false; _Buttons[_ButtonWebcam].Visible = CWebcam.IsDeviceAvailable(); - int id = CProfiles.NewAvatar(filename); + int id = CProfiles.NewAvatar(file); CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, id); _LoadAvatars(false); } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 03496de6..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].PlaylistName); - _SelectSlides[_SelectSlideOptionsPlaylistOpen].AddValue(CPlaylists.Playlists[_Playlist.ActivePlaylistID].PlaylistName); + _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/Vocaluxe/SongQueue/CSongQueue.cs b/Vocaluxe/SongQueue/CSongQueue.cs index d0b6190c..969013c9 100644 --- a/Vocaluxe/SongQueue/CSongQueue.cs +++ b/Vocaluxe/SongQueue/CSongQueue.cs @@ -125,7 +125,7 @@ namespace Vocaluxe.SongQueue _SongQueue[_CurrentRound].GameMode); } _CurrentRound++; - _CurrentSong = CGameModes.Get(GetCurrentGameMode()).GetSong(_SongQueue[_CurrentRound].SongID); + _CurrentSong = IsFinished() ? null : CGameModes.Get(GetCurrentGameMode()).GetSong(_SongQueue[_CurrentRound].SongID); } public bool IsFinished() diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index 01183730..2edec3ce 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -273,6 +273,30 @@ namespace VocaluxeLib { return (bounds.X <= x) && (bounds.X + bounds.W >= x) && (bounds.Y <= y) && (bounds.Y + bounds.H >= y); } + + /// + /// Returns a filename that is unique in that path + /// + /// Path in which the file should be stored + /// filename (including extension) + /// + public static string GetUniqueFileName(string path, string filename, bool withPath = true) + { + string ext = Path.GetExtension(filename); + filename = Path.GetFileNameWithoutExtension(filename); + if (filename == null) + filename = "1"; + if (File.Exists(Path.Combine(path, filename + ext))) + { + int i = 1; + while (File.Exists(Path.Combine(path, filename + "_" + i + ext))) + i++; + filename += "_" + i; + } + if (withPath) + filename = Path.Combine(path, filename); + return filename + ext; + } } static class CEncoding 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 357f721f..404e55a2 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -196,6 +196,8 @@ namespace VocaluxeLib void Reset(); void ClearSongs(); int GetNumSongs(); + CSong GetSong(); + CSong GetSong(int round); } public interface IRecording @@ -288,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++) { diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index a9a9e6d7..00a31e7e 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -60,7 +60,7 @@ namespace VocaluxeLib.Menu.SongMenu private int _LastKnownNumSongs; private int _LastKnownCategory = -1; - private bool _MouseWasInRect = false; + private bool _MouseWasInRect; public override float SelectedTileZoomFactor { @@ -76,14 +76,19 @@ namespace VocaluxeLib.Menu.SongMenu //Update list in case we scrolled _UpdateList(); - foreach (CStatic tile in _Tiles) - tile.Selected = false; - int tileNr = _SelectionNr - _Offset; - if (tileNr >= 0 && tileNr < _Tiles.Count) - _Tiles[tileNr].Selected = true; + _UpdateTileSelection(); } } + private void _UpdateTileSelection() + { + foreach (CStatic tile in _Tiles) + tile.Selected = false; + int tileNr = _SelectionNr - _Offset; + if (tileNr >= 0 && tileNr < _Tiles.Count) + _Tiles[tileNr].Selected = true; + } + public override bool SmallView { set @@ -93,6 +98,7 @@ namespace VocaluxeLib.Menu.SongMenu base.SmallView = value; _InitTiles(); _UpdateList(true); + _UpdateTileSelection(); } } @@ -262,19 +268,9 @@ namespace VocaluxeLib.Menu.SongMenu else { if (CBase.Songs.IsInCategory()) - { - if (_SelectionNr < 0) - SetSelectedSong(0); - else - SetSelectedSong(_SelectionNr); - } + SetSelectedSong(_SelectionNr < 0 ? 0 : _SelectionNr); else - { - if (_SelectionNr < 0) - SetSelectedCategory(0); - else - SetSelectedCategory(_SelectionNr); - } + SetSelectedCategory(_SelectionNr < 0 ? 0 : _SelectionNr); } _PreviewNr = _SelectionNr; _AfterCategoryChange(); diff --git a/VocaluxeLib/Profile/CProfile.cs b/VocaluxeLib/Profile/CProfile.cs index ca8de4d6..24c9de70 100644 --- a/VocaluxeLib/Profile/CProfile.cs +++ b/VocaluxeLib/Profile/CProfile.cs @@ -120,20 +120,9 @@ namespace VocaluxeLib.Profile if (filename == "") filename = "1"; - int i = 0; - while (File.Exists(Path.Combine(FilePath, filename + ".xml"))) - { - i++; - if (!File.Exists(Path.Combine(FilePath, filename + i + ".xml"))) - filename += i; - } - - FileName = filename + ".xml"; + FileName = CHelper.GetUniqueFileName(FilePath, filename + ".xml", false); } - if (FileName == String.Empty) - return; - XmlWriter writer; try { diff --git a/WebserverInitalConfig/Program.cs b/WebserverInitalConfig/Program.cs index 60e3ce4a..d37f51f9 100644 --- a/WebserverInitalConfig/Program.cs +++ b/WebserverInitalConfig/Program.cs @@ -55,7 +55,7 @@ namespace WebserverInitalConfig ProcessStartInfo proc = new ProcessStartInfo { UseShellExecute = true, - WorkingDirectory = Environment.CurrentDirectory, + WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory, FileName = Process.GetCurrentProcess().MainModule.FileName, Arguments = args[0] + " " + args[1], Verb = "runas",