mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Add task to copy files
This commit is contained in:
@ -14,7 +14,8 @@ case class Banner(
|
||||
configFile: Option[String],
|
||||
appId: Ident,
|
||||
baseUrl: LenientUri,
|
||||
ftsUrl: Option[LenientUri]
|
||||
ftsUrl: Option[LenientUri],
|
||||
fileStoreConfig: FileStoreConfig
|
||||
) {
|
||||
|
||||
private val banner =
|
||||
@ -36,6 +37,7 @@ case class Banner(
|
||||
s"Database: ${jdbcUrl.asString}",
|
||||
s"Fts: ${ftsUrl.map(_.asString).getOrElse("-")}",
|
||||
s"Config: ${configFile.getOrElse("")}",
|
||||
s"FileRepo: ${fileStoreConfig}",
|
||||
""
|
||||
)
|
||||
|
||||
|
@ -10,6 +10,8 @@ object DocspellSystem {
|
||||
|
||||
val user = Ident.unsafe("docspell-system")
|
||||
val taskGroup = user
|
||||
val account: AccountId = AccountId(taskGroup, user)
|
||||
|
||||
val migrationTaskTracker = Ident.unsafe("full-text-index-tracker")
|
||||
val allPreviewTaskTracker = Ident.unsafe("generate-all-previews")
|
||||
val allPageCountTaskTracker = Ident.unsafe("all-page-count-tracker")
|
||||
|
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright 2020 Eike K. & Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package docspell.common
|
||||
|
||||
import cats.data.NonEmptyList
|
||||
|
||||
import docspell.common.FileCopyTaskArgs.Selection
|
||||
|
||||
import io.circe.generic.semiauto.{deriveDecoder, deriveEncoder}
|
||||
import io.circe.syntax._
|
||||
import io.circe.{Decoder, Encoder}
|
||||
|
||||
/** This is the input to the `FileCopyTask`. The task copies all files from on
|
||||
* FileRepository to one ore more target repositories.
|
||||
*
|
||||
* If no `from` is given, the default file repository is used. For targets, a list of ids
|
||||
* can be specified that must match a configured file store in the config file. When
|
||||
* selecting "all", it means all enabled stores.
|
||||
*/
|
||||
final case class FileCopyTaskArgs(from: Option[Ident], to: Selection)
|
||||
|
||||
object FileCopyTaskArgs {
|
||||
val taskName = Ident.unsafe("copy-file-repositories")
|
||||
|
||||
sealed trait Selection
|
||||
|
||||
object Selection {
|
||||
|
||||
case object All extends Selection
|
||||
case class Stores(ids: NonEmptyList[Ident]) extends Selection
|
||||
|
||||
implicit val jsonEncoder: Encoder[Selection] =
|
||||
Encoder.instance {
|
||||
case All => "!all".asJson
|
||||
case Stores(ids) => ids.toList.asJson
|
||||
}
|
||||
|
||||
implicit val jsonDecoder: Decoder[Selection] =
|
||||
Decoder.instance { cursor =>
|
||||
cursor.value.asString match {
|
||||
case Some(s) if s.equalsIgnoreCase("!all") => Right(All)
|
||||
case _ => cursor.value.as[NonEmptyList[Ident]].map(Stores.apply)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
implicit val jsonDecoder: Decoder[FileCopyTaskArgs] =
|
||||
deriveDecoder
|
||||
|
||||
implicit val jsonEncoder: Encoder[FileCopyTaskArgs] =
|
||||
deriveEncoder
|
||||
}
|
@ -32,5 +32,8 @@ object FileStoreConfig {
|
||||
bucket: String
|
||||
) extends FileStoreConfig {
|
||||
val storeType = FileStoreType.S3
|
||||
|
||||
override def toString =
|
||||
s"S3(enabled=$enabled, endpoint=$endpoint, bucket=$bucket, accessKey=$accessKey, secretKey=***)"
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user