1
Fork 0
photoview/api/scanner/executable_worker.go

56 lines
1.2 KiB
Go
Raw Normal View History

2020-05-15 15:23:21 +02:00
package scanner
import (
"fmt"
"log"
"os/exec"
"strings"
2020-05-15 15:23:21 +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 {
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,
}
}
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 {
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 {
return errors.Wrapf(err, "error encoding image using: %s %v", execWorker.Name, args)
2020-05-15 15:23:21 +02:00
}
return nil
}
var DarktableCli = newExecutableWorker("darktable-cli", "%[1]s %[2]s --core --conf plugins/imageio/format/jpeg/quality=%[3]d")