feat: wrap commands to send info (#612)

Wrap commands in a better way to pass storage

Former-commit-id: 9a3790c193936b53fe3826d1e051795efd30670b [formerly 04a9f34933a162cf4a98bc1e019f0d6c6404aae7] [formerly ab9be7f27b55a94e6a0f053df6908e357d4b396c [formerly 01ff03e426]]
Former-commit-id: ae7b61281dec2b5527f6032dc6f8c1bd8bb51296 [formerly 780ccc3b166e72bf53114bbfc0a95c0b7ffd8656]
Former-commit-id: 68ee8f7f3931f8e571b0188c96951077d6529cd7
This commit is contained in:
Henrique Dias 2019-01-07 20:24:23 +00:00 committed by GitHub
parent 1133f0f826
commit 77e1fe83db
16 changed files with 170 additions and 212 deletions

View file

@ -2,7 +2,7 @@ package cmd
import (
"crypto/rand"
"errors"
"log"
"os"
"github.com/asdine/storm"
@ -61,21 +61,6 @@ func mustGetUint(cmd *cobra.Command, flag string) uint {
return b
}
func getDB() *storm.DB {
databasePath := v.GetString("database")
if _, err := os.Stat(databasePath); err != nil {
panic(errors.New(databasePath + " does not exist. Please run 'filebrowser init' first."))
}
db, err := storm.Open(databasePath)
checkErr(err)
return db
}
func getStorage(db *storm.DB) *storage.Storage {
return bolt.NewStorage(db)
}
func generateRandomBytes(n int) []byte {
b := make([]byte, n)
_, err := rand.Read(b)
@ -83,3 +68,42 @@ func generateRandomBytes(n int) []byte {
// Note that err == nil only if we read len(b) bytes.
return b
}
type cobraFunc func(cmd *cobra.Command, args []string)
type pythonFunc func(cmd *cobra.Command, args []string, data pythonData)
type pythonConfig struct {
noDB bool
}
type pythonData struct {
hadDB bool
store *storage.Storage
}
func python(fn pythonFunc, cfg pythonConfig) cobraFunc {
return func(cmd *cobra.Command, args []string) {
data := pythonData{hadDB: true}
path := v.GetString("database")
_, err := os.Stat(path)
if os.IsNotExist(err) {
data.hadDB = false
if !cfg.noDB {
log.Fatal(path + " does not exid.store. Please run 'filebrowser config init' fird.store.")
}
} else if err != nil {
panic(err)
} else if err == nil && cfg.noDB {
log.Fatal(path + " already exists")
}
db, err := storm.Open(path)
checkErr(err)
defer db.Close()
data.store = bolt.NewStorage(db)
fn(cmd, args, data)
}
}