Back to bookworm. (#1040)

This commit is contained in:
Googol Lee
2024-09-06 13:32:22 +02:00
committed by GitHub
parent 6e1e1d12ce
commit a6cbfc76f3
13 changed files with 204 additions and 140 deletions

View File

@@ -22,12 +22,12 @@ import (
)
var thumbFilter = map[models.ThumbnailFilter]imaging.ResampleFilter{
models.ThumbnailFilterNearestNeighbor: imaging.NearestNeighbor,
models.ThumbnailFilterBox: imaging.Box,
models.ThumbnailFilterLinear: imaging.Linear,
models.ThumbnailFilterMitchellNetravali: imaging.MitchellNetravali,
models.ThumbnailFilterCatmullRom: imaging.CatmullRom,
models.ThumbnailFilterLanczos: imaging.Lanczos,
models.ThumbnailFilterNearestNeighbor: imaging.NearestNeighbor,
models.ThumbnailFilterBox: imaging.Box,
models.ThumbnailFilterLinear: imaging.Linear,
models.ThumbnailFilterMitchellNetravali: imaging.MitchellNetravali,
models.ThumbnailFilterCatmullRom: imaging.CatmullRom,
models.ThumbnailFilterLanczos: imaging.Lanczos,
}
func EncodeThumbnail(db *gorm.DB, inputPath string, outputPath string) (*media_utils.PhotoDimensions, error) {
@@ -108,10 +108,10 @@ func (img *EncodeMediaData) EncodeHighRes(outputPath string) error {
return errors.New("could not convert photo as file format is not supported")
}
// Use ImageMagick if there is no counterpart JPEG file to use instead
// Use darktable if there is no counterpart JPEG file to use instead
if contentType.IsRaw() && img.CounterpartPath == nil {
if executable_worker.MagickCli.IsInstalled() {
err := executable_worker.MagickCli.EncodeJpeg(img.Media.Path, outputPath, 70)
if executable_worker.DarktableCli.IsInstalled() {
err := executable_worker.DarktableCli.EncodeJpeg(img.Media.Path, outputPath, 70)
if err != nil {
return err
}

View File

@@ -2,7 +2,9 @@ package executable_worker
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
@@ -12,18 +14,18 @@ import (
)
func InitializeExecutableWorkers() {
MagickCli = newMagickWorker()
DarktableCli = newDarktableWorker()
FfmpegCli = newFfmpegWorker()
}
var MagickCli *MagickWorker = nil
var DarktableCli *DarktableWorker = nil
var FfmpegCli *FfmpegWorker = nil
type ExecutableWorker interface {
Path() string
}
type MagickWorker struct {
type DarktableWorker struct {
path string
}
@@ -31,25 +33,25 @@ type FfmpegWorker struct {
path string
}
func newMagickWorker() *MagickWorker {
func newDarktableWorker() *DarktableWorker {
if utils.EnvDisableRawProcessing.GetBool() {
log.Printf("Executable worker disabled (%s=1): ImageMagick\n", utils.EnvDisableRawProcessing.GetName())
log.Printf("Executable worker disabled (%s=1): darktable\n", utils.EnvDisableRawProcessing.GetName())
return nil
}
path, err := exec.LookPath("magick")
path, err := exec.LookPath("darktable-cli")
if err != nil {
log.Println("Executable worker not found: magick")
log.Println("Executable worker not found: darktable")
} else {
version, err := exec.Command(path, "-version").Output()
version, err := exec.Command(path, "--version").Output()
if err != nil {
log.Printf("Error getting version of magick: %s\n", err)
log.Printf("Error getting version of darktable: %s\n", err)
return nil
}
log.Printf("Found executable worker: magick (%s)\n", strings.Split(string(version), "\n")[0])
log.Printf("Found executable worker: darktable (%s)\n", strings.Split(string(version), "\n")[0])
return &MagickWorker{
return &DarktableWorker{
path: path,
}
}
@@ -83,7 +85,7 @@ func newFfmpegWorker() *FfmpegWorker {
return nil
}
func (worker *MagickWorker) IsInstalled() bool {
func (worker *DarktableWorker) IsInstalled() bool {
return worker != nil
}
@@ -91,18 +93,27 @@ func (worker *FfmpegWorker) IsInstalled() bool {
return worker != nil
}
func (worker *MagickWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error {
func (worker *DarktableWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error {
tmpDir, err := ioutil.TempDir("/tmp", "photoview-darktable")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(tmpDir)
args := []string{
"convert",
inputPath,
"-quality", fmt.Sprintf("%d", jpegQuality),
outputPath,
"--core",
"--conf",
fmt.Sprintf("plugins/imageio/format/jpeg/quality=%d", jpegQuality),
"--configdir",
tmpDir,
}
cmd := exec.Command(worker.path, args...)
if err := cmd.Run(); err != nil {
return fmt.Errorf("encoding image with \"%s %v\" error: %w", worker.path, args, err)
return errors.Wrapf(err, "encoding image using: %s %v", worker.path, args)
}
return nil

View File

@@ -1,63 +0,0 @@
package executable_worker_test
import (
"os"
"regexp"
"testing"
"github.com/photoview/photoview/api/scanner/media_encoding/executable_worker"
)
func TestMagickWorkerNotExist(t *testing.T) {
done := setPathWithCurrent()
defer done()
executable_worker.InitializeExecutableWorkers()
if executable_worker.MagickCli.IsInstalled() {
t.Error("MagickCli should not be installed, but is found:", executable_worker.MagickCli)
}
}
func TestMagickWorkerIgnore(t *testing.T) {
done := setPathWithCurrent("./testdata/bin")
defer done()
org := os.Getenv("PHOTOVIEW_DISABLE_RAW_PROCESSING")
os.Setenv("PHOTOVIEW_DISABLE_RAW_PROCESSING", "true")
defer os.Setenv("PHOTOVIEW_DISABLE_RAW_PROCESSING", org)
executable_worker.InitializeExecutableWorkers()
if executable_worker.MagickCli.IsInstalled() {
t.Error("MagickCli should not be installed, but is found:", executable_worker.MagickCli)
}
}
func TestMagickWorker(t *testing.T) {
done := setPathWithCurrent("./testdata/bin")
defer done()
executable_worker.InitializeExecutableWorkers()
if !executable_worker.MagickCli.IsInstalled() {
t.Error("MagickCli should be installed")
}
t.Run("Failed", func(t *testing.T) {
err := executable_worker.MagickCli.EncodeJpeg("input", "output", 0)
if err == nil {
t.Fatalf("MagickCli.EncodeJpeg(\"input\", \"output\", 0) = nil, should be an error.")
}
if got, want := err.Error(), "^encoding image with \".*?/testdata/bin/magick .*?\" error: .*$"; !regexp.MustCompile(want).MatchString(got) {
t.Errorf("MagickCli.EncodeJpeg(\"input\", \"output\", 0) = %q, should be as reg pattern %q", got, want)
}
})
t.Run("Succeeded", func(t *testing.T) {
err := executable_worker.MagickCli.EncodeJpeg("input", "output", 70)
if err != nil {
t.Fatalf("MagickCli.EncodeJpeg(\"input\", \"output\", 0) = %v, should be nil.", err)
}
})
}

View File

@@ -1,13 +0,0 @@
#!/bin/sh
case "$1" in
"-version")
echo convert: version fake
;;
esac
echo $@
if [ "$4" = "0" ] # quality parameter
then
exit -1
fi

View File

@@ -260,7 +260,7 @@ func (imgType *MediaType) IsSupported() bool {
return true
}
if executable_worker.MagickCli.IsInstalled() && imgType.IsRaw() {
if executable_worker.DarktableCli.IsInstalled() && imgType.IsRaw() {
return true
}