library picker lit element w reactive properties
This commit is contained in:
@@ -16,6 +16,10 @@ type Config struct {
|
||||
}
|
||||
|
||||
func newConfig(filePath string, data *configData) (*Config, error) {
|
||||
conf := &Config{
|
||||
filePath: filePath,
|
||||
configData: data,
|
||||
}
|
||||
// TODO make sure required fields have SOMETHING in them
|
||||
// TODO Merge existing config with read in config
|
||||
if data == nil {
|
||||
@@ -24,10 +28,7 @@ func newConfig(filePath string, data *configData) (*Config, error) {
|
||||
if err := data.validate(); err != nil {
|
||||
return nil, fmt.Errorf("invalid config: %w", err)
|
||||
}
|
||||
return &Config{
|
||||
filePath: filePath,
|
||||
configData: data,
|
||||
}, nil
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
type configData struct {
|
||||
@@ -40,7 +41,7 @@ func (d *configData) validate() error {
|
||||
return errors.New("nil library config")
|
||||
}
|
||||
if err := d.Library.Validate(); err != nil {
|
||||
return fmt.Errorf("invalid library config: %s\n%w", d.Library, err)
|
||||
return fmt.Errorf("invalid library config: %#v: %w", d.Library, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -59,7 +60,7 @@ func GetCurrentConfig() (*Config, error) {
|
||||
}
|
||||
configFilePath := path.Join(configDir, "config.toml")
|
||||
|
||||
// create the config obj with the filepath we got
|
||||
// create the config obj with the filepath we got, initializing with default data
|
||||
config, err := newConfig(configFilePath, defaultConfigData)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not create new config: %w", err)
|
||||
@@ -80,6 +81,12 @@ func GetCurrentConfig() (*Config, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not load config file %s: %w", configFilePath, err)
|
||||
}
|
||||
|
||||
// before we return the config, lets make sure sub configs can invoke saving when they need
|
||||
err = config.updateSubConfigSaveFuncReferences()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not update sub config save func references: %w", err)
|
||||
}
|
||||
return config, nil
|
||||
}
|
||||
|
||||
@@ -107,6 +114,12 @@ func (c *Config) loadConfig() (*Config, error) {
|
||||
return nil, fmt.Errorf("could not create config from config file data at %s: %w", c.filePath, err)
|
||||
}
|
||||
|
||||
// before we return the config, lets make sure sub configs can invoke saving when they need
|
||||
err = config.updateSubConfigSaveFuncReferences()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not update sub config save func references: %w", err)
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
@@ -125,3 +138,8 @@ func (c *Config) WriteConfig() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) updateSubConfigSaveFuncReferences() error {
|
||||
c.Library.SaveFunc = c.WriteConfig
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -3,10 +3,12 @@ package library
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
DirectoryPath string
|
||||
SaveFunc func() error `toml:"-"`
|
||||
}
|
||||
|
||||
func (c *Config) Validate() error {
|
||||
@@ -27,7 +29,7 @@ func NewLibrary(conf *Config) (*Library, error) {
|
||||
return nil, fmt.Errorf("nil config for library")
|
||||
}
|
||||
if err := conf.Validate(); err != nil {
|
||||
return nil, fmt.Errorf("invalid library config %s\n%w", conf, err)
|
||||
return nil, fmt.Errorf("invalid library config %#v: %w", conf, err)
|
||||
}
|
||||
return &Library{
|
||||
conf: conf,
|
||||
@@ -42,3 +44,20 @@ func (l *Library) Init(ctx context.Context) error {
|
||||
func (l *Library) GetDir() (string, error) {
|
||||
return l.conf.DirectoryPath, nil
|
||||
}
|
||||
|
||||
func (l *Library) SetDir(dirPath string) error {
|
||||
fileInfo, err := os.Stat(dirPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not stat %s: %w", dirPath, err)
|
||||
}
|
||||
if !fileInfo.IsDir() {
|
||||
return fmt.Errorf("dirPath is not a directory: %s", dirPath)
|
||||
}
|
||||
|
||||
l.conf.DirectoryPath = dirPath
|
||||
err = l.conf.SaveFunc()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not save library dir config: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user