Configure pdf extraction; move Logger and DataType to common

This commit is contained in:
Eike Kettner
2020-02-17 14:01:36 +01:00
parent 3d615181e0
commit e0682464b5
12 changed files with 64 additions and 27 deletions

View File

@ -0,0 +1,19 @@
package docspell.common
sealed trait DataType {
}
object DataType {
case class Exact(mime: MimeType) extends DataType
case class Hint(hint: MimeTypeHint) extends DataType
def apply(mt: MimeType): DataType =
Exact(mt)
def filename(name: String): DataType =
Hint(MimeTypeHint.filename(name))
}

View File

@ -4,11 +4,10 @@ import java.io.IOException
import java.nio.file.attribute.BasicFileAttributes
import java.nio.file.{FileVisitResult, Files, Path, SimpleFileVisitor}
import java.util.concurrent.atomic.AtomicInteger
import scala.jdk.CollectionConverters._
import scala.jdk.CollectionConverters._
import cats.implicits._
import cats.effect.Sync
import fs2.Stream
import cats.effect.{Blocker, ContextShift, Resource, Sync}
object File {
@ -40,6 +39,9 @@ object File {
count.get
}
def existsNonEmpty[F[_]: Sync](file: Path, minSize: Long = 0): F[Boolean] =
Sync[F].delay(Files.exists(file) && Files.size(file) > minSize)
def deleteFile[F[_]: Sync](file: Path): F[Unit] =
Sync[F].delay(Files.deleteIfExists(file)).map(_ => ())
@ -47,10 +49,8 @@ object File {
if (Files.isDirectory(path)) deleteDirectory(path)
else deleteFile(path).map(_ => 1)
def withTempDir[F[_]: Sync, A](parent: Path, prefix: String)(
f: Path => Stream[F, A]
): Stream[F, A] =
Stream.bracket(mkTempDir(parent, prefix))(p => delete(p).map(_ => ())).flatMap(f)
def withTempDir[F[_]: Sync](parent: Path, prefix: String): Resource[F, Path] =
Resource.make(mkTempDir(parent, prefix))(p => delete(p).map(_ => ()))
def listFiles[F[_]: Sync](pred: Path => Boolean, dir: Path): F[List[Path]] = Sync[F].delay {
val javaList =
@ -58,4 +58,6 @@ object File {
javaList.asScala.toList.sortBy(_.getFileName.toString)
}
def readAll[F[_]: Sync: ContextShift](file: Path, blocker: Blocker, chunkSize: Int) =
fs2.io.file.readAll(file, blocker, chunkSize)
}

View File

@ -1,5 +1,9 @@
package docspell.common
import cats.effect.Sync
import docspell.common.syntax.all._
import org.log4s.{Logger => Log4sLogger}
trait Logger[F[_]] {
def trace(msg: => String): F[Unit]
@ -10,3 +14,28 @@ trait Logger[F[_]] {
def error(msg: => String): F[Unit]
}
object Logger {
def log4s[F[_]: Sync](log: Log4sLogger): Logger[F] = new Logger[F] {
def trace(msg: => String): F[Unit] =
log.ftrace(msg)
def debug(msg: => String): F[Unit] =
log.fdebug(msg)
def info(msg: => String): F[Unit] =
log.finfo(msg)
def warn(msg: => String): F[Unit] =
log.fwarn(msg)
def error(ex: Throwable)(msg: => String): F[Unit] =
log.ferror(ex)(msg)
def error(msg: => String): F[Unit] =
log.ferror(msg)
}
}