54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
|
|
"github.com/mathismqn/godeez/internal/config"
|
|
"github.com/mathismqn/godeez/internal/fileutil"
|
|
"github.com/mathismqn/godeez/internal/store"
|
|
)
|
|
|
|
type Context struct {
|
|
AppDir string
|
|
Config *config.Config
|
|
}
|
|
|
|
func NewContext(cfgPath string) (*Context, error) {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get home directory: %w", err)
|
|
}
|
|
|
|
cfgDir := filepath.Join(home, ".godeez")
|
|
if err := fileutil.EnsureDir(cfgDir); err != nil {
|
|
return nil, fmt.Errorf("failed to create config directory: %w", err)
|
|
}
|
|
|
|
musicDir := filepath.Join(home, "Music")
|
|
if err := fileutil.EnsureDir(musicDir); err != nil {
|
|
return nil, fmt.Errorf("failed to create music directory: %w", err)
|
|
}
|
|
|
|
appDir := path.Join(musicDir, "GoDeez")
|
|
if err := fileutil.EnsureDir(appDir); err != nil {
|
|
return nil, fmt.Errorf("failed to create app directory: %w", err)
|
|
}
|
|
|
|
cfg, err := config.New(cfgPath, cfgDir)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := store.OpenDB(cfgDir); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Context{
|
|
AppDir: appDir,
|
|
Config: cfg,
|
|
}, nil
|
|
}
|