Replace remaining usages of CXmlSerializer
(Old theme loading remaining)
This commit is contained in:
1 parent
12e48d0446
commit
a318ce12fa
9 files changed
+228
-317
No files matched your search
+28
-82
@@ -17,16 +17,14 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml.Serialization;
|
||||
using System.Xml;
|
||||
using System.Linq;
|
||||
using VocaluxeLib;
|
||||
using VocaluxeLib.Draw;
|
||||
using VocaluxeLib.Menu;
|
||||
using VocaluxeLib.Songs;
|
||||
using VocaluxeLib.Xml;
|
||||
|
||||
@@ -61,14 +59,7 @@ namespace Vocaluxe.Base
|
||||
/// </summary>
|
||||
public static string[] CoverThemes
|
||||
{
|
||||
get
|
||||
{
|
||||
var coverThemes = new List<string>();
|
||||
for (int i = 0; i < _CoverThemes.Count; i++)
|
||||
coverThemes.Add(_CoverThemes[i].Name);
|
||||
|
||||
return coverThemes.ToArray();
|
||||
}
|
||||
get { return _CoverThemes.Select(th => th.Info.Name).ToArray(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -79,7 +70,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
for (int i = 0; i < _CoverThemes.Count; i++)
|
||||
{
|
||||
if (_CoverThemes[i].Name == CConfig.Config.Theme.CoverTheme)
|
||||
if (_CoverThemes[i].Info.Name == CConfig.Config.Theme.CoverTheme)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
@@ -164,48 +155,12 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
for (int i = 0; i < _CoverThemes.Count; i++)
|
||||
{
|
||||
if (_CoverThemes[i].Name == coverThemeName)
|
||||
if (_CoverThemes[i].Info.Name == coverThemeName)
|
||||
return _CoverThemes[i];
|
||||
}
|
||||
return new SThemeCover();
|
||||
}
|
||||
|
||||
private static void Foo(SThemeScreen a, SThemeScreen b)
|
||||
{
|
||||
a = b;
|
||||
}
|
||||
|
||||
private static void _TestNewLoad(string path)
|
||||
{
|
||||
SThemeCover themeCover;
|
||||
var xml = new CXmlSerializer();
|
||||
themeCover = xml.Deserialize<SThemeCover>(path);
|
||||
string cover = themeCover.Info.Author;
|
||||
SThemeScreen theme = new SThemeScreen();
|
||||
SThemeScreen theme2 = new SThemeScreen();
|
||||
Stopwatch watch = new Stopwatch();
|
||||
watch.Start();
|
||||
for (int i = 0; i < 1; i++)
|
||||
theme = xml.Deserialize<SThemeScreen>(Path.Combine(CBase.Themes.GetThemeScreensPath(-1), "ScreenMain.xml"));
|
||||
watch.Stop();
|
||||
xml.Serialize(Path.Combine(CBase.Themes.GetThemeScreensPath(-1), "ScreenMain2.xml"), theme);
|
||||
return;
|
||||
Stopwatch watch2 = new Stopwatch();
|
||||
watch2.Start();
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
using (TextReader textReader = new StreamReader(Path.Combine(CBase.Themes.GetThemeScreensPath(-1), "ScreenMain.xml")))
|
||||
{
|
||||
XmlSerializer deserializer = new XmlSerializer(typeof(STheme));
|
||||
|
||||
theme2 = (SThemeScreen)deserializer.Deserialize(textReader);
|
||||
}
|
||||
}
|
||||
watch2.Stop();
|
||||
Foo(theme, theme2);
|
||||
MessageBox.Show(watch.ElapsedMilliseconds + "ms/5000=" + watch.ElapsedMilliseconds / 1000 + "ms vs " + watch2.ElapsedMilliseconds / 100);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads all cover-themes to list.
|
||||
/// </summary>
|
||||
@@ -213,27 +168,27 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
_CoverThemes.Clear();
|
||||
|
||||
string path = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover);
|
||||
List<string> files = CHelper.ListFiles(path, "*.xml");
|
||||
string folderPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover);
|
||||
List<string> files = CHelper.ListFiles(folderPath, "*.xml");
|
||||
|
||||
var xml = new CXmlDeserializer();
|
||||
foreach (string file in files)
|
||||
{
|
||||
_TestNewLoad(Path.Combine(path, file));
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(path, file));
|
||||
|
||||
if (xmlReader != null)
|
||||
SThemeCover theme;
|
||||
try
|
||||
{
|
||||
var coverTheme = new SThemeCover();
|
||||
theme = xml.Deserialize<SThemeCover>(Path.Combine(folderPath, file));
|
||||
}
|
||||
catch (XmlException e)
|
||||
{
|
||||
CLog.LogError("Error loading cover theme " + file + ": " + e.Message);
|
||||
continue;
|
||||
}
|
||||
|
||||
xmlReader.GetValue("//root/Info/Name", out coverTheme.Name, String.Empty);
|
||||
xmlReader.GetValue("//root/Info/Folder", out coverTheme.Folder, String.Empty);
|
||||
|
||||
if (coverTheme.Folder != "" && coverTheme.Name != "")
|
||||
{
|
||||
coverTheme.FilePath = xmlReader.FilePath;
|
||||
|
||||
_CoverThemes.Add(coverTheme);
|
||||
}
|
||||
if (theme.Info.Folder != "" && theme.Info.Name != "")
|
||||
{
|
||||
theme.FolderPath = Path.Combine(folderPath, theme.Info.Folder);
|
||||
_CoverThemes.Add(theme);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -245,11 +200,10 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
SThemeCover coverTheme = _CoverTheme(coverThemeName);
|
||||
|
||||
if (String.IsNullOrEmpty(coverTheme.Name))
|
||||
if (String.IsNullOrEmpty(coverTheme.Info.Name))
|
||||
return;
|
||||
|
||||
string coverPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder);
|
||||
List<string> files = CHelper.ListImageFiles(coverPath, true, true);
|
||||
List<string> files = CHelper.ListImageFiles(coverTheme.FolderPath, true, true);
|
||||
|
||||
lock (_Covers)
|
||||
{
|
||||
@@ -297,22 +251,14 @@ namespace Vocaluxe.Base
|
||||
|
||||
private static void _LoadCoverGenerators(SThemeCover coverTheme)
|
||||
{
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(coverTheme.FilePath);
|
||||
string coverPath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameCover, coverTheme.Folder);
|
||||
lock (_CoverGenerators)
|
||||
{
|
||||
int i = 1;
|
||||
while (xmlReader.ItemExists("//root/CoverGenerator" + i))
|
||||
foreach (SThemeCoverGenerator theme in coverTheme.CoverGenerators)
|
||||
{
|
||||
SThemeCoverGenerator theme;
|
||||
if (xmlReader.Read("//root/CoverGenerator" + i, out theme))
|
||||
{
|
||||
if (_CoverGenerators.ContainsKey(theme.Type))
|
||||
continue;
|
||||
CCoverGenerator el = new CCoverGenerator(theme, coverPath);
|
||||
_CoverGenerators.Add(theme.Type, el);
|
||||
}
|
||||
i++;
|
||||
if (_CoverGenerators.ContainsKey(theme.Type))
|
||||
continue;
|
||||
CCoverGenerator el = new CCoverGenerator(theme, coverTheme.FolderPath);
|
||||
_CoverGenerators.Add(theme.Type, el);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+78
-115
@@ -27,7 +27,7 @@ namespace Vocaluxe.Base
|
||||
struct SLanguage
|
||||
{
|
||||
public string Name;
|
||||
public string LanguageFilePath;
|
||||
public string FilePath;
|
||||
|
||||
public Dictionary<string, string> Texts;
|
||||
public List<SPartyLanguage> PartyModeTexts;
|
||||
@@ -41,7 +41,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
static class CLanguage
|
||||
{
|
||||
private static List<SLanguage> _Languages;
|
||||
private static readonly List<SLanguage> _Languages = new List<SLanguage>();
|
||||
private static int _CurrentLanguage = -1;
|
||||
private static int _FallbackLanguage;
|
||||
|
||||
@@ -55,11 +55,6 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetLanguageName(int lang)
|
||||
{
|
||||
return _Languages[lang].Name;
|
||||
}
|
||||
|
||||
public static IEnumerable<string> GetLanguageNames()
|
||||
{
|
||||
var languages = new string[_Languages.Count];
|
||||
@@ -72,8 +67,6 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static bool Init()
|
||||
{
|
||||
_Languages = new List<SLanguage>();
|
||||
|
||||
var files = new List<string>();
|
||||
files.AddRange(CHelper.ListFiles(CSettings.FolderNameLanguages, "*.xml", true, true));
|
||||
|
||||
@@ -84,7 +77,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static bool SetLanguage(string language)
|
||||
{
|
||||
int nr = GetLanguageNr(language);
|
||||
int nr = _GetLanguageNr(language);
|
||||
if (nr != -1)
|
||||
{
|
||||
_CurrentLanguage = nr;
|
||||
@@ -93,7 +86,7 @@ namespace Vocaluxe.Base
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int GetLanguageNr(string language)
|
||||
private static int _GetLanguageNr(string language)
|
||||
{
|
||||
for (int i = 0; i < _Languages.Count; i++)
|
||||
{
|
||||
@@ -103,59 +96,58 @@ namespace Vocaluxe.Base
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static string Translate(string keyWord, int partyModeID = -1)
|
||||
/// <summary>
|
||||
/// Checks if a translation exists and returns it
|
||||
/// </summary>
|
||||
/// <param name="keyWord">Word to translate</param>
|
||||
/// <param name="partyModeID"></param>
|
||||
/// <param name="translation">Translated word or keyWord if translation does not exist</param>
|
||||
/// <returns>True if word was translated</returns>
|
||||
private static bool _GetTranslation(string keyWord, int partyModeID, out string translation)
|
||||
{
|
||||
if (keyWord == null)
|
||||
return "Error";
|
||||
|
||||
if (keyWord.Length < 3 || keyWord.Substring(0, 3) != "TR_")
|
||||
return keyWord;
|
||||
|
||||
string result;
|
||||
if (partyModeID != -1)
|
||||
{
|
||||
int partyModeNr = _GetPartyModeNr(partyModeID, _CurrentLanguage);
|
||||
if (partyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[partyModeNr].Texts.TryGetValue(keyWord, out result))
|
||||
return result;
|
||||
|
||||
partyModeNr = _GetPartyModeNr(partyModeID, _FallbackLanguage);
|
||||
if (partyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[partyModeNr].Texts.TryGetValue(keyWord, out result))
|
||||
return result;
|
||||
translation = "Error";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_Languages[_CurrentLanguage].Texts.TryGetValue(keyWord, out result))
|
||||
return result;
|
||||
if (_Languages[_FallbackLanguage].Texts.TryGetValue(keyWord, out result))
|
||||
return result;
|
||||
if (keyWord.Length < 3 || keyWord.Substring(0, 3) != "TR_")
|
||||
{
|
||||
translation = keyWord;
|
||||
return false;
|
||||
}
|
||||
|
||||
return keyWord;
|
||||
if (partyModeID != -1)
|
||||
{
|
||||
Dictionary<string, string> partyModeTexts = _GetPartyModeTexts(_CurrentLanguage, partyModeID);
|
||||
if (partyModeTexts != null && partyModeTexts.TryGetValue(keyWord, out translation))
|
||||
return true;
|
||||
|
||||
partyModeTexts = _GetPartyModeTexts(_FallbackLanguage, partyModeID);
|
||||
if (partyModeTexts != null && partyModeTexts.TryGetValue(keyWord, out translation))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_Languages[_CurrentLanguage].Texts.TryGetValue(keyWord, out translation))
|
||||
return true;
|
||||
if (_Languages[_FallbackLanguage].Texts.TryGetValue(keyWord, out translation))
|
||||
return true;
|
||||
|
||||
translation = keyWord;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string Translate(string keyWord, int partyModeID = -1)
|
||||
{
|
||||
string translation;
|
||||
_GetTranslation(keyWord, partyModeID, out translation);
|
||||
return translation;
|
||||
}
|
||||
|
||||
public static bool TranslationExists(string keyWord, int partyModeID = -1)
|
||||
{
|
||||
if (keyWord == null)
|
||||
return false;
|
||||
|
||||
if (keyWord.Length < 3 || keyWord.Substring(0, 3) != "TR_")
|
||||
return false;
|
||||
|
||||
if (partyModeID != -1)
|
||||
{
|
||||
int partyModeNr = _GetPartyModeNr(partyModeID, _CurrentLanguage);
|
||||
if (partyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[partyModeNr].Texts.ContainsKey(keyWord))
|
||||
return true;
|
||||
|
||||
partyModeNr = _GetPartyModeNr(partyModeID, _FallbackLanguage);
|
||||
if (partyModeNr != -1 && _Languages[_CurrentLanguage].PartyModeTexts[partyModeNr].Texts.ContainsKey(keyWord))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_Languages[_CurrentLanguage].Texts.ContainsKey(keyWord))
|
||||
return true;
|
||||
if (_Languages[_FallbackLanguage].Texts.ContainsKey(keyWord))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
string translation;
|
||||
return _GetTranslation(keyWord, partyModeID, out translation);
|
||||
}
|
||||
|
||||
public static bool LoadPartyLanguageFiles(int partyModeID, string path)
|
||||
@@ -166,89 +158,60 @@ namespace Vocaluxe.Base
|
||||
return files.All(file => _LoadPartyLanguageFile(partyModeID, file));
|
||||
}
|
||||
|
||||
private static bool _LoadLanguageEntries(CXMLReader xmlReader, out Dictionary<string, string> texts)
|
||||
private static bool _LoadLanguageEntries(string filePath, out Dictionary<string, string> texts)
|
||||
{
|
||||
texts = new Dictionary<string, string>();
|
||||
IEnumerable<string> names = xmlReader.GetAttributes("//resources/string", "name");
|
||||
foreach (string name in names)
|
||||
var deser = new CXmlDeserializer();
|
||||
try
|
||||
{
|
||||
string value;
|
||||
if (!xmlReader.GetValue("//resources/string[@name='" + name + "']", out value, ""))
|
||||
continue;
|
||||
try
|
||||
{
|
||||
texts.Add(name, value);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error reading language file " + xmlReader.FilePath + ": " + e.Message);
|
||||
return false;
|
||||
}
|
||||
texts = deser.Deserialize<Dictionary<string, string>>(filePath);
|
||||
string language;
|
||||
if (!texts.TryGetValue("language", out language))
|
||||
throw new Exception("'language' entry is missing");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error reading language file " + filePath + ": " + e.Message);
|
||||
texts = null;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool _LoadPartyLanguageFile(int partyModeID, string file)
|
||||
private static bool _LoadPartyLanguageFile(int partyModeID, string filePath)
|
||||
{
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(file);
|
||||
if (xmlReader == null)
|
||||
var lang = new SPartyLanguage {PartyModeID = partyModeID};
|
||||
|
||||
if (!_LoadLanguageEntries(filePath, out lang.Texts))
|
||||
return false;
|
||||
|
||||
string value = string.Empty;
|
||||
if (xmlReader.GetValue("//resources/string[@name='language']", out value, value))
|
||||
{
|
||||
int nr = GetLanguageNr(value);
|
||||
|
||||
if (nr == -1)
|
||||
return true;
|
||||
|
||||
var lang = new SPartyLanguage {PartyModeID = partyModeID};
|
||||
if (!_LoadLanguageEntries(xmlReader, out lang.Texts))
|
||||
return false;
|
||||
int nr = _GetLanguageNr(lang.Texts["language"]);
|
||||
|
||||
if (nr >= 0)
|
||||
_Languages[nr].PartyModeTexts.Add(lang);
|
||||
return true;
|
||||
}
|
||||
CLog.LogError("Error reading Party Language File " + file);
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void _LoadLanguageFile(string fileName)
|
||||
{
|
||||
var lang = new SLanguage {LanguageFilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameLanguages, fileName)};
|
||||
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(lang.LanguageFilePath);
|
||||
if (xmlReader == null)
|
||||
var lang = new SLanguage {FilePath = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNameLanguages, fileName), PartyModeTexts = new List<SPartyLanguage>()};
|
||||
if (!_LoadLanguageEntries(lang.FilePath, out lang.Texts))
|
||||
return;
|
||||
|
||||
string value = string.Empty;
|
||||
if (xmlReader.GetValue("//resources/string[@name='language']", out value, value))
|
||||
lang.Name = lang.Texts["language"];
|
||||
if (lang.Name == CSettings.FallbackLanguage)
|
||||
{
|
||||
lang.Name = value;
|
||||
|
||||
if (lang.Name == CSettings.FallbackLanguage)
|
||||
{
|
||||
_FallbackLanguage = _Languages.Count;
|
||||
if (_CurrentLanguage < 0)
|
||||
_CurrentLanguage = _FallbackLanguage;
|
||||
}
|
||||
|
||||
lang.PartyModeTexts = new List<SPartyLanguage>();
|
||||
|
||||
_LoadLanguageEntries(xmlReader, out lang.Texts);
|
||||
|
||||
_Languages.Add(lang);
|
||||
_FallbackLanguage = _Languages.Count;
|
||||
if (_CurrentLanguage < 0)
|
||||
_CurrentLanguage = _FallbackLanguage;
|
||||
}
|
||||
|
||||
_Languages.Add(lang);
|
||||
}
|
||||
|
||||
private static int _GetPartyModeNr(int partyModeID, int language)
|
||||
private static Dictionary<string, string> _GetPartyModeTexts(int language, int partyModeID)
|
||||
{
|
||||
for (int i = 0; i < _Languages[language].PartyModeTexts.Count; i++)
|
||||
{
|
||||
if (_Languages[language].PartyModeTexts[i].PartyModeID == partyModeID)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
return
|
||||
_Languages[language].PartyModeTexts.Where(partyLanguage => partyLanguage.PartyModeID == partyModeID).Select(partyLanguage => partyLanguage.Texts).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
+22
-81
@@ -28,24 +28,6 @@ using VocaluxeLib.Xml;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
{
|
||||
|
||||
#region Structs
|
||||
struct SPartyMode
|
||||
{
|
||||
public int PartyModeSystemVersion;
|
||||
public string Name;
|
||||
public string Description;
|
||||
public string Author;
|
||||
public string Folder;
|
||||
public string PartyModeFile;
|
||||
public List<string> ScreenFiles;
|
||||
public int PartyModeVersionMajor;
|
||||
public int PartyModeVersionMinor;
|
||||
public string TargetAudience;
|
||||
public IPartyMode PartyMode;
|
||||
}
|
||||
#endregion Structs
|
||||
|
||||
static class CParty
|
||||
{
|
||||
private const int _PartyModeSystemVersion = 1;
|
||||
@@ -113,26 +95,7 @@ namespace Vocaluxe.Base
|
||||
foreach (KeyValuePair<int, SPartyMode> kvp in _PartyModes)
|
||||
{
|
||||
if (kvp.Key != _NormalGameModeID)
|
||||
{
|
||||
SPartyMode mode = kvp.Value;
|
||||
|
||||
var info = new SPartyModeInfos
|
||||
{
|
||||
Author = mode.Author,
|
||||
Description = mode.Description,
|
||||
Name = mode.Name,
|
||||
PartyModeID = mode.PartyMode.ID,
|
||||
VersionMajor = mode.PartyModeVersionMajor,
|
||||
VersionMinor = mode.PartyModeVersionMinor,
|
||||
TargetAudience = mode.TargetAudience,
|
||||
MaxPlayers = mode.PartyMode.GetMaxPlayer(),
|
||||
MinPlayers = mode.PartyMode.GetMinPlayer(),
|
||||
MaxTeams = mode.PartyMode.GetMaxTeams(),
|
||||
MinTeams = mode.PartyMode.GetMinTeams()
|
||||
};
|
||||
|
||||
infos.Add(info);
|
||||
}
|
||||
infos.Add(kvp.Value.Info);
|
||||
}
|
||||
return infos;
|
||||
}
|
||||
@@ -233,48 +196,26 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
private static bool _LoadPartyMode(string file, out SPartyMode pm)
|
||||
private static bool _LoadPartyMode(string filePath, out SPartyMode pm)
|
||||
{
|
||||
pm = new SPartyMode {ScreenFiles = new List<string>()};
|
||||
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(file);
|
||||
|
||||
//Error...
|
||||
if (xmlReader == null)
|
||||
return false;
|
||||
|
||||
bool loaded = true;
|
||||
|
||||
loaded &= xmlReader.TryGetIntValue("//root/PartyModeSystemVersion", ref pm.PartyModeSystemVersion);
|
||||
loaded &= xmlReader.GetValue("//root/Info/Name", out pm.Name);
|
||||
loaded &= xmlReader.GetValue("//root/Info/Description", out pm.Description);
|
||||
loaded &= xmlReader.GetValue("//root/Info/Author", out pm.Author);
|
||||
loaded &= xmlReader.GetValue("//root/Info/Folder", out pm.Folder);
|
||||
loaded &= xmlReader.GetValue("//root/Info/PartyModeFile", out pm.PartyModeFile);
|
||||
loaded &= xmlReader.TryGetIntValue("//root/Info/PartyModeVersionMajor", ref pm.PartyModeVersionMajor);
|
||||
loaded &= xmlReader.TryGetIntValue("//root/Info/PartyModeVersionMinor", ref pm.PartyModeVersionMinor);
|
||||
loaded &= xmlReader.GetValue("//root/Info/TargetAudience", out pm.TargetAudience);
|
||||
loaded &= xmlReader.GetValues("//root/PartyScreens/*", ref pm.ScreenFiles);
|
||||
|
||||
if (!loaded)
|
||||
CXmlDeserializer deser = new CXmlDeserializer();
|
||||
try
|
||||
{
|
||||
CLog.LogError("Error loading PartyMode file: " + file);
|
||||
pm = deser.Deserialize<SPartyMode>(filePath);
|
||||
if (pm.PartyModeSystemVersion != _PartyModeSystemVersion)
|
||||
throw new Exception("Wrong PartyModeSystemVersion " + pm.PartyModeSystemVersion + " expected: " + _PartyModeSystemVersion);
|
||||
|
||||
if (pm.ScreenFiles.Count == 0)
|
||||
throw new Exception("No ScreenFiles found");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
pm = new SPartyMode();
|
||||
CLog.LogError("Error loading PartyMode file " + filePath + ": " + e.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pm.PartyModeSystemVersion != _PartyModeSystemVersion)
|
||||
{
|
||||
CLog.LogError("Error loading PartyMode file (wrong PartyModeSystemVersion): " + file);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pm.ScreenFiles.Count == 0)
|
||||
{
|
||||
CLog.LogError("Error loading PartyMode file (no ScreenFiles found): " + file);
|
||||
return false;
|
||||
}
|
||||
|
||||
string pathToPm = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNamePartyModes, pm.Folder);
|
||||
string pathToPm = Path.Combine(CSettings.ProgramFolder, CSettings.FolderNamePartyModes, pm.Info.Folder);
|
||||
string pathToCode = Path.Combine(pathToPm, CSettings.FolderNamePartyModeCode);
|
||||
|
||||
var filesToCompile = new List<string>();
|
||||
@@ -284,11 +225,11 @@ namespace Vocaluxe.Base
|
||||
if (output == null)
|
||||
return false;
|
||||
|
||||
object instance = output.CreateInstance(typeof(IPartyMode).Namespace + "." + pm.Folder + "." + pm.PartyModeFile, false,
|
||||
object instance = output.CreateInstance(typeof(IPartyMode).Namespace + "." + pm.Info.Folder + "." + pm.Info.PartyModeFile, false,
|
||||
BindingFlags.Public | BindingFlags.Instance, null, new object[] {_NextID++, pathToPm}, null, null);
|
||||
if (instance == null)
|
||||
{
|
||||
CLog.LogError("Error creating Instance of PartyMode file: " + file);
|
||||
CLog.LogError("Error creating Instance of PartyMode file: " + filePath);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -298,13 +239,13 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error casting PartyMode file: " + file + "; " + e.Message);
|
||||
CLog.LogError("Error casting PartyMode file: " + filePath + "; " + e.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!CLanguage.LoadPartyLanguageFiles(pm.PartyMode.ID, Path.Combine(pathToPm, CSettings.FolderNamePartyModeLanguages)))
|
||||
{
|
||||
CLog.LogError("Error loading language files for PartyMode: " + file);
|
||||
CLog.LogError("Error loading language files for PartyMode: " + filePath);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -316,7 +257,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
foreach (string screenfile in pm.ScreenFiles)
|
||||
{
|
||||
CMenuParty screen = _GetPartyScreenInstance(output, screenfile, pm.Folder);
|
||||
CMenuParty screen = _GetPartyScreenInstance(output, screenfile, pm.Info.Folder);
|
||||
|
||||
if (screen != null)
|
||||
{
|
||||
@@ -327,7 +268,7 @@ namespace Vocaluxe.Base
|
||||
return false;
|
||||
}
|
||||
pm.PartyMode.LoadTheme();
|
||||
|
||||
pm.Info.LoadData(pm.PartyMode);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,9 +40,9 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
|
||||
private bool _CheckRequiredElements()
|
||||
{
|
||||
List<string> missingTextures = _RequiredTextures.FindAll(name => !_Textures.ContainsKey(name));
|
||||
List<string> missingVideos = _RequiredVideos.FindAll(name => !_Videos.ContainsKey(name));
|
||||
List<string> missingColors = _RequiredColors.FindAll(name => !_Data.Colors.ContainsKey(name));
|
||||
List<string> missingTextures = _Required.Textures.FindAll(name => !_Textures.ContainsKey(name));
|
||||
List<string> missingVideos = _Required.Videos.FindAll(name => !_Videos.ContainsKey(name));
|
||||
List<string> missingColors = _Required.Colors.FindAll(name => !_Data.Colors.ContainsKey(name));
|
||||
if (missingTextures.Count + missingVideos.Count + missingColors.Count == 0)
|
||||
return true;
|
||||
string msg = "The skin \"" + this + "\" is missing the following elements: ";
|
||||
|
||||
@@ -43,21 +43,21 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
|
||||
public override bool GetColor(string name, out SColorF color)
|
||||
{
|
||||
if (_Parent.Name == "Default" && !_RequiredColors.Contains(name))
|
||||
if (_Parent.Name == "Default" && !_Required.Colors.Contains(name))
|
||||
CLog.LogDebug("Non-Default color: " + name);
|
||||
return base.GetColor(name, out color) || _BaseSkin.GetColor(name, out color);
|
||||
}
|
||||
|
||||
public override CVideoStream GetVideo(string name, bool loop)
|
||||
{
|
||||
if (_Parent.Name == "Default" && !_RequiredVideos.Contains(name))
|
||||
if (_Parent.Name == "Default" && !_Required.Videos.Contains(name))
|
||||
CLog.LogDebug("Non-Default color: " + name);
|
||||
return base.GetVideo(name, loop) ?? _BaseSkin.GetVideo(name, loop);
|
||||
}
|
||||
|
||||
public override CTextureRef GetTexture(string name)
|
||||
{
|
||||
if (_Parent.Name == "Default" && !_RequiredTextures.Contains(name))
|
||||
if (_Parent.Name == "Default" && !_Required.Textures.Contains(name))
|
||||
CLog.LogDebug("Non-Default color: " + name);
|
||||
return base.GetTexture(name) ?? _BaseSkin.GetTexture(name);
|
||||
}
|
||||
|
||||
@@ -19,9 +19,12 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
using VocaluxeLib;
|
||||
using VocaluxeLib.Draw;
|
||||
using VocaluxeLib.Xml;
|
||||
using System.Linq;
|
||||
|
||||
namespace Vocaluxe.Base.ThemeSystem
|
||||
{
|
||||
@@ -34,9 +37,43 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
abstract class CSkin
|
||||
{
|
||||
private const int _SkinSystemVersion = 4;
|
||||
protected static readonly List<string> _RequiredTextures = new List<string>();
|
||||
protected static readonly List<string> _RequiredVideos = new List<string>();
|
||||
protected static readonly List<string> _RequiredColors = new List<string>();
|
||||
|
||||
protected struct SRequiredElements
|
||||
{
|
||||
[XmlIgnore] public List<string> Textures, Videos, Colors;
|
||||
[XmlElement("Textures")]
|
||||
public string TexturesStr
|
||||
{
|
||||
get { return string.Join("\r\n", Textures); }
|
||||
set
|
||||
{
|
||||
string[] entries = value.Split(new string[] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);
|
||||
Textures = entries.Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();
|
||||
}
|
||||
}
|
||||
[XmlElement("Videos")]
|
||||
public string VideosStr
|
||||
{
|
||||
get { return string.Join("\r\n", Videos); }
|
||||
set
|
||||
{
|
||||
string[] entries = value.Split(new string[] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);
|
||||
Videos = entries.Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();
|
||||
}
|
||||
}
|
||||
[XmlElement("Colors")]
|
||||
public string ColorsStr
|
||||
{
|
||||
get { return string.Join("\r\n", Colors); }
|
||||
set
|
||||
{
|
||||
string[] entries = value.Split(new string[] {"\r\n", "\n"}, StringSplitOptions.RemoveEmptyEntries);
|
||||
Colors = entries.Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected static SRequiredElements _Required;
|
||||
|
||||
private readonly string _Folder;
|
||||
private readonly string _FileName;
|
||||
@@ -56,26 +93,32 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
public static bool InitRequiredElements()
|
||||
{
|
||||
string path = Path.Combine(CSettings.ProgramFolder, CSettings.FileNameRequiredSkinElements);
|
||||
CXMLReader xmlReader = CXMLReader.OpenFile(path);
|
||||
if (xmlReader == null)
|
||||
var xml = new CXmlDeserializer();
|
||||
try
|
||||
{
|
||||
_Required = xml.Deserialize<SRequiredElements>(path);
|
||||
}
|
||||
catch (XmlException e)
|
||||
{
|
||||
CLog.LogError("Error reading required elements: " + e.Message);
|
||||
return false;
|
||||
bool ok = xmlReader.Read("//root/Textures", _RequiredTextures);
|
||||
ok &= xmlReader.Read("//root/Videos", _RequiredVideos);
|
||||
ok &= xmlReader.Read("//root/Colors", _RequiredColors);
|
||||
}
|
||||
for (int i = 1; i <= CSettings.MaxNumPlayer; i++)
|
||||
{
|
||||
string name = "Player" + i;
|
||||
if (!_RequiredColors.Contains(name))
|
||||
_RequiredColors.Add(name);
|
||||
if (!_Required.Colors.Contains(name))
|
||||
_Required.Colors.Add(name);
|
||||
}
|
||||
return ok;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void Close()
|
||||
{
|
||||
_RequiredTextures.Clear();
|
||||
_RequiredVideos.Clear();
|
||||
_RequiredColors.Clear();
|
||||
if (_Required.Textures == null)
|
||||
return;
|
||||
_Required.Textures.Clear();
|
||||
_Required.Videos.Clear();
|
||||
_Required.Colors.Clear();
|
||||
}
|
||||
|
||||
protected CSkin(string folder, string file, CTheme parent)
|
||||
@@ -94,7 +137,7 @@ namespace Vocaluxe.Base.ThemeSystem
|
||||
{
|
||||
try
|
||||
{
|
||||
var xml = new CXmlSerializer();
|
||||
var xml = new CXmlDeserializer();
|
||||
_Data = xml.Deserialize<SSkin>(Path.Combine(_Folder, _FileName));
|
||||
if (_Data.SkinSystemVersion != _SkinSystemVersion)
|
||||
{
|
||||
|
||||
@@ -20,6 +20,7 @@ using System.ComponentModel;
|
||||
using System.Xml.Serialization;
|
||||
using Vocaluxe.Base.Fonts;
|
||||
using VocaluxeLib;
|
||||
using VocaluxeLib.PartyModes;
|
||||
using VocaluxeLib.Xml;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
@@ -108,4 +109,37 @@ namespace Vocaluxe.Base
|
||||
public SPlaylistInfo Info;
|
||||
[XmlArray] public SPlaylistSong[] Songs;
|
||||
}
|
||||
|
||||
#region Partymode
|
||||
struct SPartyModeInfos
|
||||
{
|
||||
public string Name;
|
||||
public string Description;
|
||||
public string Author;
|
||||
public string Folder;
|
||||
public string PartyModeFile;
|
||||
[XmlAltName("PartyModeVersionMajor")] public int VersionMajor;
|
||||
[XmlAltName("PartyModeVersionMinor")] public int VersionMinor;
|
||||
public string TargetAudience;
|
||||
[XmlIgnore] public int MaxPlayers, MinPlayers, MaxTeams, MinTeams;
|
||||
[XmlIgnore] public int PartyModeID;
|
||||
|
||||
public void LoadData(IPartyMode pm)
|
||||
{
|
||||
MaxPlayers = pm.GetMaxPlayer();
|
||||
MinPlayers = pm.GetMinPlayer();
|
||||
MaxTeams = pm.GetMaxTeams();
|
||||
MinTeams = pm.GetMinTeams();
|
||||
PartyModeID = pm.ID;
|
||||
}
|
||||
}
|
||||
|
||||
struct SPartyMode
|
||||
{
|
||||
public int PartyModeSystemVersion;
|
||||
[XmlArray("PartyScreens"), XmlArrayItem("ScreenFile")] public List<string> ScreenFiles;
|
||||
[XmlIgnore] public IPartyMode PartyMode;
|
||||
public SPartyModeInfos Info;
|
||||
}
|
||||
#endregion Partymode
|
||||
}
|
||||
@@ -134,7 +134,7 @@ namespace Vocaluxe.Screens
|
||||
private void _SaveConfig()
|
||||
{
|
||||
CLanguage.LanguageId = _SelectSlides[_SelectSlideLanguage].Selection;
|
||||
CConfig.Config.Game.Language = CLanguage.GetLanguageName(CLanguage.LanguageId);
|
||||
CConfig.Config.Game.Language = _SelectSlides[_SelectSlideLanguage].Value;
|
||||
CConfig.Config.Debug.DebugLevel = (EDebugLevel)_SelectSlides[_SelectSlideDebugLevel].Selection;
|
||||
CConfig.Config.Game.SongMenu = (ESongMenu)_SelectSlides[_SelectSlideSongMenu].Selection;
|
||||
CConfig.Config.Game.SongSorting = (ESongSorting)_SelectSlides[_SelectSlideSongSorting].Selection;
|
||||
|
||||
+1
-17
@@ -67,7 +67,7 @@ namespace VocaluxeLib
|
||||
[XmlRoot("root")]
|
||||
public struct SThemeCover
|
||||
{
|
||||
[XmlIgnore] public string Name, Folder, FilePath;
|
||||
[XmlIgnore] public string FolderPath;
|
||||
public SThemeCoverInfo Info;
|
||||
[XmlElement("CoverGenerator", IsNullable = false)] public List<SThemeCoverGenerator> CoverGenerators;
|
||||
}
|
||||
@@ -366,21 +366,5 @@ namespace VocaluxeLib
|
||||
public int VoiceNr;
|
||||
public int ID;
|
||||
}
|
||||
|
||||
public struct SPartyModeInfos
|
||||
{
|
||||
public int PartyModeID;
|
||||
public string Name;
|
||||
public string Description;
|
||||
public string TargetAudience;
|
||||
public int MaxPlayers;
|
||||
public int MinPlayers;
|
||||
public int MaxTeams;
|
||||
public int MinTeams;
|
||||
|
||||
public string Author;
|
||||
public int VersionMajor;
|
||||
public int VersionMinor;
|
||||
}
|
||||
#endregion Game
|
||||
}
|
||||
Reference in new issue
Block a user