/// <summary> /// Returns all directories. /// </summary> /// <param name="path">Path of directory.</param> public MochaCollectionResult <MochaDirectory> GetDirectories(MochaPath path) { var directories = new List <MochaDirectory>(); if (!ExistsDisk(path.Path) && !ExistsDirectory(path)) { return(new MochaCollectionResult <MochaDirectory>(directories)); } var directoryRange = Database.GetXElement( $"FileSystem/{path.Path}").Elements().Where( x => x.Attribute("Type").Value == "Directory"); for (int index = 0; index < directoryRange.Count(); index++) { MochaDirectory directory = GetDirectory($"{path.Path}/{directoryRange.ElementAt(index).Name.LocalName}"); if (directory == null) { continue; } directories.Add(directory); } return(new MochaCollectionResult <MochaDirectory>(directories)); }
/// <summary> /// Add directory. /// </summary> /// <param name="directory">Directory to add.</param> /// <param name="path">Path to add.</param> public void AddDirectory(MochaDirectory directory, MochaPath path) { var parts = path.Path.Split('/'); if (!ExistsDisk(parts[0])) { throw new MochaException("Disk not found!"); } if (parts.Length != 1 && !ExistsDirectory(path.Path)) { throw new MochaException("Directory not found!"); } if (ExistsDirectory($"{path.Path}/{directory.Name}")) { throw new MochaException("This directory already exists!"); } Database.OnChanging(this, new EventArgs()); var originalname = path.Name(); path = path.ParentPath(); var element = Database.GetXElement(parts.Length == 1 ? "FileSystem" : $"FileSystem/{path.Path}").Elements().Where(x => (x.Attribute("Type").Value == "Disk" || x.Attribute("Type").Value == "Directory") && x.Name.LocalName == originalname).First(); if (element == null) { return; } var xDirectory = new XElement(directory.Name); xDirectory.Add(new XAttribute("Type", "Directory")); xDirectory.Add(new XAttribute("Description", directory.Description)); element.Add(xDirectory); for (int index = 0; index < directory.Files.Count; index++) { AddFile(directory.Files[index], path); } for (int index = 0; index < directory.Directories.Count; index++) { AddDirectory(directory.Directories[index], path); } if (directory.Files.Count == 0 || directory.Directories.Count == 0) { Database.Save(); } }
/// <summary> /// Returns directory by path. /// </summary> /// <param name="path">Path of directory.</param> public MochaDirectory GetDirectory(MochaPath path) { if (!ExistsDirectory(path)) { return(null); } var originalpath = path.Path; var directoryElement = GetDirectoryElement(path); var directory = new MochaDirectory(directoryElement.Name.LocalName); directory.Description = directoryElement.Attribute("Description").Value; directory.Files.AddRange(GetFiles(originalpath)); directory.Directories.AddRange(GetDirectories(originalpath)); return(directory); }