Ejemplo n.º 1
0
        public bool ResetToDefault()
        {
            var success  = false;
            var assembly = Assembly.GetExecutingAssembly();
            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;
            }
            return(success);
        }
Ejemplo n.º 2
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();
            }
        }
Ejemplo n.º 3
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();
            }
        }