Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }