2020-05-15 15:23:21 +02:00
|
|
|
package scanner
|
|
|
|
|
2020-05-17 21:28:42 +02:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"os/exec"
|
|
|
|
"strings"
|
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-15 15:23:21 +02:00
|
|
|
type ExecutableWorker struct {
|
|
|
|
Name string
|
|
|
|
Path string
|
|
|
|
argsFmt string
|
|
|
|
}
|
|
|
|
|
|
|
|
func newExecutableWorker(name string, argsFmt string) ExecutableWorker {
|
|
|
|
path, err := exec.LookPath(name)
|
|
|
|
if err != nil {
|
2020-05-17 21:28:42 +02:00
|
|
|
log.Printf("WARN: %s was not found\n", name)
|
|
|
|
} else {
|
|
|
|
log.Printf("Found executable worker: %s\n", name)
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return ExecutableWorker{
|
|
|
|
Name: name,
|
|
|
|
Path: path,
|
|
|
|
argsFmt: argsFmt,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-05-15 16:36:02 +02:00
|
|
|
func (execWorker *ExecutableWorker) isInstalled() bool {
|
|
|
|
return execWorker.Path != ""
|
|
|
|
}
|
|
|
|
|
2020-05-15 15:23:21 +02:00
|
|
|
func (execWorker *ExecutableWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error {
|
2020-05-17 21:28:42 +02:00
|
|
|
args := make([]string, 0)
|
|
|
|
for _, arg := range strings.Split(execWorker.argsFmt, " ") {
|
|
|
|
if strings.Contains(arg, "%") {
|
|
|
|
arg = fmt.Sprintf(arg, inputPath, outputPath, jpegQuality)
|
|
|
|
}
|
|
|
|
args = append(args, arg)
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd := exec.Command(execWorker.Path, args...)
|
2020-05-15 15:23:21 +02:00
|
|
|
|
|
|
|
if err := cmd.Run(); err != nil {
|
2020-05-17 21:28:42 +02:00
|
|
|
return errors.Wrapf(err, "error encoding image using: %s %v", execWorker.Name, args)
|
2020-05-15 15:23:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-05-17 21:28:42 +02:00
|
|
|
var DarktableCli = newExecutableWorker("darktable-cli", "%[1]s %[2]s --core --conf plugins/imageio/format/jpeg/quality=%[3]d")
|