mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Create tasks to generate all previews
There is a task to generate preview images per attachment. It can either add them (if not present yet) or overwrite them (e.g. some config has changed). There is a task that selects all attachments without previews and submits a task to create it. This is submitted on start automatically to generate previews for all existing attachments.
This commit is contained in:
@ -0,0 +1,26 @@
|
||||
package docspell.common
|
||||
|
||||
import io.circe.generic.semiauto._
|
||||
import io.circe.{Decoder, Encoder}
|
||||
|
||||
/** Arguments for the `AllPreviewsTask` that submits tasks to
|
||||
* generates a preview image for attachments.
|
||||
*
|
||||
* It can replace the current preview image or only generate one, if
|
||||
* it is missing. If no collective is specified, it considers all
|
||||
* attachments.
|
||||
*/
|
||||
case class AllPreviewsArgs(
|
||||
collective: Option[Ident],
|
||||
storeMode: MakePreviewArgs.StoreMode
|
||||
)
|
||||
|
||||
object AllPreviewsArgs {
|
||||
|
||||
val taskName = Ident.unsafe("all-previews")
|
||||
|
||||
implicit val jsonEncoder: Encoder[AllPreviewsArgs] =
|
||||
deriveEncoder[AllPreviewsArgs]
|
||||
implicit val jsonDecoder: Decoder[AllPreviewsArgs] =
|
||||
deriveDecoder[AllPreviewsArgs]
|
||||
}
|
@ -2,8 +2,8 @@ package docspell.common
|
||||
|
||||
object DocspellSystem {
|
||||
|
||||
val user = Ident.unsafe("docspell-system")
|
||||
val taskGroup = user
|
||||
val migrationTaskTracker = Ident.unsafe("full-text-index-tracker")
|
||||
|
||||
val user = Ident.unsafe("docspell-system")
|
||||
val taskGroup = user
|
||||
val migrationTaskTracker = Ident.unsafe("full-text-index-tracker")
|
||||
val allPreviewTaskTracker = Ident.unsafe("generate-all-previews")
|
||||
}
|
||||
|
@ -0,0 +1,53 @@
|
||||
package docspell.common
|
||||
|
||||
import io.circe.generic.semiauto._
|
||||
import io.circe.{Decoder, Encoder}
|
||||
|
||||
/** Arguments for the `MakePreviewTask` that generates a preview image
|
||||
* for an attachment.
|
||||
*
|
||||
* It can replace the current preview image or only generate one, if
|
||||
* it is missing.
|
||||
*/
|
||||
case class MakePreviewArgs(
|
||||
attachment: Ident,
|
||||
store: MakePreviewArgs.StoreMode
|
||||
)
|
||||
|
||||
object MakePreviewArgs {
|
||||
|
||||
val taskName = Ident.unsafe("make-preview")
|
||||
|
||||
sealed trait StoreMode extends Product {
|
||||
final def name: String =
|
||||
productPrefix.toLowerCase()
|
||||
}
|
||||
object StoreMode {
|
||||
|
||||
/** Replace any preview file that may already exist. */
|
||||
case object Replace extends StoreMode
|
||||
|
||||
/** Only create a preview image, if it is missing. */
|
||||
case object WhenMissing extends StoreMode
|
||||
|
||||
def fromString(str: String): Either[String, StoreMode] =
|
||||
Option(str).map(_.trim.toLowerCase()) match {
|
||||
case Some("replace") => Right(Replace)
|
||||
case Some("whenmissing") => Right(WhenMissing)
|
||||
case _ => Left(s"Invalid store mode: $str")
|
||||
}
|
||||
|
||||
implicit val jsonEncoder: Encoder[StoreMode] =
|
||||
Encoder.encodeString.contramap(_.name)
|
||||
|
||||
implicit val jsonDecoder: Decoder[StoreMode] =
|
||||
Decoder.decodeString.emap(fromString)
|
||||
}
|
||||
|
||||
implicit val jsonEncoder: Encoder[MakePreviewArgs] =
|
||||
deriveEncoder[MakePreviewArgs]
|
||||
|
||||
implicit val jsonDecoder: Decoder[MakePreviewArgs] =
|
||||
deriveDecoder[MakePreviewArgs]
|
||||
|
||||
}
|
Reference in New Issue
Block a user