public IList<VisitorItem> CollectValidDirectories(VisitorItem currentItem) { IList<VisitorItem> validFolders = new List<VisitorItem>(); foreach (DirectoryInfo d in currentItem.CurrentDir.GetDirectories()) { if (ValidateFolderName(d.Name)) { //log VisitorItem newItem = new VisitorItem { CurrentDir = d, ActionVisitorLevel = currentItem.ActionVisitorLevel + 1, Info = new Dictionary<string, object>(currentItem.Info) }; newItem.Info.Add(VisitorKey, d.Name); validFolders.Add(newItem); } } return validFolders; }
public IList <VisitorItem> CollectValidDirectories(VisitorItem currentItem) { IList <VisitorItem> validFolders = new List <VisitorItem>(); foreach (DirectoryInfo d in currentItem.CurrentDir.GetDirectories()) { if (ValidateFolderName(d.Name)) { //log VisitorItem newItem = new VisitorItem { CurrentDir = d, ActionVisitorLevel = currentItem.ActionVisitorLevel + 1, Info = new Dictionary <string, object>(currentItem.Info) }; newItem.Info.Add(VisitorKey, d.Name); validFolders.Add(newItem); } } return(validFolders); }
private PhotoGroup CreatePhotoGroup(VisitorItem item) { DirectoryInfo dir = item.CurrentDir; if (!File.Exists(dir.FullName + "\\" + settings.FrontPictureName) || !File.Exists(dir.FullName + "\\" + settings.FrontPictureName)) { log.LogInfo(string.Format("Did not find {0} or {1} in folder {2}.", settings.FrontPictureName, settings.BackPictureName, dir.FullName)); return null; //log } PhotoGroup pg = new PhotoGroup { Date = DateTime.ParseExact((string)item.Info[visitorKey_ScanDate], "yyyyMMdd", null), CustomSeqNum = item.Info[visitorKey_CustomSeqNum] as string, ScanSeqNum = item.Info[visitorKey_ScanSeqNum] as string, Front = new Photo() { Name = settings.FrontPictureName, FullPath = item.CurrentDir.FullName + "\\" + settings.FrontPictureName }, Back = new Photo() { Name = settings.BackPictureName, FullPath = item.CurrentDir.FullName + "\\" + settings.BackPictureName } }; log.LogInfo(string.Format("Created photo group with {0} and {1} in folder {2}. Date={3}, CustomSeqNum={4}, ScanSeqNum={5}", settings.FrontPictureName, settings.BackPictureName, dir.FullName, pg.Date, pg.CustomSeqNum, pg.ScanSeqNum)); return pg; }
private void ChangeHandler(object sender, FileSystemEventArgs e) { string relativePath = e.Name; //RAW Scans\20150705\C0001\006\090.jpg string fileName = Path.GetFileName(relativePath); string directoryPath = Path.GetDirectoryName(e.FullPath); //D:\Programs\Github\PhotoOrganizer\TestFolder\RAW Scans\20150705\C0001\006 //check if both front and back picture exist if (!((fileName == settings.FrontPictureName && File.Exists(directoryPath + "\\" + settings.BackPictureName)) || (fileName == settings.BackPictureName && File.Exists(directoryPath + "\\" + settings.FrontPictureName)))) { return; } string msg = string.Format("Locate new picture {0} and {1} in {2}", settings.BackPictureName, settings.FrontPictureName, directoryPath); log.LogInfo(msg); msgDispatcher.PopulateMessage(msg); //if folder hierarchy level string[] folderNames = Path.GetDirectoryName(relativePath).Split(new char[] { '\\', '/' }); if (folderNames.Length != visitors.Count) { return; } //check folder name against rules VisitorItem item = new VisitorItem(); item.CurrentDir = new DirectoryInfo(directoryPath); for(int i = 0; i < visitors.Count; i++) { if (!visitors[i].ValidateFolderName(folderNames[i])) { log.LogInfo(string.Format("Picture path {0} did not match rules, skipped", directoryPath)); return; } item.Info.Add(visitors[i].VisitorKey, folderNames[i]); } PhotoGroup group = CreatePhotoGroup(item); if (NewPhotoGoupHandler != null) { NewPhotoGoupHandler.Invoke(group); } }
private IList<PhotoGroup> FindNewPhotoGroups() { IList<PhotoGroup> photoGroups = new List<PhotoGroup>(); if (visitors.Count < 1) { return photoGroups; } Queue<VisitorItem> children = new Queue<VisitorItem>(); VisitorItem start = new VisitorItem() { CurrentDir = new DirectoryInfo(settings.ScanBasePath), ActionVisitorLevel = 0 }; children.Enqueue(start); VisitorItem next; do { VisitorItem currentInfo = children.Dequeue(); IList<VisitorItem> dirs = visitors[currentInfo.ActionVisitorLevel].CollectValidDirectories(currentInfo); foreach (VisitorItem d in dirs) { children.Enqueue(d); } next = children.Peek(); } while (next != null && next.ActionVisitorLevel < visitors.Count && children.Count > 0); //todo move this code out of scanner foreach (VisitorItem picFolder in children) { PhotoGroup pg = CreatePhotoGroup(picFolder); if (pg != null) { photoGroups.Add(pg); } } return photoGroups; }