mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Simplify recursive folder scan with
This commit is contained in:
@ -24,6 +24,7 @@ import docspell.store.records._
|
|||||||
|
|
||||||
import _root_.io.circe.syntax._
|
import _root_.io.circe.syntax._
|
||||||
import emil.SearchQuery.{All, ReceivedDate}
|
import emil.SearchQuery.{All, ReceivedDate}
|
||||||
|
import emil.SearchResult.searchResultMonoid
|
||||||
import emil.javamail.syntax._
|
import emil.javamail.syntax._
|
||||||
import emil.{MimeType => _, _}
|
import emil.{MimeType => _, _}
|
||||||
|
|
||||||
@ -98,7 +99,12 @@ object ScanMailboxTask {
|
|||||||
if (acc.noneLeft(name)) acc.pure[F]
|
if (acc.noneLeft(name)) acc.pure[F]
|
||||||
else
|
else
|
||||||
mailer
|
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)
|
.map(_ ++ acc)
|
||||||
|
|
||||||
Stream
|
Stream
|
||||||
@ -183,13 +189,9 @@ object ScanMailboxTask {
|
|||||||
)(folder: MailFolder): MailOp[F, C, SearchResult[MailHeader]] =
|
)(folder: MailFolder): MailOp[F, C, SearchResult[MailHeader]] =
|
||||||
for {
|
for {
|
||||||
subFolders <- a.listFoldersRecursive(Some(folder))
|
subFolders <- a.listFoldersRecursive(Some(folder))
|
||||||
search <- subFolders.foldLeft(searchMails(a)(folder)) { (result, folder) =>
|
foldersToSearch = Vector(folder) ++ subFolders
|
||||||
for {
|
search <- foldersToSearch.traverse(searchMails(a))
|
||||||
res <- result
|
} yield searchResultMonoid.combineAll(search)
|
||||||
search <- searchMails(a)(folder)
|
|
||||||
} yield SearchResult(res.mails ++ search.mails, res.count + search.count)
|
|
||||||
}
|
|
||||||
} yield search
|
|
||||||
|
|
||||||
def searchMails[C](
|
def searchMails[C](
|
||||||
a: Access[F, C]
|
a: Access[F, C]
|
||||||
|
Reference in New Issue
Block a user