From e52030c0499e20c9f458a0af2098ebfa160ba71c Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Sun, 13 Aug 2023 09:44:20 +0300 Subject: [PATCH] store: expose maildirs() method This gets the current list of maildirs by asking the scanner to do a file-system search. --- lib/mu-store.cc | 19 +++++++++++++++++++ lib/mu-store.hh | 11 +++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/mu-store.cc b/lib/mu-store.cc index c0236c2d..fe52114b 100644 --- a/lib/mu-store.cc +++ b/lib/mu-store.cc @@ -39,6 +39,7 @@ #include "mu-store.hh" #include "mu-query.hh" #include "mu-xapian-db.hh" +#include "index/mu-scanner.hh" #include "utils/mu-error.hh" @@ -630,3 +631,21 @@ Store::parse_query(const std::string& expr, bool xapian) const return q.parse(expr, xapian); }, std::string{}); } + + +std::vector +Store::maildirs() const +{ + std::vector mdirs; + const auto prefix_size = root_maildir().size(); + Scanner::Handler handler = [&](const std::string& path, auto&& _1, auto&& _2) { + mdirs.emplace_back(path.substr(prefix_size)); + return true; + }; + + Scanner scanner{root_maildir(), handler, Scanner::Mode::MaildirsOnly}; + scanner.start(); + std::sort(mdirs.begin(), mdirs.end()); + + return mdirs; +} diff --git a/lib/mu-store.hh b/lib/mu-store.hh index c040aa71..b36848ee 100644 --- a/lib/mu-store.hh +++ b/lib/mu-store.hh @@ -426,6 +426,17 @@ public: */ bool empty() const { return xapian_db().empty(); } + + /** + * Get the list of maildirs, that is, the list of maildirs + * under root_maildir, without file-system prefix. + * + * This does a file-system scan. + * + * @return list of maildirs + */ + std::vector maildirs() const; + /* * _almost_ private */