mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Add a task to re-process files of an item
This commit is contained in:
@ -8,6 +8,28 @@ import docspell.store.records.RJob
|
||||
|
||||
object JobFactory {
|
||||
|
||||
def reprocessItem[F[_]: Sync](
|
||||
args: ReProcessItemArgs,
|
||||
account: AccountId,
|
||||
prio: Priority,
|
||||
tracker: Option[Ident]
|
||||
): F[RJob] =
|
||||
for {
|
||||
id <- Ident.randomId[F]
|
||||
now <- Timestamp.current[F]
|
||||
job = RJob.newJob(
|
||||
id,
|
||||
ReProcessItemArgs.taskName,
|
||||
account.collective,
|
||||
args,
|
||||
s"Re-process files of item ${args.itemId.id}",
|
||||
now,
|
||||
account.user,
|
||||
prio,
|
||||
tracker
|
||||
)
|
||||
} yield job
|
||||
|
||||
def processItem[F[_]: Sync](
|
||||
args: ProcessItemArgs,
|
||||
account: AccountId,
|
||||
|
@ -44,6 +44,19 @@ trait OUpload[F[_]] {
|
||||
case Left(srcId) =>
|
||||
submit(data, srcId, notifyJoex, itemId)
|
||||
}
|
||||
|
||||
/** Submits the item for re-processing. The list of attachment ids can
|
||||
* be used to only re-process a subset of the item's attachments.
|
||||
* If this list is empty, all attachments are reprocessed. This
|
||||
* call only submits the job into the queue.
|
||||
*/
|
||||
def reprocess(
|
||||
item: Ident,
|
||||
attachments: List[Ident],
|
||||
account: AccountId,
|
||||
notifyJoex: Boolean
|
||||
): F[OUpload.UploadResult]
|
||||
|
||||
}
|
||||
|
||||
object OUpload {
|
||||
@ -159,6 +172,21 @@ object OUpload {
|
||||
result <- OptionT.liftF(submit(updata, accId, notifyJoex, itemId))
|
||||
} yield result).getOrElse(UploadResult.noSource)
|
||||
|
||||
def reprocess(
|
||||
item: Ident,
|
||||
attachments: List[Ident],
|
||||
account: AccountId,
|
||||
notifyJoex: Boolean
|
||||
): F[UploadResult] =
|
||||
(for {
|
||||
_ <-
|
||||
OptionT(store.transact(RItem.findByIdAndCollective(item, account.collective)))
|
||||
args = ReProcessItemArgs(item, attachments)
|
||||
job <-
|
||||
OptionT.liftF(JobFactory.reprocessItem[F](args, account, Priority.Low, None))
|
||||
res <- OptionT.liftF(submitJobs(notifyJoex)(Vector(job)))
|
||||
} yield res).getOrElse(UploadResult.noItem)
|
||||
|
||||
private def submitJobs(
|
||||
notifyJoex: Boolean
|
||||
)(jobs: Vector[RJob]): F[OUpload.UploadResult] =
|
||||
|
Reference in New Issue
Block a user