package storage import ( "context" "fmt" "os" "path" "git.defalsify.org/vise.git/db" fsdb "git.defalsify.org/vise.git/db/fs" gdbmdb "git.defalsify.org/vise.git/db/gdbm" "git.defalsify.org/vise.git/persist" "git.defalsify.org/vise.git/resource" ) func ensureDbDir(dbDir string) error { err := os.MkdirAll(dbDir, 0700) if err != nil { return fmt.Errorf("state dir create exited with error: %v\n", err) } return nil } type StorageService interface { GetPersister(dbDir string, ctx context.Context) (*persist.Persister, error) GetUserdataDb(dbDir string, ctx context.Context) db.Db GetResource(resourceDir string, ctx context.Context) (resource.Resource, error) EnsureDbDir(dbDir string) error } type MenuStorageService struct{} func (menuStorageService *MenuStorageService) GetPersister(dbDir string, ctx context.Context) (*persist.Persister, error) { err := ensureDbDir(dbDir) if err != nil { return nil, err } store := gdbmdb.NewGdbmDb() storeFile := path.Join(dbDir, "state.gdbm") store.Connect(ctx, storeFile) pr := persist.NewPersister(store) return pr, nil } func (menuStorageService *MenuStorageService) GetUserdataDb(dbDir string, ctx context.Context) db.Db { store := gdbmdb.NewGdbmDb() storeFile := path.Join(dbDir, "userdata.gdbm") store.Connect(ctx, storeFile) return store } func (menuStorageService *MenuStorageService) GetResource(resourceDir string, ctx context.Context) (resource.Resource, error) { store := fsdb.NewFsDb() err := store.Connect(ctx, resourceDir) if err != nil { return nil, err } rfs := resource.NewDbResource(store) return rfs, nil } func (menuStorageService *MenuStorageService) GetStateStore(dbDir string, ctx context.Context) (db.Db, error) { store := gdbmdb.NewGdbmDb() storeFile := path.Join(dbDir, "state.gdbm") store.Connect(ctx, storeFile) return store, nil } func (menuStorageService *MenuStorageService) EnsureDbDir(dbDir string) error { err := os.MkdirAll(dbDir, 0700) if err != nil { return fmt.Errorf("state dir create exited with error: %v\n", err) } return nil }