/// <summary> /// Loads settings from XML. /// </summary> public static void Load() { string basePath = Organization.GetBasePath(false); if (!Directory.Exists(basePath)) { return; } // Initialize file types to defautls VideoFileTypes = new ObservableCollection <string>(); foreach (string type in DefaultVideoFileTypes) { VideoFileTypes.Add(type); } DeleteFileTypes = new ObservableCollection <string>(); foreach (string type in DefaultDeleteFileTypes) { DeleteFileTypes.Add(type); } IgnoreFileTypes = new ObservableCollection <string>(); foreach (string type in DefaultIgnoreFileTypes) { IgnoreFileTypes.Add(type); } // Load settings XML string path = Path.Combine(basePath, ROOT_XML + ".xml"); if (File.Exists(path)) { // Load XML XmlTextReader reader = new XmlTextReader(path); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(reader); foreach (XmlNode propNode in xmlDoc.DocumentElement.ChildNodes) { XmlElements element; if (!Enum.TryParse <XmlElements>(propNode.Name, out element)) { continue; } string value = propNode.InnerText; switch (element) { case XmlElements.ScanDirectories: ScanDirectories = new ObservableCollection <OrgFolder>(); foreach (XmlNode scanDirNode in propNode.ChildNodes) { OrgFolder folder = new OrgFolder(); folder.Load(scanDirNode); ScanDirectories.Add(folder); } break; case XmlElements.TvFileFormat: TvFileFormat.Load(propNode); break; case XmlElements.MovieFileFormat: MovieFileFormat.Load(propNode); break; case XmlElements.MovieFolderColletion: MovieFolders.Load(propNode); break; case XmlElements.TvFolderCollection: TvFolders.Load(propNode); break; case XmlElements.VideoFileTypes: VideoFileTypes = new ObservableCollection <string>(); foreach (XmlNode fileTypeNode in propNode.ChildNodes) { string videoType = fileTypeNode.InnerText; if (videoType.StartsWith(".")) { videoType = videoType.Substring(1, videoType.Length - 1); } VideoFileTypes.Add(videoType); } break; case XmlElements.DeleteFileTypes: DeleteFileTypes = new ObservableCollection <string>(); foreach (XmlNode fileTypeNode in propNode.ChildNodes) { string delType = fileTypeNode.InnerText; if (delType.StartsWith(".")) { delType = delType.Substring(1, delType.Length - 1); } DeleteFileTypes.Add(delType); } break; case XmlElements.IgnoreFileTypes: IgnoreFileTypes = new ObservableCollection <string>(); foreach (XmlNode fileTypeNode in propNode.ChildNodes) { string ignoreType = fileTypeNode.InnerText; if (ignoreType.StartsWith(".")) { ignoreType = ignoreType.Substring(1, ignoreType.Length - 1); } IgnoreFileTypes.Add(ignoreType); } break; case XmlElements.AutoMoveSetups: AutoMoveSetups = new ObservableCollection <AutoMoveFileSetup>(); foreach (XmlNode setupNode in propNode.ChildNodes) { AutoMoveFileSetup setup = new AutoMoveFileSetup(); setup.Load(setupNode); AutoMoveSetups.Add(setup); } break; case XmlElements.Gui: GuiControl.Load(propNode); break; case XmlElements.General: General.Load(propNode); break; case XmlElements.MovieFolders: MovieFolders.Clear(); foreach (XmlNode movieFolderNode in propNode.ChildNodes) { ContentRootFolder folder = new ContentRootFolder(ContentType.Movie); folder.Load(movieFolderNode); MovieFolders.Add(folder); } break; case XmlElements.TvFolders: TvFolders.Clear(); foreach (XmlNode tvFolderNode in propNode.ChildNodes) { ContentRootFolder folder = new ContentRootFolder(ContentType.TvShow); folder.Load(tvFolderNode); TvFolders.Add(folder); } break; } } } OnSettingsModified(true); }
/// <summary> /// Save settings to XML. /// </summary> public static void Save(bool triggerModifiedEvent = true) { string path = Path.Combine(Organization.GetBasePath(true), ROOT_XML + ".xml"); // Save data into temporary file, so that if application crashes in middle of saving XML is not corrupted! string tempPath = Path.Combine(Organization.GetBasePath(true), ROOT_XML + "_TEMP.xml"); using (XmlTextWriter xw = new XmlTextWriter(tempPath, Encoding.ASCII)) { xw.Formatting = Formatting.Indented; // Start season element xw.WriteStartElement(ROOT_XML); foreach (XmlElements element in Enum.GetValues(typeof(XmlElements))) { // Deprecated switch (element) { case XmlElements.MovieFolders: case XmlElements.TvFolders: continue; } xw.WriteStartElement(element.ToString()); switch (element) { case XmlElements.ScanDirectories: foreach (OrgFolder scanDir in ScanDirectories) { scanDir.Save(xw); } break; case XmlElements.TvFileFormat: TvFileFormat.Save(xw); break; case XmlElements.MovieFileFormat: MovieFileFormat.Save(xw); break; case XmlElements.MovieFolderColletion: MovieFolders.Save(xw); break; case XmlElements.TvFolderCollection: TvFolders.Save(xw); break; case XmlElements.VideoFileTypes: foreach (string fileType in VideoFileTypes) { xw.WriteElementString(FILE_TYPE_XML, fileType); } break; case XmlElements.DeleteFileTypes: foreach (string fileType in DeleteFileTypes) { xw.WriteElementString(FILE_TYPE_XML, fileType); } break; case XmlElements.IgnoreFileTypes: foreach (string fileType in IgnoreFileTypes) { xw.WriteElementString(FILE_TYPE_XML, fileType); } break; case XmlElements.AutoMoveSetups: foreach (AutoMoveFileSetup setup in AutoMoveSetups) { setup.Save(xw); } break; case XmlElements.Gui: GuiControl.Save(xw); break; case XmlElements.General: General.Save(xw); break; default: throw new Exception("Unkonw element!"); } xw.WriteEndElement(); } xw.WriteEndElement(); } // Delete previous save data if (File.Exists(path)) { File.Delete(path); } // Move tempoarary save file to default File.Move(tempPath, path); if (triggerModifiedEvent) { OnSettingsModified(false); } }