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 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"); }
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); }
/// <param name="rootFolderHandlerBase"> </param> /// <exception cref="Exception"><c>Exception</c>.</exception> internal static void Execute(RootFolderHandlerBase rootFolderHandlerBase) { try { //// EnhancedFileInfo PreviousFile = null; for (rootFolderHandlerBase.FilePos = rootFolderHandlerBase.Files.Count - 1; rootFolderHandlerBase.FilePos > -1; rootFolderHandlerBase.FilePos--) { if (rootFolderHandlerBase.FilePos == -1) { throw new Exception ("CancelUpdateThreadError"); } rootFolderHandlerBase.File = rootFolderHandlerBase .Files[rootFolderHandlerBase.FilePos]; rootFolderHandlerBase.LogMessages.Enqueue( new LogMessage ("Info", "Getting info for file: " + rootFolderHandlerBase.File .FileInformation .FullName)); if (rootFolderHandlerBase.Files.Count > 0) { int percentage = 100 - ((rootFolderHandlerBase.FilePos * 100) / rootFolderHandlerBase.Files.Count); string text = "Getting info for file: " + rootFolderHandlerBase.File.FileInformation.FullName; if (!rootFolderHandlerBase.Import.CheckProgress(percentage, text)) { rootFolderHandlerBase.Import.CancelUpdate = true; return; } } rootFolderHandlerBase.File.Item = rootFolderHandlerBase .FindItemByLocationContaining (rootFolderHandlerBase.File .FileInformation.FullName) ?? new MLItem(null); rootFolderHandlerBase.IsNewItem = rootFolderHandlerBase.File.Item.ID == 0; rootFolderHandlerBase.Update = (!rootFolderHandlerBase.IsNewItem) && (rootFolderHandlerBase.Importer.AlwaysUpdate || (rootFolderHandlerBase.File.Item.DateChanged < rootFolderHandlerBase.File.FileInformation.LastWriteTime)); if (rootFolderHandlerBase.IsNewItem) { rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", " Created new item")); } else { rootFolderHandlerBase.LogMessages.Enqueue(rootFolderHandlerBase.Update ? new LogMessage("Info", " Updating already existing item") : new LogMessage("Info", " Skiping already existing item")); } if (rootFolderHandlerBase.Update || rootFolderHandlerBase.Import.Importer.AlwaysUpdateImages || rootFolderHandlerBase.IsNewItem) { rootFolderHandlerBase.DoSpecificHandling(); if (rootFolderHandlerBase.Importer.ExportToAlternateDataStream) { var adsWriter = new AlternateDataStreamWriter(rootFolderHandlerBase.File); adsWriter.WriteItem(); } if (rootFolderHandlerBase.Importer.ExcludeUnmatchedFiles) { //// if ((this.Importer.TagMasks.Count > 0) && (this.File.Item.Location.Length > 0) && //// (this.File.Item.Tags.Count == 0)) if (!rootFolderHandlerBase.File.SuccessfulTagMaskMatch) { rootFolderHandlerBase.Import.UnmatchedFiles.Add(rootFolderHandlerBase.File); rootFolderHandlerBase.Files.Remove(rootFolderHandlerBase.File); } } /* if (Importer.ChainingOption == ChainOption.ChainByTags) { if ((!IsNewItem) && (!Update)) { Files.Remove(File); } else { EnhancedFileInfo TempFile = new EnhancedFileInfo(File.FI); HandleUnchainedOrFirstFile(TempFile); IMLItem CachedItem = Import.itemsChainedByTagCache.Query(TempFile.Item); if (CachedItem != TempFile.Item) { File = Import.Item2File.Query(CachedItem); HandleChainedByTagFile(File, TempFile); if (Import.Item2File.RetrivedItemWasCached) { Files.RemoveAt(FilePos); } else { Files[FilePos] = File; } } else { Files[FilePos] = TempFile; Import.Item2File.Add(TempFile); } } } else { if ((!Importer.ChainFiles) || (PreviousFile == null) || (File.FI.DirectoryName != PreviousFile.FI.DirectoryName)) { HandleUnchainedOrFirstFile(File); PreviousFile = File; } else { HandleChainedFile(File, PreviousFile); Files.Remove(File); } } */ } else { rootFolderHandlerBase.Files.Remove(rootFolderHandlerBase.File); } rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", "...Done")); rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Info", Environment.NewLine)); } } catch (Exception ex) { rootFolderHandlerBase.LogMessages.Enqueue(new LogMessage("Error", ex.ToString())); throw; } }