Ejemplo n.º 1
0
        private IEnumerable <string> LoadingWork(HeliosProfile profile, Dispatcher dispatcher)
        {
            XmlReaderSettings settings = new XmlReaderSettings();

            settings.IgnoreComments   = true;
            settings.IgnoreWhitespace = true;

            TextReader reader    = new StreamReader(profile.Path);
            XmlReader  xmlReader = XmlReader.Create(reader, settings);

            HeliosSerializer deserializer = new HeliosSerializer(dispatcher);
            int profileVersion            = deserializer.GetProfileVersion(xmlReader);

            if (profileVersion != 3)
            {
                profile.IsInvalidVersion = true;
            }
            else
            {
                foreach (string progress in deserializer.DeserializeProfile(profile, xmlReader))
                {
                    yield return(progress);
                }
            }

            xmlReader.Close();
            reader.Close();
        }
Ejemplo n.º 2
0
        public bool SaveProfile(HeliosProfile profile)
        {
            try
            {
                string tempPath   = Path.ChangeExtension(profile.Path, "tmp");
                string backupPath = Path.ChangeExtension(profile.Path, "bak");

                // Delete tmp file if exists
                if (File.Exists(tempPath))
                {
                    File.Delete(tempPath);
                }

                TextWriter    writer        = new StreamWriter(tempPath, false);
                TypeConverter boolConverter = TypeDescriptor.GetConverter(typeof(bool));

                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;

                XmlWriter xmlWriter = XmlWriter.Create(writer, settings);
                HeliosBindingCollection bindings = new HeliosBindingCollection();

                HeliosSerializer serializer = new HeliosSerializer(null);
                serializer.SerializeProfile(profile, xmlWriter);

                profile.IsDirty = false;
                xmlWriter.Close();
                writer.Close();

                // Delete existing backup
                if (File.Exists(backupPath))
                {
                    File.Delete(backupPath);
                }

                // backup existing file
                if (File.Exists(profile.Path))
                {
                    File.Move(profile.Path, backupPath);
                }

                // Rename .tmp to actual
                File.Move(tempPath, profile.Path);

                profile.LoadTime = Directory.GetLastWriteTime(profile.Path);

                return(true);
            }
            catch (Exception e)
            {
                Logger.Error(e, "Error saving profile");
                return(false);
            }
        }
Ejemplo n.º 3
0
        public HeliosProfile LoadProfile(string path, Dispatcher dispatcher)
        {
            HeliosProfile profile = null;

            try
            {
                if (File.Exists(path))
                {
                    bool rewrite = false;

                    profile      = new HeliosProfile(false);
                    profile.Path = path;
                    profile.Name = Path.GetFileNameWithoutExtension(path);

                    XmlReaderSettings settings = new XmlReaderSettings();
                    settings.IgnoreComments   = true;
                    settings.IgnoreWhitespace = true;

                    TextReader reader    = new StreamReader(path);
                    XmlReader  xmlReader = XmlReader.Create(reader, settings);

                    HeliosSerializer deserializer = new HeliosSerializer(dispatcher);
                    int profileVersion            = deserializer.GetProfileVersion(xmlReader);

                    if (profileVersion != 3)
                    {
                        profile.IsInvalidVersion = true;
                    }
                    else
                    {
                        deserializer.DeserializeProfile(profile, xmlReader);
                    }

                    xmlReader.Close();
                    reader.Close();

                    profile.IsDirty  = false;
                    profile.LoadTime = Directory.GetLastWriteTime(path);

                    if (rewrite)
                    {
                        SaveProfile(profile);
                    }
                }
            }
            catch (Exception e)
            {
                ConfigManager.LogManager.LogError("Error loading profile " + path, e);
                profile = null;
            }

            return(profile);
        }