2020-05-15 15:23:21 +02:00
|
|
|
package scanner
|
|
|
|
|
2020-05-17 21:28:42 +02:00
|
|
|
import (
|
|
|
|
"fmt"
|
2020-05-17 21:49:29 +02:00
|
|
|
"io/ioutil"
|
2020-05-17 21:28:42 +02:00
|
|
|
"log"
|
2020-05-17 21:49:29 +02:00
|
|
|
"os"
|
2020-05-17 21:28:42 +02:00
|
|
|
"os/exec"
|
2020-05-15 15:23:21 +02:00
|
|
|
|
2020-05-17 21:28:42 +02:00
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
2020-05-17 16:08:58 +02:00
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
type DarktableWorker struct {
|
|
|
|
path string
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
func newDarktableWorker() DarktableWorker {
|
|
|
|
path, err := exec.LookPath("darktable-cli")
|
2020-05-15 15:23:21 +02:00
|
|
|
if err != nil {
|
2020-05-17 21:49:29 +02:00
|
|
|
log.Println("Executable worker not found: darktable")
|
2020-05-17 21:28:42 +02:00
|
|
|
} else {
|
2020-05-17 21:49:29 +02:00
|
|
|
log.Println("Found executable worker: darktable")
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
return DarktableWorker{
|
|
|
|
path: path,
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
func (worker *DarktableWorker) IsInstalled() bool {
|
|
|
|
return worker.path != ""
|
2020-05-15 16:36:02 +02:00
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
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{
|
|
|
|
inputPath,
|
|
|
|
outputPath,
|
|
|
|
"--core",
|
|
|
|
"--conf",
|
|
|
|
fmt.Sprintf("plugins/imageio/format/jpeg/quality=%d", jpegQuality),
|
|
|
|
"--configdir",
|
|
|
|
tmpDir,
|
2020-05-17 21:28:42 +02:00
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
cmd := exec.Command(worker.path, args...)
|
2020-05-15 15:23:21 +02:00
|
|
|
|
|
|
|
if err := cmd.Run(); err != nil {
|
2020-05-17 21:49:29 +02:00
|
|
|
return errors.Wrapf(err, "encoding image using: %s %v", worker.path, args)
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-05-17 21:49:29 +02:00
|
|
|
var DarktableCli = newDarktableWorker()
|