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() b.Store.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 { // TODO: based on config, open filestore or db store stor, err := storage.OpenFileStore(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 }