public bool HasNextIndexable() { do { while (file_enumerator == null || !file_enumerator.MoveNext()) { if (!dir_enumerator.MoveNext()) { dir_enumerator = null; indexer.Queryable.Indexing = false; return(false); } if (Shutdown.ShutdownRequested) { return(false); } current_dir = (DirectoryInfo)dir_enumerator.Current; num_dir_crawled++; num_file_in_dir = DirectoryWalker.GetNumItems(current_dir.FullName); num_file_in_dir_crawled = 0; indexer.Progress = (double)num_dir_crawled / num_dirs; Log.Info("Scanning {0} maildir mails in {1}", num_file_in_dir, current_dir.FullName); files_to_parse = DirectoryWalker.GetFileInfos(current_dir); file_enumerator = files_to_parse.GetEnumerator(); } num_file_in_dir_crawled++; CrawlFile = (FileInfo)file_enumerator.Current; } while (IsUpToDate(CrawlFile.FullName)); return(true); }