Exemplo n.º 1
0
        /// <summary>
        /// Converts Xml of settings to a settings object
        /// </summary>
        /// <typeparam name="T">Type of the settings you want</typeparam>
        /// <param name="xml">Xml string of settings</param>
        /// <returns>Instance of Settings Class</returns>
        internal static T GetSettingsInstance <T>(string xml) where T : ITrinitySetting <T>
        {
            var serializer = new DataContractSerializer(typeof(T));

            using (var reader = XmlReader.Create(new StringReader(xml)))
            {
                XmlReader migrator      = new SettingsMigrator(reader);
                var       loadedSetting = (T)serializer.ReadObject(migrator);
                return(loadedSetting);
            }
        }
Exemplo n.º 2
0
        public void Load()
        {
            bool loadSuccessful = false;
            bool migrateConfig  = false;

            // Only load once every 500ms (prevents duplicate Load calls)
            if (DateTime.UtcNow.Subtract(_LastLoadedSettings).TotalMilliseconds <= 500)
            {
                return;
            }

            _LastLoadedSettings = DateTime.UtcNow;

            string filename = GlobalSettingsFile;

            lock (this)
            {
                try
                {
                    if (File.Exists(GlobalSettingsFile))
                    {
                        Logger.Log(TrinityLogLevel.Info, LogCategory.UserInformation, "Loading Global Settings, You can use per-battletag settings by removing the Trinity.xml file under your Demonbuddy settings directory");
                    }
                    else if (File.Exists(BattleTagSettingsFile))
                    {
                        Logger.Log(TrinityLogLevel.Info, LogCategory.UserInformation, "Loading BattleTag Settings");
                        filename = BattleTagSettingsFile;
                    }
                    else if (File.Exists(OldBattleTagSettingsFile))
                    {
                        Logger.Log(TrinityLogLevel.Debug, LogCategory.UserInformation, "Old configuration file found, need to migrate!");
                        filename      = OldBattleTagSettingsFile;
                        migrateConfig = true;
                    }

                    if (File.Exists(filename))
                    {
                        DateTime fsChangeStart = DateTime.UtcNow;
                        while (FileManager.IsFileReadLocked(new FileInfo(GlobalSettingsFile)))
                        {
                            Thread.Sleep(10);
                            if (DateTime.UtcNow.Subtract(fsChangeStart).TotalMilliseconds > 5000)
                            {
                                break;
                            }
                        }
                        using (Stream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
                        {
                            DataContractSerializer serializer = new DataContractSerializer(typeof(TrinitySetting));

                            XmlReader      reader        = XmlReader.Create(stream);
                            XmlReader      migrator      = new SettingsMigrator(reader);
                            TrinitySetting loadedSetting = (TrinitySetting)serializer.ReadObject(migrator);

                            loadedSetting.CopyTo(this);
                            stream.Close();
                            Logger.Log("Configuration file loaded");

                            // this tests to make sure we didn't load anything null, and our load was succesful
                            if (Advanced != null && Combat != null && Combat.Misc != null)
                            {
                                loadSuccessful = true;
                            }
                        }
                    }
                    else
                    {
                        Logger.Log(TrinityLogLevel.Debug, LogCategory.UserInformation, "Configuration file not found.");
                        Reset();
                    }
                }
                catch (Exception ex)
                {
                    Logger.Log(TrinityLogLevel.Error, LogCategory.UserInformation, "Error while loading Config file: {0}", ex);
                    loadSuccessful = false;
                    migrateConfig  = false;
                }

                if (migrateConfig && loadSuccessful)
                {
                    Logger.Log(TrinityLogLevel.Debug, LogCategory.UserInformation, "Migrating configuration to new Trinity.xml");
                    Save();
                    File.Delete(OldBattleTagSettingsFile);
                }
            }
        }