示例#1
0
        SettingsData <T> DeserializeData(byte[] bytes, bool compressed)
        {
            if (compressed)
            {
                bytes = SettingsHelper.Decompress(bytes);
            }
            var data = Serializer.DeserializeFromXmlBytes <SettingsData <T> >(bytes);

            return(data);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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();
            }
        }
示例#5
0
        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();
            }
        }