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:
@ -28,7 +28,8 @@ object Main extends IOApp {
|
||||
Option(System.getProperty("config.file")),
|
||||
cfg.appId,
|
||||
cfg.baseUrl,
|
||||
Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled)
|
||||
Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled),
|
||||
cfg.backend.files.defaultStoreConfig
|
||||
)
|
||||
_ <- logger.info(s"\n${banner.render("***>")}")
|
||||
_ <-
|
||||
|
@ -7,7 +7,9 @@
|
||||
package docspell.restserver
|
||||
|
||||
import fs2.Stream
|
||||
|
||||
import docspell.backend.BackendApp
|
||||
|
||||
import org.http4s.HttpRoutes
|
||||
import org.http4s.server.websocket.WebSocketBuilder2
|
||||
|
||||
|
@ -9,6 +9,7 @@ package docspell.restserver
|
||||
import cats.effect._
|
||||
import fs2.Stream
|
||||
import fs2.concurrent.Topic
|
||||
|
||||
import docspell.backend.BackendApp
|
||||
import docspell.backend.auth.{AuthToken, ShareToken}
|
||||
import docspell.ftsclient.FtsClient
|
||||
@ -23,6 +24,7 @@ import docspell.restserver.routes._
|
||||
import docspell.restserver.webapp.{TemplateRoutes, Templates, WebjarRoutes}
|
||||
import docspell.restserver.ws.{OutputEvent, WebSocketRoutes}
|
||||
import docspell.store.Store
|
||||
|
||||
import emil.javamail.JavaMailEmil
|
||||
import org.http4s.HttpRoutes
|
||||
import org.http4s.client.Client
|
||||
@ -76,7 +78,8 @@ final class RestAppImpl[F[_]: Async](
|
||||
"user/otp" -> TotpRoutes.admin(backend),
|
||||
"user" -> UserRoutes.admin(backend),
|
||||
"info" -> InfoRoutes.admin(config),
|
||||
"attachments" -> AttachmentRoutes.admin(backend)
|
||||
"attachments" -> AttachmentRoutes.admin(backend),
|
||||
"files" -> FileRepositoryRoutes.admin(backend)
|
||||
)
|
||||
|
||||
def shareRoutes(
|
||||
|
@ -7,18 +7,21 @@
|
||||
package docspell.restserver
|
||||
|
||||
import scala.concurrent.duration._
|
||||
|
||||
import cats.effect._
|
||||
import cats.implicits._
|
||||
import fs2.Stream
|
||||
import fs2.concurrent.Topic
|
||||
|
||||
import docspell.backend.msg.Topics
|
||||
import docspell.common._
|
||||
import docspell.pubsub.naive.NaivePubSub
|
||||
import docspell.restserver.http4s.InternalHeader
|
||||
import docspell.restserver.ws.OutputEvent.KeepAlive
|
||||
import docspell.restserver.ws.OutputEvent
|
||||
import docspell.restserver.ws.OutputEvent.KeepAlive
|
||||
import docspell.store.Store
|
||||
import docspell.store.records.RInternalSetting
|
||||
|
||||
import org.http4s._
|
||||
import org.http4s.blaze.client.BlazeClientBuilder
|
||||
import org.http4s.blaze.server.BlazeServerBuilder
|
||||
@ -73,7 +76,7 @@ object RestServer {
|
||||
httpClient <- BlazeClientBuilder[F].resource
|
||||
store <- Store.create[F](
|
||||
cfg.backend.jdbc,
|
||||
cfg.backend.files.toFileRepositoryConfig,
|
||||
cfg.backend.files.defaultFileRepositoryConfig,
|
||||
pools.connectEC
|
||||
)
|
||||
setting <- Resource.eval(store.transact(RInternalSetting.create))
|
||||
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2020 Eike K. & Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package docspell.restserver.routes
|
||||
|
||||
import cats.data.NonEmptyList
|
||||
import cats.effect._
|
||||
import cats.implicits._
|
||||
|
||||
import docspell.backend.BackendApp
|
||||
import docspell.common.FileCopyTaskArgs
|
||||
import docspell.common.FileCopyTaskArgs.Selection
|
||||
import docspell.restapi.model._
|
||||
|
||||
import org.http4s._
|
||||
import org.http4s.circe.CirceEntityDecoder._
|
||||
import org.http4s.circe.CirceEntityEncoder._
|
||||
import org.http4s.dsl.Http4sDsl
|
||||
|
||||
object FileRepositoryRoutes {
|
||||
|
||||
def admin[F[_]: Async](backend: BackendApp[F]): HttpRoutes[F] = {
|
||||
val dsl = Http4sDsl[F]
|
||||
import dsl._
|
||||
val logger = docspell.logging.getLogger[F]
|
||||
|
||||
HttpRoutes.of { case req @ POST -> Root / "cloneFileRepository" =>
|
||||
for {
|
||||
input <- req.as[FileRepositoryCloneRequest]
|
||||
args = makeTaskArgs(input)
|
||||
job <- backend.fileRepository.cloneFileRepository(args, true)
|
||||
result = BasicResult(
|
||||
job.isDefined,
|
||||
job.fold(s"Job for '${FileCopyTaskArgs.taskName.id}' already running")(j =>
|
||||
s"Job for '${FileCopyTaskArgs.taskName.id}' submitted: ${j.id.id}"
|
||||
)
|
||||
)
|
||||
_ <- logger.info(result.message)
|
||||
resp <- Ok(result)
|
||||
} yield resp
|
||||
}
|
||||
}
|
||||
|
||||
def makeTaskArgs(input: FileRepositoryCloneRequest): FileCopyTaskArgs =
|
||||
NonEmptyList.fromList(input.targetRepositories) match {
|
||||
case Some(nel) =>
|
||||
FileCopyTaskArgs(None, Selection.Stores(nel))
|
||||
case None =>
|
||||
FileCopyTaskArgs(None, Selection.All)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user