config

package
v3.0.0 Latest Latest
Warning

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

Go to latest
Published: Jul 13, 2026 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package config centralizes OpenDeezer's user configuration (env vars + ~/.config/opendeezer files) for the bits shared between the TUI and the GUI engine (corelib): the control API and Discord Rich Presence settings.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultDownloadDir

func DefaultDownloadDir() string

DefaultDownloadDir is where downloaded tracks land when the user hasn't chosen a folder: <home>/Music/OpenDeezer, falling back to <home>/Downloads/OpenDeezer and finally "OpenDeezer" in the working directory. Shared across every client so the default is identical everywhere.

func Dir

func Dir() (string, error)

Dir is ~/.config/opendeezer (platform UserConfigDir + "opendeezer").

func IsLoopbackAddr

func IsLoopbackAddr(addr string) bool

IsLoopbackAddr reports whether a host:port binds only the loopback interface.

func LanguageSetting

func LanguageSetting() string

LanguageSetting returns ONLY the persisted language file (~/.config/opendeezer/ language.txt), ignoring $OPENDEEZER_LANG. LoadLanguage lets the env var win so a forced locale applies everywhere at startup; the in-app Language menu, however, edits and displays its own persisted selection, so it must read the file alone — otherwise a set OPENDEEZER_LANG would freeze the menu on one entry and desync its label from the locale actually applied.

func LoadAdsDisabled

func LoadAdsDisabled() bool

LoadAdsDisabled reports whether the user has opted out of Deezer Free's play-reporting/ads, from $OPENDEEZER_DISABLE_ADS or ~/.config/opendeezer/ads-disabled.txt. Default false (ads/reporting on). This only affects free accounts; it is the user's explicit, at-own-risk choice (see deezer.SetAdsDisabled for the tradeoff). Shared across every client.

func LoadDiscordAppID

func LoadDiscordAppID() string

LoadDiscordAppID returns the Discord application id for Rich Presence, from $OPENDEEZER_DISCORD_APP_ID or ~/.config/opendeezer/discord-app-id.txt. Empty disables the feature.

func LoadDownloadDir

func LoadDownloadDir() string

LoadDownloadDir returns the folder downloaded tracks are saved to, from $OPENDEEZER_DOWNLOAD_DIR, then ~/.config/opendeezer/download-dir.txt, then DefaultDownloadDir. Shared by the TUI and every GUI so a folder chosen in one client applies everywhere.

func LoadLanguage

func LoadLanguage() string

LoadLanguage returns the persisted UI language code (e.g. "fr", "zh"), from $OPENDEEZER_LANG or ~/.config/opendeezer/language.txt. An empty result means "auto" — the caller should fall back to locale detection. Shared across every client so the language chosen in one place (TUI, GUI) applies everywhere.

func LoadPeers

func LoadPeers() []string

LoadPeers returns manually-configured Connect peer addresses (host[:port]), from $OPENDEEZER_CONNECT_PEERS (comma-separated) and ~/.config/opendeezer/connect-peers.txt (one per line). These are merged into the device picker alongside LAN discovery, so Connect works over networks that carry no multicast/broadcast (e.g. Tailscale/VPN — unicast-only meshes).

func NormalizePeer

func NormalizePeer(addr string) (base, hostport string)

NormalizePeer turns user input ("host", "host:port", "http://host:port") into a base URL + host:port, defaulting the port to 7654. Returns ("","") if empty.

func PeerHostPorts

func PeerHostPorts() []string

PeerHostPorts returns the configured Connect peers (LoadPeers) normalized to host:port form, for passing to discovery.Discover as unicast probe targets so static peers answer even on multicast-filtered networks.

func SaveAdsDisabled

func SaveAdsDisabled(disabled bool) error

SaveAdsDisabled persists the free-tier ads opt-out.

func SaveControlEnabled

func SaveControlEnabled(enabled bool, addr string) error

SaveControlEnabled persists whether the control API starts automatically, so a Settings UI can flip it without editing env vars or config files by hand. addr is the bind address to remember while enabled (typically the current LoadControl().Addr); pass "" to disable.

func SaveControlToken

func SaveControlToken(token string) error

SaveControlToken persists the control-API bearer token. "" clears it, which falls back to same-account auth on a LAN bind.

func SaveDownloadDir

func SaveDownloadDir(path string) error

SaveDownloadDir persists the download folder. "" clears it (back to the default).

func SaveEQ

func SaveEQ(eq EQ) error

SaveEQ persists the equalizer state to eq.json in the config dir.

func SaveLanguage

func SaveLanguage(code string) error

SaveLanguage persists the UI language code. "" clears it (back to auto).

func SaveMedia

func SaveMedia(m Media) error

SaveMedia persists the media settings to media.json in the config dir, clamping a negative cache size to 0 (disabled) first.

Types

type Control

type Control struct {
	Enabled     bool
	Addr        string // host:port; "" -> 127.0.0.1:7654
	Token       string // bearer token ("" = no auth, localhost only)
	SameAccount bool   // require a matching Deezer account when no token (LAN)
}

Control holds the control-API settings (remote control + MCP).

func LoadControl

func LoadControl() Control

LoadControl reads the control-API config from $OPENDEEZER_CONTROL ("1"/addr) + $OPENDEEZER_CONTROL_TOKEN, else ~/.config/opendeezer/{control.txt,control-token.txt}.

type EQ

type EQ struct {
	Enabled  bool      `json:"enabled"`
	Mono     bool      `json:"mono"`
	PreampDB float64   `json:"preampDb"`
	GainsDB  []float64 `json:"gainsDb"`
	Preset   string    `json:"preset"`
}

EQ is the persisted equalizer + mono-downmix state. It is loaded and saved by the audio engine itself (not per client), so the TUI, every GUI and the control API all share one set of settings through ~/.config/opendeezer.

func LoadEQ

func LoadEQ() (eq EQ, ok bool)

LoadEQ reads eq.json from the config dir. ok is false when the file is missing or unparseable (caller falls back to defaults).

type Media

type Media struct {
	// MediaCacheMB is the on-disk raw-stream cache budget in megabytes
	// (see internal/mediacache). 0 — the default — disables the cache
	// entirely; negative values are clamped to 0.
	MediaCacheMB int `json:"mediaCacheMB"`
}

Media is the persisted media/streaming configuration (media.json in the config dir), shared across every client like EQ. Its zero value is the default behavior: no on-disk stream cache.

func LoadMedia

func LoadMedia() Media

LoadMedia reads media.json from the config dir. A missing or unparseable file yields the zero value (cache disabled). Negative cache sizes are clamped to 0.

Jump to

Keyboard shortcuts

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