config

package
v2.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 25, 2025 License: GPL-3.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AppName              = "zaparoo"
	MediaDbFile          = "media.db"
	UserDbFile           = "user.db"
	LogFile              = "core.log"
	PidFile              = "core.pid"
	CfgFile              = "config.toml"
	AuthFile             = "auth.toml"
	UserDir              = "user"
	LogsDir              = "logs"
	APIRequestTimeout    = 30 * time.Second
	SuccessSoundFilename = "success.wav"
	FailSoundFilename    = "fail.wav"
	LimitSoundFilename   = "limit.wav"
	AssetsDir            = "assets"
	MappingsDir          = "mappings"
	LaunchersDir         = "launchers"
	MediaDir             = "media"
)
View Source
const (
	SchemaVersion = 1
	CfgEnv        = "ZAPAROO_CFG"
	AppEnv        = "ZAPAROO_APP"
	ScanModeTap   = "tap"
	ScanModeHold  = "hold"
)
View Source
const DefaultAPIPort = 7497

Variables

View Source
var AppVersion = "DEVELOPMENT"
View Source
var BaseDefaults = Values{
	ConfigSchema: SchemaVersion,
	Audio: Audio{
		ScanFeedback: true,
	},
	Readers: Readers{
		AutoDetect: true,
		Scan: ReadersScan{
			Mode: ScanModeTap,
		},
	},
	Service: Service{
		APIPort: DefaultAPIPort,
	},
	Groovy: Groovy{
		GmcProxyEnabled:        false,
		GmcProxyPort:           32106,
		GmcProxyBeaconInterval: "2s",
	},
}

Functions

func ClearAuthCfgForTesting

func ClearAuthCfgForTesting()

ClearAuthCfgForTesting clears the global auth config for testing purposes

func SetAuthCfgForTesting

func SetAuthCfgForTesting(auth Auth)

SetAuthCfgForTesting sets the global auth config for testing purposes

Types

type Audio

type Audio struct {
	SuccessSound *string `toml:"success_sound,omitempty"`
	FailSound    *string `toml:"fail_sound,omitempty"`
	LimitSound   *string `toml:"limit_sound,omitempty"`
	ScanFeedback bool    `toml:"scan_feedback,omitempty"`
}

type Auth

type Auth struct {
	Creds map[string]CredentialEntry `toml:"creds,omitempty"`
}

func GetAuthCfg

func GetAuthCfg() Auth

type CredentialEntry

type CredentialEntry struct {
	Username string `toml:"username"`
	Password string `toml:"password"`
	Bearer   string `toml:"bearer"`
}

func LookupAuth

func LookupAuth(authCfg Auth, reqURL string) *CredentialEntry

type DriverConfig

type DriverConfig struct {
	Enabled    *bool `toml:"enabled,omitempty"`
	AutoDetect *bool `toml:"auto_detect,omitempty"`
}

type Groovy

type Groovy struct {
	GmcProxyBeaconInterval string `toml:"gmc_proxy_beacon_interval"`
	GmcProxyPort           int    `toml:"gmc_proxy_port"`
	GmcProxyEnabled        bool   `toml:"gmc_proxy_enabled"`
}

type Instance

type Instance struct {
	// contains filtered or unexported fields
}

func NewConfig

func NewConfig(configDir string, defaults Values) (*Instance, error)

func (*Instance) APIListen added in v2.7.0

func (c *Instance) APIListen() string

func (*Instance) APIPort

func (c *Instance) APIPort() int

func (*Instance) AllowedIPs added in v2.7.0

func (c *Instance) AllowedIPs() []string

func (*Instance) AllowedOrigins

func (c *Instance) AllowedOrigins() []string

func (*Instance) AudioFeedback

func (c *Instance) AudioFeedback() bool

func (*Instance) AutoDetect

func (c *Instance) AutoDetect() bool

func (*Instance) CustomLaunchers

func (c *Instance) CustomLaunchers() []LaunchersCustom

func (*Instance) DailyLimit added in v2.7.0

func (c *Instance) DailyLimit() time.Duration

DailyLimit returns the daily time limit as a duration. Returns 0 if not configured or if the duration cannot be parsed.

func (*Instance) DebugLogging

func (c *Instance) DebugLogging() bool

func (*Instance) DefaultLangs added in v2.7.0

func (c *Instance) DefaultLangs() []string

DefaultLangs returns the list of default languages for media matching.

func (*Instance) DefaultMediaDir

func (c *Instance) DefaultMediaDir() string

func (*Instance) DefaultRegions added in v2.7.0

func (c *Instance) DefaultRegions() []string

DefaultRegions returns the list of default regions for media matching.

func (*Instance) FailSoundPath added in v2.7.0

func (c *Instance) FailSoundPath(dataDir string) (string, bool)

FailSoundPath returns the resolved path to the fail sound file and whether it's enabled. Returns ("", true) if nil (use embedded default), ("", false) if disabled (empty string), or (resolved_path, true) if a custom path is configured. For relative paths, dataDir is used as the base (typically helpers.DataDir(pl)).

func (*Instance) FilenameTags added in v2.7.0

func (c *Instance) FilenameTags() bool

FilenameTags returns whether filename tag parsing is enabled.

func (*Instance) GetMQTTPublishers added in v2.7.0

func (c *Instance) GetMQTTPublishers() []MQTTPublisher

func (*Instance) GmcProxyBeaconInterval

func (c *Instance) GmcProxyBeaconInterval() string

func (*Instance) GmcProxyEnabled

func (c *Instance) GmcProxyEnabled() bool

func (*Instance) GmcProxyPort

func (c *Instance) GmcProxyPort() int

func (*Instance) HoldModeEnabled

func (c *Instance) HoldModeEnabled() bool

func (*Instance) IndexRoots

func (c *Instance) IndexRoots() []string

func (*Instance) IsDriverAutoDetectEnabled

func (c *Instance) IsDriverAutoDetectEnabled(driverID string, defaultAutoDetect bool) bool

func (*Instance) IsDriverEnabled

func (c *Instance) IsDriverEnabled(driverID string, defaultEnabled bool) bool

func (*Instance) IsExecuteAllowed

func (c *Instance) IsExecuteAllowed(s string) bool

func (*Instance) IsHoldModeIgnoredSystem

func (c *Instance) IsHoldModeIgnoredSystem(systemID string) bool

func (*Instance) IsLauncherFileAllowed

func (c *Instance) IsLauncherFileAllowed(s string) bool

func (*Instance) IsRunAllowed

func (c *Instance) IsRunAllowed(s string) bool

func (*Instance) LaunchersOnMediaStart

func (c *Instance) LaunchersOnMediaStart() string

func (*Instance) LimitSoundPath added in v2.7.0

func (c *Instance) LimitSoundPath(dataDir string) (string, bool)

LimitSoundPath returns the resolved path to the limit sound file and whether it's enabled. Returns ("", true) if nil (use embedded default), ("", false) if disabled (empty string), or (resolved_path, true) if a custom path is configured. For relative paths, dataDir is used as the base (typically helpers.DataDir(pl)).

func (*Instance) Load

func (c *Instance) Load() error

func (*Instance) LoadCustomLaunchers

func (c *Instance) LoadCustomLaunchers(launchersDir string) error

func (*Instance) LoadMappings

func (c *Instance) LoadMappings(mappingsDir string) error

func (*Instance) LookupLauncherDefaults

func (c *Instance) LookupLauncherDefaults(launcherID string) (LaunchersDefault, bool)

func (*Instance) LookupSystemDefaults

func (c *Instance) LookupSystemDefaults(systemID string) (SystemsDefault, bool)

func (*Instance) Mappings

func (c *Instance) Mappings() []MappingsEntry

func (*Instance) PlaytimeLimitsEnabled added in v2.7.0

func (c *Instance) PlaytimeLimitsEnabled() bool

PlaytimeLimitsEnabled returns true if play time limits are enabled.

func (*Instance) PlaytimeRetention added in v2.7.0

func (c *Instance) PlaytimeRetention() int

PlaytimeRetention returns the number of days to retain play time history. Returns 0 if cleanup is disabled, or 365 (1 year) by default.

func (*Instance) Readers

func (c *Instance) Readers() Readers

func (*Instance) ReadersScan

func (c *Instance) ReadersScan() ReadersScan

func (*Instance) Save

func (c *Instance) Save() error

func (*Instance) ScanHistory added in v2.7.0

func (c *Instance) ScanHistory() int

func (*Instance) SessionLimit added in v2.7.0

func (c *Instance) SessionLimit() time.Duration

SessionLimit returns the per-session time limit as a duration. Returns 0 if not configured or if the duration cannot be parsed.

func (*Instance) SessionResetTimeout added in v2.7.0

func (c *Instance) SessionResetTimeout() time.Duration

SessionResetTimeout returns the idle timeout before a session resets. Returns 20 minutes by default if not configured (nil). Returns 0 if explicitly set to "0" (no timeout, session never resets).

func (*Instance) SetAudioFeedback

func (c *Instance) SetAudioFeedback(enabled bool)

func (*Instance) SetAutoDetect

func (c *Instance) SetAutoDetect(enabled bool)

func (*Instance) SetDailyLimit added in v2.7.0

func (c *Instance) SetDailyLimit(duration string) error

SetDailyLimit sets the daily time limit from a duration string (e.g., "2h30m"). Returns an error if the duration string is invalid. Pass empty string to disable daily limit.

func (*Instance) SetDebugLogging

func (c *Instance) SetDebugLogging(enabled bool)

func (*Instance) SetFilenameTags added in v2.7.0

func (c *Instance) SetFilenameTags(enabled bool)

SetFilenameTags sets whether filename tag parsing is enabled.

func (*Instance) SetPlaytimeLimitsEnabled added in v2.7.0

func (c *Instance) SetPlaytimeLimitsEnabled(enabled bool)

SetPlaytimeLimitsEnabled enables or disables playtime limits.

func (*Instance) SetPlaytimeRetention added in v2.7.0

func (c *Instance) SetPlaytimeRetention(days int)

SetPlaytimeRetention sets the number of days to retain play time history. Pass 0 to disable cleanup.

func (*Instance) SetReaderConnections

func (c *Instance) SetReaderConnections(rcs []ReadersConnect)

func (*Instance) SetScanExitDelay

func (c *Instance) SetScanExitDelay(exitDelay float32)

func (*Instance) SetScanIgnoreSystem

func (c *Instance) SetScanIgnoreSystem(ignoreSystem []string)

func (*Instance) SetScanMode

func (c *Instance) SetScanMode(mode string)

func (*Instance) SetSessionLimit added in v2.7.0

func (c *Instance) SetSessionLimit(duration string) error

SetSessionLimit sets the session time limit from a duration string (e.g., "45m"). Returns an error if the duration string is invalid. Pass empty string to disable session limit.

func (*Instance) SetSessionResetTimeout added in v2.7.0

func (c *Instance) SetSessionResetTimeout(duration *string) error

SetSessionResetTimeout sets the idle timeout before a session resets (e.g., "20m", "1h", "0"). Returns an error if the duration string is invalid. Pass nil to use default (20 minutes). Pass "0" to disable session reset timeout.

func (*Instance) SetSystemDefaultsForTesting added in v2.7.0

func (c *Instance) SetSystemDefaultsForTesting(defaults []SystemsDefault)

SetSystemDefaultsForTesting sets system defaults for testing purposes

func (*Instance) SetWarningIntervals added in v2.7.0

func (c *Instance) SetWarningIntervals(intervals []string) error

SetWarningIntervals sets the warning intervals from duration strings (e.g., ["10m", "5m", "2m"]). Returns an error if any duration string is invalid. Pass empty slice to use defaults [5m, 2m, 1m].

func (*Instance) SuccessSoundPath added in v2.7.0

func (c *Instance) SuccessSoundPath(dataDir string) (string, bool)

SuccessSoundPath returns the resolved path to the success sound file and whether it's enabled. Returns ("", true) if nil (use embedded default), ("", false) if disabled (empty string), or (resolved_path, true) if a custom path is configured. For relative paths, dataDir is used as the base (typically helpers.DataDir(pl)).

func (*Instance) SystemDefaults

func (c *Instance) SystemDefaults() []SystemsDefault

func (*Instance) TapModeEnabled

func (c *Instance) TapModeEnabled() bool

func (*Instance) WarningIntervals added in v2.7.0

func (c *Instance) WarningIntervals() []time.Duration

WarningIntervals returns the warning intervals as durations. Returns default intervals [5m, 2m, 1m] if not configured. Skips any intervals that cannot be parsed.

type Launchers

type Launchers struct {
	IndexRoot []string `toml:"index_root,omitempty,multiline"`
	AllowFile []string `toml:"allow_file,omitempty,multiline"`

	MediaDir     string             `toml:"media_dir,omitempty"`
	OnMediaStart string             `toml:"on_media_start,omitempty"`
	Default      []LaunchersDefault `toml:"default,omitempty"`
	Custom       []LaunchersCustom  `toml:"custom,omitempty"`
	// contains filtered or unexported fields
}

type LaunchersCustom

type LaunchersCustom struct {
	ID        string   `toml:"id"`
	System    string   `toml:"system"`
	Execute   string   `toml:"execute"`
	MediaDirs []string `toml:"media_dirs"`
	FileExts  []string `toml:"file_exts"`
}

type LaunchersDefault

type LaunchersDefault struct {
	Launcher   string `toml:"launcher"`
	InstallDir string `toml:"install_dir,omitempty"`
	ServerURL  string `toml:"server_url,omitempty"`
}

type MQTTPublisher added in v2.7.0

type MQTTPublisher struct {
	Enabled *bool    `toml:"enabled,omitempty"`
	Broker  string   `toml:"broker"`
	Topic   string   `toml:"topic"`
	Filter  []string `toml:"filter,omitempty,multiline"`
}

type Mappings

type Mappings struct {
	Entry []MappingsEntry `toml:"entry,omitempty"`
}

type MappingsEntry

type MappingsEntry struct {
	TokenKey     string `toml:"token_key,omitempty"`
	MatchPattern string `toml:"match_pattern"`
	ZapScript    string `toml:"zapscript"`
}

type Media added in v2.7.0

type Media struct {
	FilenameTags   *bool    `toml:"filename_tags,omitempty"`
	DefaultRegions []string `toml:"default_regions,omitempty,multiline"`
	DefaultLangs   []string `toml:"default_langs,omitempty,multiline"`
}

type Playtime added in v2.7.0

type Playtime struct {
	Retention *int           `toml:"retention,omitempty"`
	Limits    PlaytimeLimits `toml:"limits,omitempty"`
}

Playtime configures play time tracking and limits.

type PlaytimeLimits added in v2.7.0

type PlaytimeLimits struct {
	Enabled      *bool    `toml:"enabled,omitempty"`
	Daily        string   `toml:"daily,omitempty"`
	Session      string   `toml:"session,omitempty"`
	SessionReset *string  `toml:"session_reset,omitempty"`
	Warnings     []string `toml:"warnings,omitempty,multiline"`
}

PlaytimeLimits configures time limits and warnings for gameplay sessions.

type Publishers added in v2.7.0

type Publishers struct {
	MQTT []MQTTPublisher `toml:"mqtt,omitempty"`
}

type Readers

type Readers struct {
	Drivers     map[string]DriverConfig `toml:"drivers,omitempty"`
	ScanHistory *int                    `toml:"scan_history,omitempty"`
	Connect     []ReadersConnect        `toml:"connect,omitempty"`
	Scan        ReadersScan             `toml:"scan,omitempty"`
	AutoDetect  bool                    `toml:"auto_detect"`
}

type ReadersConnect

type ReadersConnect struct {
	Driver   string `toml:"driver"`
	Path     string `toml:"path,omitempty"`
	IDSource string `toml:"id_source,omitempty"`
}

func (ReadersConnect) ConnectionString

func (r ReadersConnect) ConnectionString() string

type ReadersScan

type ReadersScan struct {
	Mode         string   `toml:"mode"`
	OnScan       string   `toml:"on_scan,omitempty"`
	OnRemove     string   `toml:"on_remove,omitempty"`
	IgnoreSystem []string `toml:"ignore_system,omitempty"`
	ExitDelay    float32  `toml:"exit_delay,omitempty"`
}

type Service

type Service struct {
	DeviceID  string   `toml:"device_id"`
	APIListen string   `toml:"api_listen,omitempty"`
	AllowRun  []string `toml:"allow_run,omitempty,multiline"`

	AllowedOrigins []string   `toml:"allowed_origins,omitempty"`
	AllowedIPs     []string   `toml:"allowed_ips,omitempty"`
	Publishers     Publishers `toml:"publishers,omitempty"`
	APIPort        int        `toml:"api_port"`
	// contains filtered or unexported fields
}

type Systems

type Systems struct {
	Default []SystemsDefault `toml:"default,omitempty"`
}

type SystemsDefault

type SystemsDefault struct {
	System     string `toml:"system"`
	Launcher   string `toml:"launcher,omitempty"`
	BeforeExit string `toml:"before_exit,omitempty"`
}

type Values

type Values struct {
	Audio        Audio     `toml:"audio,omitempty"`
	Launchers    Launchers `toml:"launchers,omitempty"`
	Media        Media     `toml:"media,omitempty"`
	Playtime     Playtime  `toml:"playtime,omitempty"`
	ZapScript    ZapScript `toml:"zapscript,omitempty"`
	Systems      Systems   `toml:"systems,omitempty"`
	Mappings     Mappings  `toml:"mappings,omitempty"`
	Service      Service   `toml:"service,omitempty"`
	Groovy       Groovy    `toml:"groovy,omitempty"`
	Readers      Readers   `toml:"readers,omitempty"`
	ConfigSchema int       `toml:"config_schema"`
	DebugLogging bool      `toml:"debug_logging"`
}

type ZapScript

type ZapScript struct {
	AllowExecute []string `toml:"allow_execute,omitempty,multiline"`
	// contains filtered or unexported fields
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL