allow us to specify paths and files in the configuration relative to the directory the configuration file is in

This commit is contained in:
2026-03-05 17:29:18 -07:00
parent 39ca13817e
commit f5360772ca
7 changed files with 56 additions and 35 deletions
+6 -5
View File
@@ -88,20 +88,21 @@ var extDialogs fs.FS = nil
// setupDialogs sets up the external dialog filesystem.
func setupDialogs() {
// Open the external dialog path.
if config.GlobalConfig.Resources.DialogTemplateDir != "" {
finfo, err := os.Stat(config.GlobalConfig.Resources.DialogTemplateDir)
dtDir := config.GlobalConfig.ExPath(config.GlobalConfig.Resources.DialogTemplateDir)
if dtDir != "" {
finfo, err := os.Stat(dtDir)
if err == nil {
if finfo.IsDir() {
root, err := os.OpenRoot(config.GlobalConfig.Resources.DialogTemplateDir)
root, err := os.OpenRoot(dtDir)
if err != nil {
panic(err)
}
extDialogs = root.FS()
} else {
log.Errorf("external resource path \"%s\" is not a directory, ignored", config.GlobalConfig.Resources.DialogTemplateDir)
log.Errorf("external resource path \"%s\" is not a directory, ignored", dtDir)
}
} else {
log.Errorf("external resource path \"%s\" is not valid, ignored (%v)", config.GlobalConfig.Resources.DialogTemplateDir, err)
log.Errorf("external resource path \"%s\" is not valid, ignored (%v)", dtDir, err)
}
}
}
+5 -4
View File
@@ -164,8 +164,9 @@ func setupMenus() {
if menuCache, err = lru.New(config.GlobalConfig.Tuning.Caches.Menus); err != nil {
panic(err)
}
if config.GlobalConfig.Resources.ExternalMenuDefinitions != "" {
b, err := os.ReadFile(config.GlobalConfig.Resources.ExternalMenuDefinitions)
mfile := config.GlobalConfig.ExPath(config.GlobalConfig.Resources.ExternalMenuDefinitions)
if mfile != "" {
b, err := os.ReadFile(mfile)
if err == nil {
md := new(MenuDefs)
err = yaml.Unmarshal(b, md)
@@ -177,10 +178,10 @@ func setupMenus() {
}
}
} else {
log.Errorf("cannot parse external menu definition file %s, ignored (%v)", config.GlobalConfig.Resources.ExternalMenuDefinitions, err)
log.Errorf("cannot parse external menu definition file %s, ignored (%v)", mfile, err)
}
} else {
log.Errorf("cannot read external menu definition file %s, ignored (%v)", config.GlobalConfig.Resources.ExternalMenuDefinitions, err)
log.Errorf("cannot read external menu definition file %s, ignored (%v)", mfile, err)
}
}
}
+5 -4
View File
@@ -85,8 +85,9 @@ func init() {
// setupMessageBoxes loads external message box definitions.
func setupMessageBoxes() {
if config.GlobalConfig.Resources.ExternalMessageDefinitions != "" {
b, err := os.ReadFile(config.GlobalConfig.Resources.ExternalMessageDefinitions)
mbfile := config.GlobalConfig.ExPath(config.GlobalConfig.Resources.ExternalMessageDefinitions)
if mbfile != "" {
b, err := os.ReadFile(mbfile)
if err == nil {
mb := new(MessageBoxDefs)
err = yaml.Unmarshal(b, mb)
@@ -102,10 +103,10 @@ func setupMessageBoxes() {
}
}
} else {
log.Errorf("cannot parse external message definition file %s, ignored (%v)", config.GlobalConfig.Resources.ExternalMessageDefinitions, err)
log.Errorf("cannot parse external message definition file %s, ignored (%v)", mbfile, err)
}
} else {
log.Errorf("cannot read external message definition file %s, ignored (%v)", config.GlobalConfig.Resources.ExternalMessageDefinitions, err)
log.Errorf("cannot read external message definition file %s, ignored (%v)", mbfile, err)
}
}
}
+6 -5
View File
@@ -37,20 +37,21 @@ var external_resources fs.FS = nil
func setupResources() {
// Open the external resource path.
if config.GlobalConfig.Resources.ExternalResourcePath != "" {
finfo, err := os.Stat(config.GlobalConfig.Resources.ExternalResourcePath)
rpath := config.GlobalConfig.ExPath(config.GlobalConfig.Resources.ExternalResourcePath)
if rpath != "" {
finfo, err := os.Stat(rpath)
if err == nil {
if finfo.IsDir() {
root, err := os.OpenRoot(config.GlobalConfig.Resources.ExternalResourcePath)
root, err := os.OpenRoot(rpath)
if err != nil {
panic(err)
}
external_resources = root.FS()
} else {
log.Errorf("external resource path \"%s\" is not a directory, ignored", config.GlobalConfig.Resources.ExternalResourcePath)
log.Errorf("external resource path \"%s\" is not a directory, ignored", rpath)
}
} else {
log.Errorf("external resource path \"%s\" is not valid, ignored (%v)", config.GlobalConfig.Resources.ExternalResourcePath, err)
log.Errorf("external resource path \"%s\" is not valid, ignored (%v)", rpath, err)
}
}
}
+6 -5
View File
@@ -287,16 +287,17 @@ func postRewrite(a jet.Arguments) reflect.Value {
func setupTemplates() {
// Set up the template loaders: the optional filesystem loader, then the embedded loader.
templateLoaders := make([]jet.Loader, 0, 2)
if config.GlobalConfig.Resources.ViewTemplateDir != "" {
finfo, err := os.Stat(config.GlobalConfig.Resources.ViewTemplateDir)
vtDir := config.GlobalConfig.ExPath(config.GlobalConfig.Resources.ViewTemplateDir)
if vtDir != "" {
finfo, err := os.Stat(vtDir)
if err == nil {
if finfo.IsDir() {
templateLoaders = append(templateLoaders, jet.NewOSFileSystemLoader(config.GlobalConfig.Resources.ViewTemplateDir))
templateLoaders = append(templateLoaders, jet.NewOSFileSystemLoader(vtDir))
} else {
log.Errorf("view template directory %s is not a directory, ignored", config.GlobalConfig.Resources.ViewTemplateDir)
log.Errorf("view template directory %s is not a directory, ignored", vtDir)
}
} else {
log.Errorf("view template directory %s is not valid, ignored (%v)", config.GlobalConfig.Resources.ViewTemplateDir, err)
log.Errorf("view template directory %s is not valid, ignored (%v)", vtDir, err)
}
}
templateLoaders = append(templateLoaders, embedfs.NewLoader("views/", static_views))