public PathMapping(PathMapping parentMapping, ITaskItem model) { if (parentMapping != null) { if (parentMapping.DocumentType != Document.DocumentType.Folder) { throw new ArgumentException("Path should have 'Folder' Document Type", "folderPath"); } ParentMapping = parentMapping; } ResourceType = GetResourceType(model.RequireResourceId()); Title = model.RequireTitle(); switch (ResourceType) { case ResourceType.file: MappedFilename = SanitizeTitle(Path.GetFileNameWithoutExtension(Title)); MappedExtension = String.Concat(".", ResourceType.ToString(), "_", SanitizeTitle(Path.GetExtension(Title).TrimStart('.'))); break; case ResourceType.folder: MappedFilename = SanitizeTitle(Title); MappedExtension = null; break; default: MappedFilename = SanitizeTitle(Title); MappedExtension = string.Concat(".", ResourceType.ToString()); break; } }
private TaskItem BuildFolder(Document model, PathMapping mappedPath) { string targetFile = Path.ChangeExtension(Path.Combine(TargetDirectory, mappedPath.MappedPath), mappedPath.ResourceType.ToString()); TaskItem folder = new TaskItem(targetFile); if (File.Exists(targetFile)) { DateTime updated = File.GetLastWriteTime(targetFile); Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile); if (updated != model.Updated) { Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, model.Updated); } else { Log.LogMessage(MessageImportance.Low, "Updated - {0}", model.Updated); } } else { Log.LogMessage("Found new folder"); } folder.FillMetadata(model); folder.FillMetadata(mappedPath); folder.Save(Log, model.Updated); return(folder); }
public PathMapping(PathMapping parentMapping, ITaskItem model) { if (parentMapping != null) { if (parentMapping.DocumentType != Document.DocumentType.Folder) { throw new ArgumentException("Path should have 'Folder' Document Type", "folderPath"); } ParentMapping = parentMapping; } ResourceType = GetResourceType(model.RequireResourceId()); Title = model.RequireTitle(); switch (ResourceType) { case ResourceType.file: MappedFilename = SanitizeTitle(Path.GetFileNameWithoutExtension(Title)); MappedExtension = String.Concat(".", ResourceType.ToString(), "_", SanitizeTitle(Path.GetExtension(Title).TrimStart('.'))); break; case ResourceType.folder: MappedFilename = SanitizeTitle(Title); MappedExtension = null; break; default: MappedFilename = SanitizeTitle(Title); MappedExtension = string.Concat(".",ResourceType.ToString()); break; } }
public static ITaskItem FillMetadata(this ITaskItem item, PathMapping mapping) { item.SetMetadata("MappedExtension", mapping.MappedExtension ?? ""); item.SetMetadata("MappedFilename", mapping.MappedFilename ?? ""); item.SetMetadata("MappedPath", mapping.MappedPath); item.SetMetadata("ResourceType", mapping.ResourceType.ToString()); item.SetMetadata("Title", mapping.Title ?? ""); item.SetMetadata("TitlePath", mapping.TitlePath ?? ""); return item; }
public static ITaskItem FillMetadata(this ITaskItem item, PathMapping mapping) { item.SetMetadata("MappedExtension", mapping.MappedExtension ?? ""); item.SetMetadata("MappedFilename", mapping.MappedFilename ?? ""); item.SetMetadata("MappedPath", mapping.MappedPath); item.SetMetadata("ResourceType", mapping.ResourceType.ToString()); item.SetMetadata("Title", mapping.Title ?? ""); item.SetMetadata("TitlePath", mapping.TitlePath ?? ""); return(item); }
private TaskItem BuildContent(ITaskItem folder, Document document, PathMapping folderMapping) { PathMapping documentPath = new PathMapping(folderMapping, new TaskItem().FillMetadata(document)); string targetFile = documentPath.MappedPath; TaskItem content = new TaskItem(targetFile); folder.CopyMetadataTo(content, FolderMetadataPrefix ?? "Folder"); content.FillMetadata(documentPath); content.FillMetadata(document); content.RequireParentDirectory(Log); if (content.Exists()) { DateTime updated = File.GetLastWriteTime(targetFile); Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile); if (updated != document.Updated) { Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, document.Updated); } else { Log.LogMessage(MessageImportance.Low, "Updated - {0}", document.Updated); } } else { Log.LogMessage(MessageImportance.Normal, "Detected new document"); } if (document.DocumentEntry != null && document.DocumentEntry.Content != null && document.DocumentEntry.Content.Src != null) { content.SetMetadata("ExportUri", document.DocumentEntry.Content.Src.ToString()); } content.Save(Log, document.Updated); return(content); }
public override bool Execute() { GDataCredentials credentials = GetDataCredentials(); RequestSettings settings = new RequestSettings("code.google.com/p/exult/", credentials); settings.AutoPaging = true; settings.PageSize = 100; List <ITaskItem> folderContent = new List <ITaskItem>(); WarnIfUneven(Tuple.Create("Folders", Folders), Tuple.Create("FolderListings", FolderListings)); foreach (var tuple in Zip(Folders, FolderListings)) { if (_Cancelled) { return(false); } ITaskItem folder = tuple.Item1; ITaskItem folderListing = tuple.Item2; folder.LoadCustomMetadata(); folder.RequireDocumentType(Document.DocumentType.Folder); //yada/hrm.folder -> yada/hrm/ string folderPath = Path.Combine(Path.GetDirectoryName(folder.ItemSpec), Path.GetFileNameWithoutExtension(folder.ItemSpec)); RequireDirectory(folderPath); PathMapping folderMapping = new PathMapping(folderPath); Request request = new Request(settings); string resourceId = folder.RequireResourceId(); Log.LogMessage(MessageImportance.High, "Getting Folder Content \"{0}\"", folder.RequireTitlePath()); Feed <Document> feed = request.GetFolderContent(resourceId); // this takes care of paging the results in List <Document> documents = feed.Entries.Where(item => item.Type != Document.DocumentType.Folder).ToList(); Log.LogMessage(MessageImportance.Normal, "Found {0} Item(s)", documents.Count); DateTime folderTimestamp = folder.GetTimestamp(); DateTime latestTimestamp = folderTimestamp; foreach (Document document in documents) { if (_Cancelled) { return(false); } if (document.Updated > latestTimestamp) { latestTimestamp = document.Updated; } if (Pattern == null || PatternExpression.IsMatch(document.Title)) { Log.LogMessage(MessageImportance.Normal, "Matched \"{0}\"", document.Title); folderContent.Add(BuildContent(folder, document, folderMapping)); } else { Log.LogMessage(MessageImportance.Low, "Skipped \"{0}\"", document.Title); } } folder.CopyMetadataTo(folderListing); folderListing.Save(Log, latestTimestamp); } FolderContent = folderContent.ToArray(); return(true); }
public override bool Execute() { GDataCredentials credentials = GetDataCredentials(); RequestSettings settings = new RequestSettings("code.google.com/p/exult/", credentials); settings.AutoPaging = true; settings.PageSize = 100; List<ITaskItem> folderContent = new List<ITaskItem>(); WarnIfUneven(Tuple.Create("Folders", Folders), Tuple.Create("FolderListings", FolderListings)); foreach (var tuple in Zip(Folders, FolderListings)) { if (_Cancelled) { return false; } ITaskItem folder = tuple.Item1; ITaskItem folderListing = tuple.Item2; folder.LoadCustomMetadata(); folder.RequireDocumentType(Document.DocumentType.Folder); //yada/hrm.folder -> yada/hrm/ string folderPath = Path.Combine(Path.GetDirectoryName(folder.ItemSpec), Path.GetFileNameWithoutExtension(folder.ItemSpec)); RequireDirectory(folderPath); PathMapping folderMapping = new PathMapping(folderPath); Request request = new Request(settings); string resourceId = folder.RequireResourceId(); Log.LogMessage(MessageImportance.High, "Getting Folder Content \"{0}\"", folder.RequireTitlePath()); Feed<Document> feed = request.GetFolderContent(resourceId); // this takes care of paging the results in List<Document> documents = feed.Entries.Where(item => item.Type != Document.DocumentType.Folder).ToList(); Log.LogMessage(MessageImportance.Normal, "Found {0} Item(s)", documents.Count); DateTime folderTimestamp = folder.GetTimestamp(); DateTime latestTimestamp = folderTimestamp; foreach (Document document in documents) { if (_Cancelled) { return false; } if (document.Updated > latestTimestamp) { latestTimestamp = document.Updated; } if (Pattern == null || PatternExpression.IsMatch(document.Title)) { Log.LogMessage(MessageImportance.Normal, "Matched \"{0}\"", document.Title); folderContent.Add(BuildContent(folder, document, folderMapping)); } else { Log.LogMessage(MessageImportance.Low, "Skipped \"{0}\"", document.Title); } } folder.CopyMetadataTo(folderListing); folderListing.Save(Log, latestTimestamp); } FolderContent = folderContent.ToArray(); return true; }
private TaskItem BuildContent(ITaskItem folder, Document document, PathMapping folderMapping) { PathMapping documentPath = new PathMapping(folderMapping, new TaskItem().FillMetadata(document)); string targetFile = documentPath.MappedPath; TaskItem content = new TaskItem(targetFile); folder.CopyMetadataTo(content, FolderMetadataPrefix ?? "Folder"); content.FillMetadata(documentPath); content.FillMetadata(document); content.RequireParentDirectory(Log); if (content.Exists()) { DateTime updated = File.GetLastWriteTime(targetFile); Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile); if (updated != document.Updated) { Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, document.Updated); } else { Log.LogMessage(MessageImportance.Low, "Updated - {0}", document.Updated); } } else { Log.LogMessage(MessageImportance.Normal, "Detected new document"); } if (document.DocumentEntry != null && document.DocumentEntry.Content != null && document.DocumentEntry.Content.Src != null) { content.SetMetadata("ExportUri", document.DocumentEntry.Content.Src.ToString()); } content.Save(Log, document.Updated); return content; }
private TaskItem BuildFolder(Document model, PathMapping mappedPath) { string targetFile = Path.ChangeExtension(Path.Combine(TargetDirectory, mappedPath.MappedPath), mappedPath.ResourceType.ToString()); TaskItem folder = new TaskItem(targetFile); if (File.Exists(targetFile)) { DateTime updated = File.GetLastWriteTime(targetFile); Log.LogMessage(MessageImportance.Normal, "Exists at \"{0}\"", targetFile); if (updated != model.Updated) { Log.LogMessage(MessageImportance.Low, "Updated - Local: {0} Remote: {1}", updated, model.Updated); } else { Log.LogMessage(MessageImportance.Low, "Updated - {0}", model.Updated); } } else { Log.LogMessage("Found new folder"); } folder.FillMetadata(model); folder.FillMetadata(mappedPath); folder.Save(Log, model.Updated); return folder; }