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);
        }