From f0a5df7cd750ea45bdf5a7dde720744deecb85aa Mon Sep 17 00:00:00 2001 From: Deluan <deluan@thoughtworks.com> Date: Mon, 6 Jul 2020 23:48:43 -0400 Subject: [PATCH] Move transcodings initialization to a migration This will make it run only once, not every time the transcoding table is empty --- ...20200706231659_add_default_transcodings.go | 43 +++++++++++++++++++ server/initial_setup.go | 29 ------------- 2 files changed, 43 insertions(+), 29 deletions(-) create mode 100644 db/migration/20200706231659_add_default_transcodings.go diff --git a/db/migration/20200706231659_add_default_transcodings.go b/db/migration/20200706231659_add_default_transcodings.go new file mode 100644 index 000000000..574c8a8e6 --- /dev/null +++ b/db/migration/20200706231659_add_default_transcodings.go @@ -0,0 +1,43 @@ +package migration + +import ( + "database/sql" + + "github.com/deluan/navidrome/consts" + "github.com/google/uuid" + "github.com/pressly/goose" +) + +func init() { + goose.AddMigration(upAddDefaultTranscodings, downAddDefaultTranscodings) +} + +func upAddDefaultTranscodings(tx *sql.Tx) error { + row := tx.QueryRow("SELECT COUNT(*) FROM transcoding") + var count int + err := row.Scan(&count) + if err != nil { + return err + } + if count > 0 { + return nil + } + + stmt, err := tx.Prepare("insert into transcoding (id, name, target_format, default_bit_rate, command) values (?, ?, ?, ?, ?)") + if err != nil { + return err + } + + for _, t := range consts.DefaultTranscodings { + r, _ := uuid.NewRandom() + _, err := stmt.Exec(r.String(), t["name"], t["targetFormat"], t["defaultBitRate"], t["command"]) + if err != nil { + return err + } + } + return nil +} + +func downAddDefaultTranscodings(tx *sql.Tx) error { + return nil +} diff --git a/server/initial_setup.go b/server/initial_setup.go index 45083046a..5b5ac2675 100644 --- a/server/initial_setup.go +++ b/server/initial_setup.go @@ -2,7 +2,6 @@ package server import ( "context" - "encoding/json" "fmt" "time" @@ -15,10 +14,6 @@ import ( func initialSetup(ds model.DataStore) { _ = ds.WithTx(func(tx model.DataStore) error { - if err := createDefaultTranscodings(ds); err != nil { - return err - } - properties := ds.Property(context.TODO()) _, err := properties.Get(consts.InitialSetupFlagKey) if err == nil { @@ -84,27 +79,3 @@ func createJWTSecret(ds model.DataStore) error { } return err } - -func createDefaultTranscodings(ds model.DataStore) error { - transcodings := ds.Transcoding(context.TODO()) - c, _ := transcodings.CountAll() - if c != 0 { - return nil - } - for _, d := range consts.DefaultTranscodings { - var j []byte - var err error - if j, err = json.Marshal(d); err != nil { - return err - } - var t model.Transcoding - if err = json.Unmarshal(j, &t); err != nil { - return err - } - log.Info("Creating default transcoding config", "name", t.Name) - if err = transcodings.Put(&t); err != nil { - return err - } - } - return nil -}