mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Fix storing empty-trash task
It was wrongly stored using RPeriodicTask directly, but the higher level `UserTask` must be used instead, because this ensures a correctly scoped periodic task using the `updateOneTask` method. Since this is a system task, it can be given a fixed ID which makes it now safe even if stored using RPeriodicTask directly. The bug resulted in multiple empty-trash tasks to be inserted (on each restart). Refs: #347
This commit is contained in:
@ -40,6 +40,8 @@ import docspell.store.records.{REmptyTrashSetting, RJobLog}
|
||||
import emil.javamail._
|
||||
import org.http4s.blaze.client.BlazeClientBuilder
|
||||
import org.http4s.client.Client
|
||||
import docspell.store.usertask.UserTaskStore
|
||||
import docspell.store.usertask.UserTaskScope
|
||||
|
||||
final class JoexAppImpl[F[_]: Async](
|
||||
cfg: Config,
|
||||
@ -91,9 +93,15 @@ final class JoexAppImpl[F[_]: Async](
|
||||
REmptyTrashSetting.findForAllCollectives(OCollective.EmptyTrash.default, 50)
|
||||
)
|
||||
.evalMap(es =>
|
||||
EmptyTrashTask.periodicTask(EmptyTrashArgs(es.cid, es.minAge), es.schedule)
|
||||
UserTaskStore(store).use { uts =>
|
||||
val args = EmptyTrashArgs(es.cid, es.minAge)
|
||||
uts.updateOneTask(
|
||||
UserTaskScope(args.collective),
|
||||
args.makeSubject.some,
|
||||
EmptyTrashTask.userTask(args, es.schedule)
|
||||
)
|
||||
}
|
||||
)
|
||||
.evalMap(pstore.insert)
|
||||
.compile
|
||||
.drain
|
||||
|
||||
|
@ -13,8 +13,8 @@ import fs2.Stream
|
||||
import docspell.backend.ops.{OItem, OItemSearch}
|
||||
import docspell.common._
|
||||
import docspell.joex.scheduler._
|
||||
import docspell.store.records.{RItem, RPeriodicTask}
|
||||
import docspell.store.usertask.{UserTask, UserTaskScope}
|
||||
import docspell.store.records.RItem
|
||||
import docspell.store.usertask.UserTask
|
||||
|
||||
import com.github.eikek.calev.CalEvent
|
||||
|
||||
@ -26,19 +26,15 @@ object EmptyTrashTask {
|
||||
|
||||
private val pageSize = 20
|
||||
|
||||
def periodicTask[F[_]: Sync](args: EmptyTrashArgs, ce: CalEvent): F[RPeriodicTask] =
|
||||
Ident
|
||||
.randomId[F]
|
||||
.flatMap(id =>
|
||||
UserTask(
|
||||
id,
|
||||
EmptyTrashArgs.taskName,
|
||||
true,
|
||||
ce,
|
||||
None,
|
||||
args
|
||||
).encode.toPeriodicTask(UserTaskScope(args.collective), args.makeSubject.some)
|
||||
)
|
||||
def userTask(args: EmptyTrashArgs, ce: CalEvent): UserTask[EmptyTrashArgs] =
|
||||
UserTask(
|
||||
args.periodicTaskId,
|
||||
EmptyTrashArgs.taskName,
|
||||
true,
|
||||
ce,
|
||||
None,
|
||||
args
|
||||
)
|
||||
|
||||
def apply[F[_]: Async](
|
||||
itemOps: OItem[F],
|
||||
|
Reference in New Issue
Block a user