1
Fork 0

Move setup of executable workers to function

- Fix startup crash if no site_info row was found
This commit is contained in:
viktorstrate 2020-09-23 14:34:26 +02:00
parent d09bb3b99e
commit 44a00c7415
4 changed files with 31 additions and 17 deletions

View File

@ -4,7 +4,7 @@ import (
"database/sql" "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)") _, err := db.Exec("INSERT INTO site_info (initial_setup) VALUES (true)")
if err != nil { if err != nil {
return err return err
@ -25,7 +25,7 @@ func GetSiteInfo(db *sql.DB) (*SiteInfo, error) {
if !rows.Next() { if !rows.Next() {
// Entry does not exist // Entry does not exist
if err := InitializeSiteInfoRow(db); err != nil { if err := initializeSiteInfoRow(db); err != nil {
return nil, err return nil, err
} }
initialSetup = true initialSetup = true

View File

@ -10,8 +10,13 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
var DarktableCli = newDarktableWorker() func InitializeExecutableWorkers() {
var FfmpegCli = newFfmpegWorker() DarktableCli = newDarktableWorker()
FfmpegCli = newFfmpegWorker()
}
var DarktableCli *DarktableWorker = nil
var FfmpegCli *FfmpegWorker = nil
type ExecutableWorker interface { type ExecutableWorker interface {
Path() string Path() string
@ -25,38 +30,42 @@ type FfmpegWorker struct {
path string path string
} }
func newDarktableWorker() DarktableWorker { func newDarktableWorker() *DarktableWorker {
path, err := exec.LookPath("darktable-cli") path, err := exec.LookPath("darktable-cli")
if err != nil { if err != nil {
log.Println("Executable worker not found: darktable") log.Println("Executable worker not found: darktable")
} else { } else {
log.Println("Found executable worker: darktable") log.Println("Found executable worker: darktable")
}
return DarktableWorker{ return &DarktableWorker{
path: path, path: path,
} }
} }
func newFfmpegWorker() FfmpegWorker { return nil
}
func newFfmpegWorker() *FfmpegWorker {
path, err := exec.LookPath("ffmpeg") path, err := exec.LookPath("ffmpeg")
if err != nil { if err != nil {
log.Println("Executable worker not found: ffmpeg") log.Println("Executable worker not found: ffmpeg")
} else { } else {
log.Println("Found executable worker: ffmpeg") log.Println("Found executable worker: ffmpeg")
}
return FfmpegWorker{ return &FfmpegWorker{
path: path, path: path,
} }
} }
return nil
}
func (worker *DarktableWorker) IsInstalled() bool { func (worker *DarktableWorker) IsInstalled() bool {
return worker.path != "" return worker != nil
} }
func (worker *FfmpegWorker) IsInstalled() bool { func (worker *FfmpegWorker) IsInstalled() bool {
return worker.path != "" return worker != nil
} }
func (worker *DarktableWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error { func (worker *DarktableWorker) EncodeJpeg(inputPath string, outputPath string, jpegQuality int) error {

View File

@ -40,10 +40,13 @@ var global_scanner_queue ScannerQueue
func InitializeScannerQueue(db *sql.DB) error { func InitializeScannerQueue(db *sql.DB) error {
var concurrentWorkers int var concurrentWorkers int
row := db.QueryRow("SELECT concurrent_workers FROM site_info") {
if err := row.Scan(&concurrentWorkers); err != nil { site_info, err := models.GetSiteInfo(db)
if err != nil {
return errors.Wrap(err, "get current workers from database") return errors.Wrap(err, "get current workers from database")
} }
concurrentWorkers = site_info.ConcurrentWorkers
}
global_scanner_queue = ScannerQueue{ global_scanner_queue = ScannerQueue{
idle_chan: make(chan bool, 1), idle_chan: make(chan bool, 1),

View File

@ -49,6 +49,8 @@ func main() {
log.Panicf("Could not initialize periodic scanner: %s", err) log.Panicf("Could not initialize periodic scanner: %s", err)
} }
scanner.InitializeExecutableWorkers()
rootRouter := mux.NewRouter() rootRouter := mux.NewRouter()
rootRouter.Use(auth.Middleware(db)) rootRouter.Use(auth.Middleware(db))