/* ** Copyright (C) 2020 Dirk-Jan C. Binnema ** ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the ** Free Software Foundation; either version 3, or (at your option) any ** later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software Foundation, ** Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ** */ #ifndef MU_SCANNER_HH__ #define MU_SCANNER_HH__ #include #include #include #include #include #include namespace Mu { /// @brief Maildir scanner /// /// Scans maildir (trees) recursively, and calls the Handler callback for /// directories & files. /// /// It filters out (i.e., does call the handler for): /// - files starting with '.' /// - files that do not live in a cur / new leaf maildir /// - directories '.' and '..' /// class Scanner { public: enum struct HandleType { File, EnterDir, LeaveDir }; /// Prototype for a handler function using Handler = std::function; /** * Construct a scanner object for scanning a directory, recursively. * * If handler is a directroy * * * @param root_dir root dir to start scanning * @param handler handler function for some direntry */ Scanner (const std::string& root_dir, Handler handler); /** * DTOR */ ~Scanner(); /** * Start the scan; this is a blocking call than run until * finished or (from another thread) stop() is called. * * @return true if starting worked; false otherwise */ bool start(); /** * Stop the scan * * @return true if stopping worked; false otherwi%sse */ bool stop(); /** * Is a scan currently running? * * @return true or false */ bool is_running() const; private: struct Private; std::unique_ptr priv_; }; } // namepace Mu #endif /* MU_SCANNER_HH__ */