using RhythmBullet.Zer01HD.Utilities.Persistence; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; namespace RhythmBullet.Zer01HD.Utilities { public class PreferencesManager { private readonly Dictionary preferenceList; public string SavePath; XmlSerializer xmlSerializer; public PreferencesManager(string savePath, params Preferences[] preferences) { this.SavePath = savePath; preferenceList = new Dictionary(); Type[] preferenceTypes = new Type[preferences.Length]; for (int prefID = 0; prefID < preferences.Length; prefID++) { preferenceList.Add(preferences[prefID].GetType(), preferences[prefID]); preferenceTypes[prefID] = preferences[prefID].GetType(); } xmlSerializer = new XmlSerializer(typeof(Preferences), preferenceTypes); } public T GetPreferences() where T : Preferences { return (T)preferenceList[typeof(T)]; } public void Load() { foreach (KeyValuePair prefs in preferenceList) { if (!LoadSpecific(prefs.Key)) { SaveSpecific(prefs.Key); } } } public void Save() { foreach (KeyValuePair prefs in preferenceList) { SaveSpecific(prefs.Key); } } private bool LoadSpecific(Type preference) { string path = SavePath + "/" + preference.Name; if (File.Exists(path)) { Stream stream = new FileStream(SavePath + "/" + preference.Name, FileMode.Open); preferenceList[preference] = (Preferences)xmlSerializer.Deserialize(stream); stream.Close(); return true; } return false; } private void SaveSpecific(Type preference) { Stream stream = new FileStream(SavePath + preference.Name, FileMode.Create); xmlSerializer.Serialize(stream, preferenceList[preference]); stream.Close(); } } }