From 805f57def3babacc680ff74ed0945b2b77e7205d Mon Sep 17 00:00:00 2001 From: moerfi Date: Sun, 23 Jan 2022 19:22:27 +0100 Subject: [PATCH] Simplify recursive folder scan with --- .../joex/scanmailbox/ScanMailboxTask.scala | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/joex/src/main/scala/docspell/joex/scanmailbox/ScanMailboxTask.scala b/modules/joex/src/main/scala/docspell/joex/scanmailbox/ScanMailboxTask.scala index c5cd8ff5..fcd2e33f 100644 --- a/modules/joex/src/main/scala/docspell/joex/scanmailbox/ScanMailboxTask.scala +++ b/modules/joex/src/main/scala/docspell/joex/scanmailbox/ScanMailboxTask.scala @@ -24,6 +24,7 @@ import docspell.store.records._ import _root_.io.circe.syntax._ import emil.SearchQuery.{All, ReceivedDate} +import emil.SearchResult.searchResultMonoid import emil.javamail.syntax._ import emil.{MimeType => _, _} @@ -98,7 +99,12 @@ object ScanMailboxTask { if (acc.noneLeft(name)) acc.pure[F] else mailer - .run(impl.handleFolder(theEmil.access, upload)(name, ctx.args.scanRecursively.getOrElse(false))) + .run( + impl.handleFolder(theEmil.access, upload)( + name, + ctx.args.scanRecursively.getOrElse(false) + ) + ) .map(_ ++ acc) Stream @@ -183,13 +189,9 @@ object ScanMailboxTask { )(folder: MailFolder): MailOp[F, C, SearchResult[MailHeader]] = for { subFolders <- a.listFoldersRecursive(Some(folder)) - search <- subFolders.foldLeft(searchMails(a)(folder)) { (result, folder) => - for { - res <- result - search <- searchMails(a)(folder) - } yield SearchResult(res.mails ++ search.mails, res.count + search.count) - } - } yield search + foldersToSearch = Vector(folder) ++ subFolders + search <- foldersToSearch.traverse(searchMails(a)) + } yield searchResultMonoid.combineAll(search) def searchMails[C]( a: Access[F, C]