diff --git a/modules/joex/src/main/scala/docspell/joex/process/ReProcessItem.scala b/modules/joex/src/main/scala/docspell/joex/process/ReProcessItem.scala index c2e363c3..813abf88 100644 --- a/modules/joex/src/main/scala/docspell/joex/process/ReProcessItem.scala +++ b/modules/joex/src/main/scala/docspell/joex/process/ReProcessItem.scala @@ -22,6 +22,7 @@ import docspell.store.records.RAttachment import docspell.store.records.RAttachmentSource import docspell.store.records.RCollective import docspell.store.records.RItem +import docspell.store.queries.QItem object ReProcessItem { type Args = ReProcessItemArgs @@ -131,10 +132,13 @@ object ReProcessItem { def getLanguage[F[_]: Sync]: Task[F, Args, Language] = Task { ctx => - (for { - coll <- OptionT(ctx.store.transact(RCollective.findByItem(ctx.args.itemId))) - lang = coll.language - } yield lang).getOrElse(Language.German) + val lang1 = OptionT( + ctx.store.transact(QItem.getItemLanguage(ctx.args.itemId)).map(_.headOption) + ) + val lang2 = OptionT(ctx.store.transact(RCollective.findByItem(ctx.args.itemId))) + .map(_.language) + + lang1.orElse(lang2).getOrElse(Language.German) } def isLastRetry[F[_]: Sync]: Task[F, Args, Boolean] = diff --git a/modules/store/src/main/scala/docspell/store/queries/QItem.scala b/modules/store/src/main/scala/docspell/store/queries/QItem.scala index 623b68e0..22e64a0d 100644 --- a/modules/store/src/main/scala/docspell/store/queries/QItem.scala +++ b/modules/store/src/main/scala/docspell/store/queries/QItem.scala @@ -714,4 +714,13 @@ object QItem { txt = texts.map(_._1).mkString(pageSep) } yield TextAndTag(itemId, txt, tag) + /** Gets the language of the first attachment of the given item. */ + def getItemLanguage(itemId: Ident): ConnectionIO[List[Language]] = + Select( + select(m.language), + from(m) + .innerJoin(a, a.id === m.id) + .innerJoin(i, i.id === a.itemId), + i.id === itemId + ).orderBy(a.position.asc).build.query[Language].to[List] }