61 lines
964 B
Go
61 lines
964 B
Go
|
package blas
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"os"
|
||
|
"path"
|
||
|
"strings"
|
||
|
|
||
|
"dynatron.me/x/blasphem/internal/common"
|
||
|
"dynatron.me/x/blasphem/pkg/bus"
|
||
|
"dynatron.me/x/blasphem/pkg/config"
|
||
|
"dynatron.me/x/blasphem/pkg/storage"
|
||
|
)
|
||
|
|
||
|
type Blas struct {
|
||
|
*bus.Bus
|
||
|
storage.Store
|
||
|
Config *config.Config
|
||
|
}
|
||
|
|
||
|
func (b *Blas) Shutdown(ctx context.Context) error {
|
||
|
b.Bus.Shutdown()
|
||
|
return ctx.Err()
|
||
|
}
|
||
|
|
||
|
func (b *Blas) ConfigDir() (cd string) {
|
||
|
if b.Config.DataDir != nil {
|
||
|
cd = *b.Config.DataDir
|
||
|
}
|
||
|
|
||
|
home, err := os.UserHomeDir()
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
switch {
|
||
|
case cd == "":
|
||
|
return path.Join(home, "."+common.AppName)
|
||
|
case strings.HasPrefix(cd, "~/"):
|
||
|
return path.Join(home, cd[2:])
|
||
|
default:
|
||
|
return cd
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (b *Blas) openStore() error {
|
||
|
stor, err := storage.Open(os.DirFS(b.ConfigDir()))
|
||
|
b.Store = stor
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func New(cfg *config.Config) (*Blas, error) {
|
||
|
b := &Blas{
|
||
|
Bus: bus.New(),
|
||
|
Config: cfg,
|
||
|
}
|
||
|
|
||
|
err := b.openStore()
|
||
|
return b, err
|
||
|
}
|