SettingsData <T> DeserializeData(byte[] bytes, bool compressed) { if (compressed) { bytes = SettingsHelper.Decompress(bytes); } var data = Serializer.DeserializeFromXmlBytes <SettingsData <T> >(bytes); return(data); }
SettingsData <T> DeserializeData(byte[] bytes, bool compressed) { if (compressed) { bytes = SettingsHelper.Decompress(bytes); } var xml = Encoding.UTF8.GetString(bytes); var data = Serializer.DeserializeFromXmlString <SettingsData <T> >(xml); return(data); }
public bool ResetToDefault() { var assemblies = new List <Assembly>(); var exasm = Assembly.GetExecutingAssembly(); var enasm = Assembly.GetEntryAssembly(); assemblies.Add(exasm); if (exasm != enasm) { assemblies.Add(enasm); } var success = false; for (int a = 0; a < assemblies.Count; a++) { var assembly = assemblies[a]; var names = assembly.GetManifestResourceNames(); // Get compressed resource name. var name = names.FirstOrDefault(x => x.EndsWith(_XmlFile.Name + ".gz")); if (string.IsNullOrEmpty(name)) { // Get uncompressed resource name. name = names.FirstOrDefault(x => x.EndsWith(_XmlFile.Name)); } // If internal preset was found. if (!string.IsNullOrEmpty(name)) { var resource = assembly.GetManifestResourceStream(name); var sr = new StreamReader(resource); byte[] bytes; using (var memstream = new MemoryStream()) { sr.BaseStream.CopyTo(memstream); bytes = memstream.ToArray(); } if (name.EndsWith(".gz")) { bytes = SettingsHelper.Decompress(bytes); } var xml = Encoding.UTF8.GetString(bytes); var data = Serializer.DeserializeFromXmlString <SettingsData <T> >(xml); Items.Clear(); for (int i = 0; i < data.Items.Count; i++) { Items.Add(data.Items[i]); } success = true; break; } } return(success); }
public void LoadFrom(string fileName) { bool settingsLoaded = false; var fi = new FileInfo(fileName); // If configuration file exists then... if (fi.Exists) { // Try to read file until success. while (true) { SettingsData <T> data; // Deserialize and load data. lock (saveReadFileLock) { try { SettingsData <T> xmlItems; if (fi.FullName.EndsWith(".gz")) { var compressedBytes = File.ReadAllBytes(fi.FullName); var bytes = SettingsHelper.Decompress(compressedBytes); var xml = Encoding.UTF8.GetString(bytes); xmlItems = Serializer.DeserializeFromXmlString <SettingsData <T> >(xml, Encoding.UTF8); } else { xmlItems = Serializer.DeserializeFromXmlFile <SettingsData <T> >(fi.FullName); } data = xmlItems; //foreach (T item in items.Items) //{ // var oldItem = data.FirstOrDefault(x => x.Group == item.Group); // // If old item was not found then... // if (oldItem == null) // { // // Add as new. // SettingsManager.Current.Settings.Items.Add(item); // } // else // { // // Udate old item. // oldItem.Group = item.Group; // } //} if (data != null) { if (ApplyOrder != null) { ApplyOrder(data); } Items.Clear(); if (data != null) { var m = FilterList; var items = (m == null) ? data.Items : m(data.Items); if (items != null) { for (int i = 0; i < items.Count; i++) { Items.Add(items[i]); } } } settingsLoaded = true; } break; } catch (Exception ex) { var backupFile = fi.FullName + ".bak"; var text = string.Format("{0} file has become corrupted.\r\n\r\n" + "Reason: " + ex.Message + "\r\n\r\n" + "Program must reset {0} file in order to continue.\r\n\r\n" + " Click [Yes] to reset and continue.\r\n" + " Click [No] if you wish to attempt manual repair.\r\n\r\n" + " File: {1}", fi.Name, fi.FullName); var caption = string.Format("Corrupt {0} of {1}", fi.Name, Application.ProductName); //var form = new MessageBox(); //form.StartPosition = FormStartPosition.CenterParent; var result = MessageBox.Show(text, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (result == DialogResult.Yes) { if (File.Exists(backupFile)) { File.Copy(backupFile, fi.FullName, true); fi.Refresh(); } else { File.Delete(fi.FullName); break; } } else { // Avoid the inevitable crash by killing application first. Process.GetCurrentProcess().Kill(); return; } } } } } // If settings failed to load then... if (!settingsLoaded) { ResetToDefault(); } if (!settingsLoaded) { Save(); } }
public void LoadFrom(string fileName) { var settingsLoaded = false; var fi = new FileInfo(fileName); // If configuration file exists then... if (fi.Exists) { SettingsData <T> data = null; // Try to read file until success. while (true) { // Deserialize and load data. lock (saveReadFileLock) { try { SettingsData <T> xmlItems; if (fi.FullName.EndsWith(".gz")) { var compressedBytes = File.ReadAllBytes(fi.FullName); var bytes = SettingsHelper.Decompress(compressedBytes); var xml = Encoding.UTF8.GetString(bytes); xmlItems = Serializer.DeserializeFromXmlString <SettingsData <T> >(xml, Encoding.UTF8); } else { xmlItems = Serializer.DeserializeFromXmlFile <SettingsData <T> >(fi.FullName); } data = xmlItems; break; } catch (Exception ex) { var backupFile = fi.FullName + ".bak"; var sb = new StringBuilder(); sb.AppendFormat("{0} file has become corrupted.\r\n\r\n" + "Reason: " + ex.Message + "\r\n\r\n" + "Program must reset {0} file in order to continue.\r\n\r\n" + " Click [Yes] to reset and continue.\r\n" + " Click [No] if you wish to attempt manual repair.\r\n\r\n" + " File: {1}", fi.Name, fi.FullName); sb.AppendLine(); sb.Append('-', 64); sb.AppendLine(); sb.AppendLine(ex.ToString()); var caption = string.Format("Corrupt {0} of {1}", fi.Name, Application.ProductName); //var form = new MessageBox(); //form.StartPosition = FormStartPosition.CenterParent; var text = sb.ToString(); var result = MessageBox.Show(text, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (result == DialogResult.Yes) { if (File.Exists(backupFile)) { File.Copy(backupFile, fi.FullName, true); fi.Refresh(); } else { File.Delete(fi.FullName); break; } } else { // Avoid the inevitable crash by killing application first. Process.GetCurrentProcess().Kill(); return; } } } } // If data read was successful then... if (data != null) { // Reorder data of order method exists. var ao = ApplyOrder; if (ao != null) { ao(data); } LoadAndValidateData(data.Items); settingsLoaded = true; } } // If settings failed to load then... if (!settingsLoaded) { ResetToDefault(); Save(); } }