protected internal static int HandleChainedByTagFile(EnhancedFileInfo chain, EnhancedFileInfo newElement) { MLTag location = new MLTag("Location", chain.Item.Location); int fileIndex = location.Values.Select(value => value.ToLowerInvariant()).ToList().IndexOf( newElement.FileInformation.FullName.ToLowerInvariant()); MLTag externalID = new MLTag("ExternalID", chain.Item.ExternalID); if (fileIndex >= 0) { location.Values[fileIndex] = newElement.Item.Location; chain.Item.Location = location.Value; externalID.Values[fileIndex] = newElement.Item.ExternalID; chain.Item.ExternalID = externalID.Value; } else { location.Values.Add(newElement.Item.Location); location.Values.Sort(); chain.Item.Location = location.Value; externalID.Values.Add(newElement.Item.ExternalID); externalID.Values.Sort(); chain.Item.ExternalID = externalID.Value; } return fileIndex; }
internal static void HandleUnchainedOrFirstFile(RootFolderHandlerBase rootFolderHandlerBase, EnhancedFileInfo theFile) { theFile.Item.Location = theFile.FileInformation.FullName; theFile.Item.ExternalID = theFile.Item.Location.ToLower(); if (rootFolderHandlerBase.Importer.TagMasks != null) { FileTagsRetriever.GetTagsOfFile (rootFolderHandlerBase, theFile); } theFile.Item.Name = theFile.Item.Tags.Get("name", String.Empty) as string; rootFolderHandlerBase.Importer.ImageLinker.LinkAllImages(theFile); if (!rootFolderHandlerBase.IsNewItem && !rootFolderHandlerBase.Update) return; rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", " Getting filesystem information")); if (rootFolderHandlerBase.Importer.FileSize) { theFile.Item.Tags[rootFolderHandlerBase.Importer.FileSizeTagName] = theFile.FileInformation.Length; } if (rootFolderHandlerBase.Importer.CreationDate) { theFile.Item.Tags[rootFolderHandlerBase.Importer.CreationDateTagName] = theFile.FileInformation.CreationTime.ToString("yyyy-MM-dd hh:mm:ss"); } if (rootFolderHandlerBase.Importer.LastAccessDate) { theFile.Item.Tags[rootFolderHandlerBase.Importer.LastAccessDateTagName] = theFile.FileInformation.LastAccessTime.ToString("yyyy-MM-dd hh:mm:ss"); } if (rootFolderHandlerBase.Importer.LastModificationDate) { theFile.Item.Tags[rootFolderHandlerBase.Importer.LastModificationDateTagName] = theFile.FileInformation.LastWriteTime.ToString("yyyy-MM-dd hh:mm:ss"); } if (rootFolderHandlerBase.Importer.SerialNumber) { theFile.Item.Tags[rootFolderHandlerBase.Importer.SerialNumberTagName] = rootFolderHandlerBase.InfoOfDrive.SerialNumber; } if (rootFolderHandlerBase.Importer.VolumeName) { theFile.Item.Tags[rootFolderHandlerBase.Importer.VolumeNameTagName] = rootFolderHandlerBase.InfoOfDrive.VolumeLabel; } }
internal override void DoSpecificHandling() { if ((this.previousFile == null) || (this.File.FileInformation.DirectoryName != this.previousFile.FileInformation.DirectoryName)) { UnchainedFileHandler.HandleUnchainedOrFirstFile(this, this.File); this.previousFile = this.File; } else { ChainedFileHandler.HandleChainedFile(this, this.File, this.previousFile); this.Files.Remove(this.File); } }
public EnhancedFileInfo Query(IMLItem item) { if (this.files.Keys.Contains(item)) { this.RetrivedItemWasCached = true; return this.files[item]; } else { MLTag location = new MLTag("Location", item.Location); EnhancedFileInfo file = new EnhancedFileInfo(new FileInfo(location.Values[0])) { Item = item }; this.Add(file); this.RetrivedItemWasCached = false; return file; } }
public void Add(EnhancedFileInfo file) { this.files.Add(file.Item, file); }
internal override void DoSpecificHandling() { if ((!IsNewItem) && (!this.Update)) { if (Import.Importer.AlwaysUpdateImages) { var tempFile = new EnhancedFileInfo (File.FileInformation); UnchainedFileHandler.HandleUnchainedOrFirstFile(this, tempFile); File = tempFile; Files[FilePos] = tempFile; item2File.Add(tempFile); } else { Files.Remove(File); } } else { var tempFile = new EnhancedFileInfo (File.FileInformation); UnchainedFileHandler.HandleUnchainedOrFirstFile(this, tempFile); IMLItem cachedItem = Import.ItemsChainedByTagCache.Query (tempFile.Item); if (cachedItem != tempFile.Item) { File = item2File.Query(cachedItem); File.SuccessfulTagMaskMatch = tempFile.SuccessfulTagMaskMatch; ChainedFileHandler .HandleChainedByTagFile (File, tempFile); if (item2File.RetrivedItemWasCached) { Files.RemoveAt(FilePos); } else { Files[FilePos] = File; } } else { Files[FilePos] = tempFile; item2File.Add(tempFile); } } }
protected internal static void GetTagsOfFile(RootFolderHandlerBase rootFolderHandlerBase, EnhancedFileInfo theFile) { bool tagMaskMatched = false; const string folderPattern = "(?:.*\\\\)*"; rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", " Retrieving tags")); MLItem.AddBaseTagsToTags(theFile.Item); if (rootFolderHandlerBase.Importer.ImportFromAlternateDataStream) { AlternateDataStreamReader adsReader = new AlternateDataStreamReader(rootFolderHandlerBase.File); adsReader.ReadItem(); } theFile.SuccessfulTagMaskMatch = rootFolderHandlerBase.Importer.TagMasks.Count == 0; foreach (TagMask tagMask in rootFolderHandlerBase.Importer.TagMasks) { if (tagMask.Mask.Length == 0) { tagMaskMatched = false; } else if (!tagMaskMatched) { if (!rootFolderHandlerBase.RootFolder.EndsWith("\\")) { rootFolderHandlerBase.RootFolder += "\\"; } string rootFolderPattern = RootFolderHandlerBase .PatternFixEscapeChars (rootFolderHandlerBase.RootFolder); string regExpPattern = rootFolderPattern + folderPattern + tagMask.RegExp; try { Regex tagValuesFinder = new Regex (regExpPattern, RegexOptions.IgnoreCase); MatchCollection matches = tagValuesFinder.Matches (theFile.Item.Location .Replace("._", ' ') .ReplaceLast(' ', '.')); if (matches.Count == 1) { tagMaskMatched = true; theFile.SuccessfulTagMaskMatch = true; Match match = matches[0]; rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", " Matched tagmask: " + tagMask.Mask)); int groupPos = 0; int tagPos = 0; foreach (Group group in match.Groups) { if (groupPos > 0) { while (tagMask.Tags[tagPos].Name.Length == 0) { tagPos++; } theFile.Item.Tags[tagMask.Tags[tagPos].Name] = @group.Value; tagPos++; } groupPos++; } } else { rootFolderHandlerBase.LogMessages.Enqueue( new LogMessage("Info", " No match for tagmask: " + tagMask.Mask)); } //// LogMessages.Enqueue(new LogMessage("Info", String.Empty)); } catch (ArgumentException ex) { string logMessage = "RegEx could not be generated from the tag mask \"" + tagMask.Mask + "\"" + " (Exception: " + ex.Message + ")"; rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Error", logMessage)); } } } rootFolderHandlerBase.Importer .TagValuesReplacementRules .ApplyRulesToItem(theFile.Item); }
public AlternateDataStreamReader(EnhancedFileInfo file) { _file = file; }
internal static void HandleChainedFile(RootFolderHandlerBase rootFolderHandlerBase, EnhancedFileInfo theFile, EnhancedFileInfo previousFile) { if ((!rootFolderHandlerBase.IsNewItem) && (!rootFolderHandlerBase.Update)) { return; } var location = new MLTag ("item_location", previousFile.Item.Location); location.Values.Add(theFile.FileInformation.FullName); location.Values.Sort(); previousFile.Item.Location = location.Value; previousFile.Item.ExternalID = previousFile.Item.Location.ToLower(); if (rootFolderHandlerBase.Importer.FileSize) { previousFile.Item.Tags[rootFolderHandlerBase.Importer.FileSizeTagName] = (long)previousFile.Item.Tags[rootFolderHandlerBase.Importer.FileSizeTagName] + theFile.FileInformation.Length; } if (rootFolderHandlerBase.Importer.CreationDate) { object creationDate = previousFile.Item.Tags[rootFolderHandlerBase.Importer.CreationDateTagName]; if (creationDate is string) { if (!String.IsNullOrEmpty((string)creationDate)) { if (String.CompareOrdinal(theFile.FileInformation.CreationTime.ToString("yyyy-MM-dd hh:mm:ss"), (string)creationDate) < 0) { previousFile.Item.Tags[rootFolderHandlerBase.Importer.CreationDateTagName] = theFile.FileInformation.CreationTime.ToString("yyyy-MM-dd hh:mm:ss"); } } } } if (rootFolderHandlerBase.Importer.LastAccessDate) { object lastAccessDate = previousFile.Item.Tags[rootFolderHandlerBase.Importer.LastAccessDateTagName]; if (lastAccessDate is string) { if (!String.IsNullOrEmpty((string)lastAccessDate)) { if (String.CompareOrdinal(theFile.FileInformation.LastAccessTime.ToString("yyyy-MM-dd hh:mm:ss"), (string)lastAccessDate) > 0) { previousFile.Item.Tags[rootFolderHandlerBase.Importer.LastAccessDateTagName] = theFile.FileInformation.LastAccessTime.ToString("yyyy-MM-dd hh:mm:ss"); } } } } if (!rootFolderHandlerBase .Importer.LastModificationDate) return; object lastModificationDate = previousFile.Item.Tags [rootFolderHandlerBase .Importer.LastModificationDateTagName]; var modificationDate = lastModificationDate as string; if (modificationDate == null) return; if (String.IsNullOrEmpty (modificationDate)) return; if (String.CompareOrdinal (theFile.FileInformation .LastWriteTime.ToString ("yyyy-MM-dd hh:mm:ss"), modificationDate) <= 0) return; previousFile.Item.Tags [rootFolderHandlerBase .Importer.LastModificationDateTagName] = theFile.FileInformation .LastWriteTime.ToString ("yyyy-MM-dd hh:mm:ss"); }