From 44a00c74150c2b2b39f46678064661bfdaf73521 Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Wed, 23 Sep 2020 14:34:26 +0200 Subject: [PATCH] Move setup of executable workers to function - Fix startup crash if no site_info row was found --- api/graphql/models/site_info.go | 4 ++-- api/scanner/executable_worker.go | 33 ++++++++++++++++++++------------ api/scanner/queue.go | 9 ++++++--- api/server.go | 2 ++ 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/api/graphql/models/site_info.go b/api/graphql/models/site_info.go index 4bec8fda..81cf241e 100644 --- a/api/graphql/models/site_info.go +++ b/api/graphql/models/site_info.go @@ -4,7 +4,7 @@ import ( "database/sql" ) -func InitializeSiteInfoRow(db *sql.DB) error { +func initializeSiteInfoRow(db *sql.DB) error { _, err := db.Exec("INSERT INTO site_info (initial_setup) VALUES (true)") if err != nil { return err @@ -25,7 +25,7 @@ func GetSiteInfo(db *sql.DB) (*SiteInfo, error) { if !rows.Next() { // Entry does not exist - if err := InitializeSiteInfoRow(db); err != nil { + if err := initializeSiteInfoRow(db); err != nil { return nil, err } initialSetup = true diff --git a/api/scanner/executable_worker.go b/api/scanner/executable_worker.go index b345d95f..dc042026 100644 --- a/api/scanner/executable_worker.go +++ b/api/scanner/executable_worker.go @@ -10,8 +10,13 @@ import ( "github.com/pkg/errors" ) -var DarktableCli = newDarktableWorker() -var FfmpegCli = newFfmpegWorker() +func InitializeExecutableWorkers() { + DarktableCli = newDarktableWorker() + FfmpegCli = newFfmpegWorker() +} + +var DarktableCli *DarktableWorker = nil +var FfmpegCli *FfmpegWorker = nil type ExecutableWorker interface { Path() string @@ -25,38 +30,42 @@ type FfmpegWorker struct { path string } -func newDarktableWorker() DarktableWorker { +func newDarktableWorker() *DarktableWorker { path, err := exec.LookPath("darktable-cli") if err != nil { log.Println("Executable worker not found: darktable") } else { log.Println("Found executable worker: darktable") + + return &DarktableWorker{ + path: path, + } } - return DarktableWorker{ - path: path, - } + return nil } -func newFfmpegWorker() FfmpegWorker { +func newFfmpegWorker() *FfmpegWorker { path, err := exec.LookPath("ffmpeg") if err != nil { log.Println("Executable worker not found: ffmpeg") } else { log.Println("Found executable worker: ffmpeg") + + return &FfmpegWorker{ + path: path, + } } - return FfmpegWorker{ - path: path, - } + return nil } func (worker *DarktableWorker) IsInstalled() bool { - return worker.path != "" + return worker != nil } func (worker *FfmpegWorker) IsInstalled() bool { - return worker.path != "" + return worker != nil } func (worker *DarktableWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error { diff --git a/api/scanner/queue.go b/api/scanner/queue.go index 03bb10ae..a56eb08c 100644 --- a/api/scanner/queue.go +++ b/api/scanner/queue.go @@ -40,9 +40,12 @@ var global_scanner_queue ScannerQueue func InitializeScannerQueue(db *sql.DB) error { var concurrentWorkers int - row := db.QueryRow("SELECT concurrent_workers FROM site_info") - if err := row.Scan(&concurrentWorkers); err != nil { - return errors.Wrap(err, "get current workers from database") + { + site_info, err := models.GetSiteInfo(db) + if err != nil { + return errors.Wrap(err, "get current workers from database") + } + concurrentWorkers = site_info.ConcurrentWorkers } global_scanner_queue = ScannerQueue{ diff --git a/api/server.go b/api/server.go index f9b1ff7e..0af6db07 100644 --- a/api/server.go +++ b/api/server.go @@ -49,6 +49,8 @@ func main() { log.Panicf("Could not initialize periodic scanner: %s", err) } + scanner.InitializeExecutableWorkers() + rootRouter := mux.NewRouter() rootRouter.Use(auth.Middleware(db))