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(); }
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); } }
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); }