public TBook(TBook book) : this() { RelativePath = book.RelativePath; Name = book.Name; Number = book.Number; foreach (KeyValuePair <int, string> CollectionNameComponentItem in book.CollectionNameComponents) { CollectionNameComponents.Add(CollectionNameComponentItem.Key, CollectionNameComponentItem.Value); } BookType = book.BookType; Pages.Clear(); foreach (TPage PageItem in book.Pages) { Pages.Add(PageItem); } }
private void _ImportFolder(string folder, TParsingParameters parsingParameters) { #region Validate parameters if (string.IsNullOrWhiteSpace(folder)) { Trace.WriteLine("Unable to import empty folder"); return; } string FolderFullPath = Path.GetFullPath(folder); if (!Directory.Exists(FolderFullPath)) { Trace.WriteLine($"Unable to access directory \"{folder}\" : directory is missing or access is denied."); return; } #endregion Validate parameters TParsingParameters LocalParsingParameters = new TParsingParameters(parsingParameters); string BdIndexParameterFilename = Path.Combine(folder, "bdindex.json"); if (File.Exists(BdIndexParameterFilename)) { LocalParsingParameters.Load(BdIndexParameterFilename); } DirectoryInfo FolderInfo = new DirectoryInfo(FolderFullPath); IEnumerable <DirectoryInfo> InnerDirectories = FolderInfo.EnumerateDirectories(); IEnumerable <FileInfo> InnerFiles = FolderInfo.EnumerateFiles() .Where(f => TBook.Extensions.Contains(f.Extension.ToLower())); #region Folder as book or folder as group foreach (DirectoryInfo DirectoryItem in InnerDirectories) { IEnumerable <FileInfo> PageFiles = DirectoryItem.EnumerateFiles() .Where(f => TPage.Extensions.Contains(f.Extension.ToLower())); if (PageFiles.Any()) { #region Found a book as a folder TBook NewBook = new TBook(DirectoryItem.Name, LocalParsingParameters, EBookType.folder, DirectoryItem.FullName.After(RootPath)); //Trace.WriteLine(NewBook.ToString()); Books.Add(NewBook); #endregion Found a book as a folder } else { #region Dig deeper into directories _ImportFolder(DirectoryItem.FullName, LocalParsingParameters); #endregion Dig deeper into directories } } #endregion Folder as book or folder as group #region Archived files as books if (InnerFiles.Any()) { foreach (FileInfo FileItem in InnerFiles) { TBook NewBook = new TBook(FileItem.Name, LocalParsingParameters, EBookType.unknown, FileItem.FullName.After(RootPath).BeforeLast(@"\")); Books.Add(NewBook); } } #endregion Archived files as books }