internal static List <Model.File> GetDirectoryFiles(this Model.Directory directory, Dictionary <String, Dictionary <String, String> > metadataProperties = null) { var result = new List <Model.File>(); // If the connector has a container specified we need to take that in account to find the files we need string folderToGrabFilesFrom = directory.Src; if (!String.IsNullOrEmpty(directory.ParentTemplate.Connector.GetContainer())) { folderToGrabFilesFrom = directory.ParentTemplate.Connector.GetContainer() + @"\" + directory.Src; } var files = directory.ParentTemplate.Connector.GetFiles(folderToGrabFilesFrom); if (!String.IsNullOrEmpty(directory.IncludedExtensions) && directory.IncludedExtensions != "*.*") { var includedExtensions = directory.IncludedExtensions.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); files = files.Where(f => includedExtensions.Contains($"*{Path.GetExtension(f).ToLower()}")).ToList(); } if (!String.IsNullOrEmpty(directory.ExcludedExtensions)) { var excludedExtensions = directory.ExcludedExtensions.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); files = files.Where(f => !excludedExtensions.Contains($"*{Path.GetExtension(f).ToLower()}")).ToList(); } result.AddRange(from file in files select new Model.File( directory.Src + @"\" + file, directory.Folder, directory.Overwrite, null, // No WebPartPages are supported with this technique metadataProperties != null && metadataProperties.ContainsKey(directory.Src + @"\" + file) ? metadataProperties[directory.Src + @"\" + file] : null, directory.Security, directory.Level )); if (directory.Recursive) { var subFolders = directory.ParentTemplate.Connector.GetFolders(folderToGrabFilesFrom); var parentFolder = directory; foreach (var folder in subFolders) { directory.Src = parentFolder.Src + @"\" + folder; directory.Folder = parentFolder.Folder + @"\" + folder; result.AddRange(directory.GetDirectoryFiles(metadataProperties)); //Remove the subfolder path(added above) as the second subfolder should come under its parent folder and not under its sibling parentFolder.Src = parentFolder.Src.Substring(0, parentFolder.Src.LastIndexOf(@"\")); parentFolder.Folder = parentFolder.Folder.Substring(0, parentFolder.Folder.LastIndexOf(@"\")); } } return(result); }
internal static List <Model.File> GetDirectoryFiles(this Model.Directory directory, Dictionary <String, Dictionary <String, String> > metadataProperties = null) { Log.Debug(Constants.LOGGING_SOURCE, "Processing Directory {0}", directory.Src); var result = new List <Model.File>(); var files = directory.ParentTemplate.Connector.GetFiles(directory.Src); if (!String.IsNullOrEmpty(directory.IncludedExtensions)) { var includedExtensions = directory.IncludedExtensions.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); files = files.Where(f => includedExtensions.Contains($"*{Path.GetExtension(f).ToLower()}")).ToList(); } if (!String.IsNullOrEmpty(directory.ExcludedExtensions)) { var excludedExtensions = directory.ExcludedExtensions.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); files = files.Where(f => !excludedExtensions.Contains($"*{Path.GetExtension(f).ToLower()}")).ToList(); } result.AddRange(from file in files select new Model.File( directory.Src + @"\" + file, directory.Folder, directory.Overwrite, null, // No WebPartPages are supported with this technique metadataProperties != null ? metadataProperties[directory.Src + @"\" + file] : null, directory.Security, directory.Level )); if (directory.Recursive) { var subFolders = directory.ParentTemplate.Connector.GetFolders(directory.Src); string _src = directory.Src; string _folder = directory.Folder; foreach (var folder in subFolders) { directory.Src = _src + @"\" + folder; directory.Folder = _folder + @"\" + folder; result.AddRange(directory.GetDirectoryFiles(metadataProperties)); } } return(result); }