bolt: support adding/removing child buckets
This commit is contained in:
parent
975e120530
commit
15b29b32ce
48
db_bolt.go
48
db_bolt.go
@ -94,8 +94,52 @@ func (ld *boltLoadedDatabase) NavChildren(ndata *navData) ([]string, error) {
|
||||
return boltChildBucketNames(ld.db, ndata.bucketPath)
|
||||
}
|
||||
|
||||
func (ld *boltLoadedDatabase) NavContext(ndata *navData) ([]contextAction, error) {
|
||||
return nil, nil // No special actions are supported
|
||||
func (ld *boltLoadedDatabase) NavContext(ndata *navData) (ret []contextAction, err error) {
|
||||
ret = append(ret, contextAction{"Add bucket...", ld.AddChildBucket})
|
||||
|
||||
if len(ndata.bucketPath) > 0 {
|
||||
ret = append(ret, contextAction{"Delete bucket", ld.DeleteBucket})
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (ld *boltLoadedDatabase) AddChildBucket(ndata *navData) {
|
||||
bucketName := ""
|
||||
if !vcl.InputQuery(APPNAME, "Enter a name for the new bucket:", &bucketName) {
|
||||
return // cancel
|
||||
}
|
||||
|
||||
err := ld.db.Update(func(tx *bbolt.Tx) error {
|
||||
parent := boltTargetBucket(tx, ndata.bucketPath)
|
||||
if parent != nil {
|
||||
_, err := parent.CreateBucket([]byte(bucketName))
|
||||
return err
|
||||
}
|
||||
|
||||
// Top-level
|
||||
_, err := tx.CreateBucket([]byte(bucketName))
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
vcl.ShowMessageFmt("Error adding bucket: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (ld *boltLoadedDatabase) DeleteBucket(ndata *navData) {
|
||||
err := ld.db.Update(func(tx *bbolt.Tx) error {
|
||||
// Find parent of this bucket.
|
||||
if len(ndata.bucketPath) >= 2 {
|
||||
// child bucket
|
||||
parent := boltTargetBucket(tx, ndata.bucketPath[0:len(ndata.bucketPath)-1])
|
||||
return parent.DeleteBucket([]byte(ndata.bucketPath[len(ndata.bucketPath)-1]))
|
||||
} else {
|
||||
// top-level bucket
|
||||
return tx.DeleteBucket([]byte(ndata.bucketPath[0]))
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
vcl.ShowMessageFmt("Error deleting bucket %q: %v", strings.Join(ndata.bucketPath, `/`), err)
|
||||
}
|
||||
}
|
||||
|
||||
func (ld *boltLoadedDatabase) ExecQuery(query string, resultArea *vcl.TListView) {
|
||||
|
Loading…
Reference in New Issue
Block a user