lamium/config.go

80 lines
1.9 KiB
Go

package main
import (
"encoding/json"
"path/filepath"
tpl "lamium/template"
util "lamium/util"
)
type (
// A Config defines settings for album generation.
Config struct {
HTMLDir string `json:"htmlDir"`
IndexHTML string `json:"indexHTML"`
IndexTitle string `json:"indexTitle"`
IndexType string `json:"indexType"`
ThemeDir string `json:"themeDir"`
Sets []tpl.Set `json:"sets"`
}
)
var (
// Example configuration.
sampleConfig = Config{
HTMLDir: "public_html",
IndexHTML: "index.html",
IndexTitle: "My Album",
IndexType: "text",
ThemeDir: "themes/nettle",
Sets: []tpl.Set{
{
Name: "set1",
ImageDir: "set1",
IndexHTML: "index.html",
Title: "Set 1",
SortOrder: "modTimeDesc",
CSSClassIframe: "frame",
CSSClassLink: "link",
CSSClassThumb: "thumb",
LightboxOn: true,
LinkType: "page",
ThumbDir: "thumbs",
ThumbWidth: 200,
ThumbHeight: 200,
ThumbPct: 0,
ThumbClip: "square",
ThumbUnifyMode: "height",
},
},
}
// Error messages.
configErr = struct {
configNotLoaded string
jsonNotSaved string
}{
configNotLoaded: "Error: config could not be loaded:",
jsonNotSaved: "Error: JSON config could not be saved:",
}
)
// genConfig outputs an example configuration file at path.
func genConfig(path string) {
conf, jsonErr := json.MarshalIndent(sampleConfig, "", " ")
if !util.HasError(jsonErr, configErr.jsonNotSaved+" "+path, true) {
util.MakeDir(filepath.Dir(path))
util.SaveFile(path, string(conf), true)
}
}
// loadConfig returns a *Config interface of settings after reading
// the configuration file at path.
func loadConfig(path string) *Config {
contents := util.LoadFile(path, true)
conf := &Config{}
json.Unmarshal([]byte(contents), &conf)
return conf
}