79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
package util
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"go.etcd.io/bbolt"
|
|
)
|
|
|
|
var bucket *bbolt.DB
|
|
|
|
func InitBBolt() error {
|
|
// 初始化bbolt数据库的逻辑
|
|
// ensure directory exists before opening DB
|
|
dbPath := "runtime/data.db"
|
|
if err := os.MkdirAll(filepath.Dir(dbPath), 0o755); err != nil {
|
|
return err
|
|
}
|
|
db, err := bbolt.Open(dbPath, 0600, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// keep the DB open for the package lifecycle
|
|
bucket = db
|
|
|
|
// ensure the "kv" bucket exists
|
|
err = bucket.Update(func(tx *bbolt.Tx) error {
|
|
_, err := tx.CreateBucketIfNotExists([]byte("kv"))
|
|
return err
|
|
})
|
|
if err != nil {
|
|
// cleanup on failure to initialize buckets
|
|
_ = bucket.Close()
|
|
bucket = nil
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func saveBBolt(key string, value interface{}) error {
|
|
newValue := String(value)
|
|
err := bucket.Update(func(tx *bbolt.Tx) error {
|
|
b := tx.Bucket([]byte("kv"))
|
|
return b.Put([]byte(key), []byte(newValue))
|
|
})
|
|
return err
|
|
}
|
|
|
|
func getBBolt(key string) (string, error) {
|
|
var value string
|
|
err := bucket.View(func(tx *bbolt.Tx) error {
|
|
b := tx.Bucket([]byte("kv"))
|
|
v := b.Get([]byte(key))
|
|
value = string(v)
|
|
return nil
|
|
})
|
|
return value, err
|
|
}
|
|
|
|
func SaveLanguageLastUpdate(timestamp interface{}) error {
|
|
return saveBBolt("language_last_update", timestamp)
|
|
}
|
|
|
|
func GetLanguageLastUpdate() (int, error) {
|
|
v, e := getBBolt("language_last_update")
|
|
return Int(v), e
|
|
}
|
|
|
|
func SaveLanguageExportLastUpdate(timestamp interface{}) error {
|
|
return saveBBolt("language_export_last_update", timestamp)
|
|
}
|
|
|
|
func GetLanguageExportLastUpdate() (int, error) {
|
|
v, e := getBBolt("language_export_last_update")
|
|
return Int(v), e
|
|
}
|