示例#1
0
        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;
        }
示例#2
0
        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);
        }
示例#3
0
        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;
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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;            
        }