Documentation
¶
Index ¶
- Constants
- func CategoryNames(categories []Category) []string
- func CategoryOrder() []string
- func EnsureDirs() error
- func GetDocumentsDir() string
- func GetDownloadsDir() string
- func GetKeyMapConfigPath() string
- func GetLogsDir() string
- func GetMusicDir() string
- func GetPicturesDir() string
- func GetRuntimeDir() string
- func GetSettingsMetadata() map[string][]SettingMeta
- func GetSettingsPath() string
- func GetStateDir() string
- func GetSurgeDir() string
- func GetSystemRuntimeDir() string
- func GetSystemStateDir() string
- func GetSystemSurgeDir() string
- func GetThemesDir() string
- func GetVideosDir() string
- func Resolve[T any](s *Setting) T
- func ResolveCategoryPath(cat *Category, defaultDownloadDir string) string
- func SaveKeyMap(k *KeyMap) error
- func SaveSettings(s *Settings) error
- func ValidateDNSList(s string) error
- type BatchConfirmKeyMap
- type BugReportKeyMap
- type Category
- type CategoryManagerKeyMap
- type CategorySettings
- type DashboardKeyMap
- type DuplicateKeyMap
- type ExtensionKeyMap
- type ExtensionSettings
- type FilePickerKeyMap
- type GeneralSettings
- type InputKeyMap
- type KeyBindingConfig
- type KeyMap
- type KeyMapConfig
- type NetworkSettings
- type PerformanceSettings
- type QuitConfirmKeyMap
- type Setting
- type SettingMeta
- type Settings
- type SettingsCategory
- type SettingsEditorKeyMap
- type SettingsKeyMap
- type SpeedLimitsKeyMap
- type UpdateKeyMap
Constants ¶
const ( KB = 1 << 10 MB = 1 << 20 )
const ( ThemeAdaptive = 0 ThemeLight = 1 ThemeDark = 2 )
Variables ¶
This section is empty.
Functions ¶
func CategoryNames ¶
CategoryNames returns a slice of category names.
func CategoryOrder ¶
func CategoryOrder() []string
CategoryOrder returns the display order of settings categories.
func GetDocumentsDir ¶
func GetDocumentsDir() string
func GetDownloadsDir ¶
func GetDownloadsDir() string
func GetKeyMapConfigPath ¶ added in v0.9.0
func GetKeyMapConfigPath() string
GetKeyMapConfigPath returns the path to the Keymaps JSON file.
func GetMusicDir ¶
func GetMusicDir() string
func GetPicturesDir ¶
func GetPicturesDir() string
func GetRuntimeDir ¶
func GetRuntimeDir() string
func GetSettingsMetadata ¶
func GetSettingsMetadata() map[string][]SettingMeta
GetSettingsMetadata returns metadata for all settings organized by category. The result is computed once and cached since metadata is static.
func GetSettingsPath ¶
func GetSettingsPath() string
GetSettingsPath returns the path to the settings JSON file.
func GetStateDir ¶
func GetStateDir() string
func GetSurgeDir ¶
func GetSurgeDir() string
GetSurgeDir returns the directory for configuration files (settings.json). Linux: $XDG_CONFIG_HOME/surge or ~/.config/surge macOS: ~/Library/Application Support/surge Windows: %APPDATA%/surge
func GetSystemRuntimeDir ¶ added in v0.8.6
func GetSystemRuntimeDir() string
func GetSystemStateDir ¶ added in v0.8.6
func GetSystemStateDir() string
func GetSystemSurgeDir ¶ added in v0.8.6
func GetSystemSurgeDir() string
func GetThemesDir ¶ added in v0.8.2
func GetThemesDir() string
GetThemesDir returns the directory for themes
func GetVideosDir ¶
func GetVideosDir() string
func Resolve ¶ added in v0.8.7
Resolve retrieves the value of a setting converted to the expected generic type T. This is a unified, caller-agnostic function that handles all dynamic type conversions safely.
func ResolveCategoryPath ¶
ResolveCategoryPath returns the Path of a category.
func SaveKeyMap ¶ added in v0.9.0
SaveKeyMap saves the keymap configuration to file.
func SaveSettings ¶
SaveSettings saves settings to disk atomically.
func ValidateDNSList ¶ added in v0.8.4
ValidateDNSList checks if a comma-separated list of DNS servers (IP or IP:port) is valid.
Types ¶
type BatchConfirmKeyMap ¶ added in v0.9.0
BatchConfirmKeyMap defines keybindings for batch import confirmation
func (BatchConfirmKeyMap) FullHelp ¶ added in v0.9.0
func (k BatchConfirmKeyMap) FullHelp() [][]key.Binding
func (BatchConfirmKeyMap) ShortHelp ¶ added in v0.9.0
func (k BatchConfirmKeyMap) ShortHelp() []key.Binding
type BugReportKeyMap ¶ added in v0.9.0
BugReportKeyMap defines keybindings for selecting bug report target.
func (BugReportKeyMap) FullHelp ¶ added in v0.9.0
func (k BugReportKeyMap) FullHelp() [][]key.Binding
func (BugReportKeyMap) ShortHelp ¶ added in v0.9.0
func (k BugReportKeyMap) ShortHelp() []key.Binding
type Category ¶
type Category struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`
Pattern string `json:"pattern"`
Path string `json:"path"`
}
Category defines a download category for auto-sorting.
func DefaultCategories ¶
func DefaultCategories() []Category
DefaultCategories returns the default set of download categories.
func GetCategoryForFile ¶
GetCategoryForFile returns the last matching category so user-added rules can override broader defaults that appear earlier in the list.
type CategoryManagerKeyMap ¶ added in v0.9.0
type CategoryManagerKeyMap struct {
Up key.Binding
Down key.Binding
Edit key.Binding
Add key.Binding
Delete key.Binding
Toggle key.Binding // toggle enable/disable
Tab key.Binding
Close key.Binding
}
CategoryManagerKeyMap defines keybindings for the category manager
func (CategoryManagerKeyMap) FullHelp ¶ added in v0.9.0
func (k CategoryManagerKeyMap) FullHelp() [][]key.Binding
func (CategoryManagerKeyMap) ShortHelp ¶ added in v0.9.0
func (k CategoryManagerKeyMap) ShortHelp() []key.Binding
type CategorySettings ¶ added in v0.8.0
type DashboardKeyMap ¶ added in v0.9.0
type DashboardKeyMap struct {
TabQueued key.Binding
TabActive key.Binding
TabDone key.Binding
NextTab key.Binding
PrevTab key.Binding
Add key.Binding
BatchImport key.Binding
Search key.Binding
Pause key.Binding
Refresh key.Binding
Delete key.Binding
PurgeFile key.Binding
Settings key.Binding
SpeedLimits key.Binding
Log key.Binding
ToggleHelp key.Binding
ReportBug key.Binding
OpenFile key.Binding
OpenFolder key.Binding
Quit key.Binding
ForceQuit key.Binding
CategoryFilter key.Binding
PinTab key.Binding
// Navigation
Up key.Binding
Down key.Binding
// Log Navigation
LogUp key.Binding
LogDown key.Binding
LogTop key.Binding
LogBottom key.Binding
LogClose key.Binding
}
DashboardKeyMap defines keybindings for the main dashboard
func (DashboardKeyMap) FullHelp ¶ added in v0.9.0
func (k DashboardKeyMap) FullHelp() [][]key.Binding
FullHelp returns keybindings for the expanded help view
func (DashboardKeyMap) ShortHelp ¶ added in v0.9.0
func (k DashboardKeyMap) ShortHelp() []key.Binding
ShortHelp returns keybindings to show in the mini help view
type DuplicateKeyMap ¶ added in v0.9.0
DuplicateKeyMap defines keybindings for duplicate warning
func (DuplicateKeyMap) FullHelp ¶ added in v0.9.0
func (k DuplicateKeyMap) FullHelp() [][]key.Binding
func (DuplicateKeyMap) ShortHelp ¶ added in v0.9.0
func (k DuplicateKeyMap) ShortHelp() []key.Binding
type ExtensionKeyMap ¶ added in v0.9.0
type ExtensionKeyMap struct {
Confirm key.Binding
Browse key.Binding
Next key.Binding
Prev key.Binding
Cancel key.Binding
}
ExtensionKeyMap defines keybindings for extension confirmation
func (ExtensionKeyMap) FullHelp ¶ added in v0.9.0
func (k ExtensionKeyMap) FullHelp() [][]key.Binding
func (ExtensionKeyMap) ShortHelp ¶ added in v0.9.0
func (k ExtensionKeyMap) ShortHelp() []key.Binding
type ExtensionSettings ¶ added in v0.8.0
type FilePickerKeyMap ¶ added in v0.9.0
type FilePickerKeyMap struct {
UseDir key.Binding
GotoHome key.Binding
Back key.Binding
Forward key.Binding
Open key.Binding
Cancel key.Binding
}
FilePickerKeyMap defines keybindings for the file picker
func (FilePickerKeyMap) FullHelp ¶ added in v0.9.0
func (k FilePickerKeyMap) FullHelp() [][]key.Binding
func (FilePickerKeyMap) ShortHelp ¶ added in v0.9.0
func (k FilePickerKeyMap) ShortHelp() []key.Binding
type GeneralSettings ¶
type GeneralSettings struct {
DefaultDownloadDir *Setting `json:"default_download_dir"`
WarnOnDuplicate *Setting `json:"warn_on_duplicate"`
DownloadCompleteNotification *Setting `json:"download_complete_notification"`
AllowRemoteOpenActions *Setting `json:"allow_remote_open_actions"`
AutoResume *Setting `json:"auto_resume"`
AutoStart *Setting `json:"auto_start"`
SkipUpdateCheck *Setting `json:"skip_update_check"`
ClipboardMonitor *Setting `json:"clipboard_monitor"`
Theme *Setting `json:"theme"`
ThemePath *Setting `json:"theme_path"`
LogRetentionCount *Setting `json:"log_retention_count"`
LiveSpeedGraph *Setting `json:"live_speed_graph"`
}
type InputKeyMap ¶ added in v0.9.0
type InputKeyMap struct {
Tab key.Binding
Enter key.Binding
Esc key.Binding
Up key.Binding
Down key.Binding
Cancel key.Binding
}
InputKeyMap defines keybindings for the add download input
func (InputKeyMap) FullHelp ¶ added in v0.9.0
func (k InputKeyMap) FullHelp() [][]key.Binding
func (InputKeyMap) ShortHelp ¶ added in v0.9.0
func (k InputKeyMap) ShortHelp() []key.Binding
type KeyBindingConfig ¶ added in v0.9.0
KeyBindingConfig represents a single key binding.
type KeyMap ¶ added in v0.9.0
type KeyMap struct {
Dashboard DashboardKeyMap `json:"dashboard"`
Input InputKeyMap `json:"input"`
FilePicker FilePickerKeyMap `json:"file_picker"`
Duplicate DuplicateKeyMap `json:"duplicate"`
Extension ExtensionKeyMap `json:"extension"`
Settings SettingsKeyMap `json:"settings"`
SettingsEditor SettingsEditorKeyMap `json:"settings_editor"`
BatchConfirm BatchConfirmKeyMap `json:"batch_confirm"`
Update UpdateKeyMap `json:"update"`
BugReport BugReportKeyMap `json:"bug_report"`
CategoryMgr CategoryManagerKeyMap `json:"category_mgr"`
SpeedLimits SpeedLimitsKeyMap `json:"speed_limits"`
QuitConfirm QuitConfirmKeyMap `json:"quit_confirm"`
// StartupWarnings holds validation messages from the most recent LoadKeyMap call.
// It is ignored during JSON serialization.
StartupWarnings []string `json:"-"`
}
KeyMap defines the keybindings for the entire application
func DefaultKeyMap ¶ added in v0.9.0
func DefaultKeyMap() *KeyMap
func LoadKeyMap ¶ added in v0.9.0
LoadKeyMap loads the keymap configuration from file.
func (*KeyMap) ApplyConfig ¶ added in v0.9.0
func (k *KeyMap) ApplyConfig(cfg *KeyMapConfig)
ApplyConfig applies configuration from KeyMapConfig to KeyMap.
func (*KeyMap) ToConfig ¶ added in v0.9.0
func (k *KeyMap) ToConfig() *KeyMapConfig
ToConfig converts KeyMap to KeyMapConfig for serialization.
type KeyMapConfig ¶ added in v0.9.0
type KeyMapConfig struct {
Dashboard map[string]KeyBindingConfig `json:"dashboard"`
Input map[string]KeyBindingConfig `json:"input"`
FilePicker map[string]KeyBindingConfig `json:"file_picker"`
Duplicate map[string]KeyBindingConfig `json:"duplicate"`
Extension map[string]KeyBindingConfig `json:"extension"`
Settings map[string]KeyBindingConfig `json:"settings"`
SettingsEditor map[string]KeyBindingConfig `json:"settings_editor"`
BatchConfirm map[string]KeyBindingConfig `json:"batch_confirm"`
Update map[string]KeyBindingConfig `json:"update"`
BugReport map[string]KeyBindingConfig `json:"bug_report"`
CategoryMgr map[string]KeyBindingConfig `json:"category_mgr"`
SpeedLimits map[string]KeyBindingConfig `json:"speed_limits"`
QuitConfirm map[string]KeyBindingConfig `json:"quit_confirm"`
}
KeyMapConfig mirrors the structure of KeyMap for configuration.
type NetworkSettings ¶
type NetworkSettings struct {
MaxConnectionsPerDownload *Setting `json:"max_connections_per_host"`
MaxConcurrentDownloads *Setting `json:"max_concurrent_downloads"`
MaxConcurrentProbes *Setting `json:"max_concurrent_probes"`
UserAgent *Setting `json:"user_agent"`
ProxyURL *Setting `json:"proxy_url"`
CustomDNS *Setting `json:"custom_dns"`
SequentialDownload *Setting `json:"sequential_download"`
MinChunkSize *Setting `json:"min_chunk_size"`
WorkerBufferSize *Setting `json:"worker_buffer_size"`
DialHedgeCount *Setting `json:"dial_hedge_count"`
GlobalRateLimit *Setting `json:"global_rate_limit"`
DefaultDownloadRateLimit *Setting `json:"default_download_rate_limit"`
}
type PerformanceSettings ¶
type PerformanceSettings struct {
MaxTaskRetries *Setting `json:"max_task_retries"`
SlowWorkerThreshold *Setting `json:"slow_worker_threshold"`
SlowWorkerGracePeriod *Setting `json:"slow_worker_grace_period"`
StallTimeout *Setting `json:"stall_timeout"`
SpeedEmaAlpha *Setting `json:"speed_ema_alpha"`
}
type QuitConfirmKeyMap ¶ added in v0.9.0
type QuitConfirmKeyMap struct {
Left key.Binding
Right key.Binding
Yes key.Binding
No key.Binding
Select key.Binding
Cancel key.Binding
}
QuitConfirmKeyMap defines keybindings for the quit confirmation modal
func (QuitConfirmKeyMap) FullHelp ¶ added in v0.9.0
func (k QuitConfirmKeyMap) FullHelp() [][]key.Binding
func (QuitConfirmKeyMap) ShortHelp ¶ added in v0.9.0
func (k QuitConfirmKeyMap) ShortHelp() []key.Binding
type Setting ¶ added in v0.8.7
type Setting struct {
Key string `json:"key"`
Label string `json:"label"`
Description string `json:"description"`
NeedsRestart bool `json:"needs_restart"`
Type string `json:"type"` // "string", "int", "bool", "float64", "duration", "int64", "auth_token", "link"
Value any `json:"value"`
DefaultValue any `json:"default_value"`
// ValidateFunc is a custom validator for this setting.
ValidateFunc func(val any) error `json:"-"`
}
Setting represents a single application configuration option. Note: Custom MarshalJSON/UnmarshalJSON methods on *Setting (in settings.go) serialize only the Value field. The json tags on other fields are not used during normal serialization but document the intended schema.
func (*Setting) MarshalJSON ¶ added in v0.8.7
MarshalJSON serializes only the primitive value of this setting.
func (*Setting) Resolve ¶ added in v0.8.7
Resolve returns the setting's value dynamically converted to its schema-defined target type. This ensures that unmarshaled types (like float64) are resolved back to their correct Go types (int, duration, etc.) and can be accessed safely as any.
func (*Setting) UnmarshalJSON ¶ added in v0.8.7
UnmarshalJSON updates only the Value field of the initialized pointer.
type SettingMeta ¶
type SettingMeta struct {
Key string // JSON key name
Label string // Human-readable label
Description string // Help text displayed in right pane
Type string // "string", "int", "int64", "bool", "duration", "float64", "auth_token", "link"
RequiresRestart bool // Whether changing this setting requires an application restart
}
SettingMeta provides metadata for a single setting (for UI rendering).
type Settings ¶
type Settings struct {
General GeneralSettings `json:"general"`
Network NetworkSettings `json:"network"`
Performance PerformanceSettings `json:"performance"`
Categories CategorySettings `json:"categories"`
Extension ExtensionSettings `json:"extension"`
// Schema-driven categories list populated on initialization
CategoriesList []*SettingsCategory `json:"-"`
StartupWarnings []string `json:"-"`
}
func DefaultSettings ¶
func DefaultSettings() *Settings
DefaultSettings returns a new Settings instance with sensible defaults.
func LoadSettings ¶
LoadSettings loads settings from disk. Returns defaults if file doesn't exist or if the JSON is corrupt, so the application can always start.
func (*Settings) FindSetting ¶ added in v0.9.0
FindSetting returns a setting by its category and JSON key without using reflection.
func (*Settings) ToRuntimeConfig ¶
func (s *Settings) ToRuntimeConfig() *types.RuntimeConfig
ToRuntimeConfig creates the engine runtime config from validated settings.
type SettingsCategory ¶ added in v0.8.7
SettingsCategory represents a group of related Setting options.
type SettingsEditorKeyMap ¶ added in v0.9.0
SettingsEditorKeyMap defines keybindings for editing a setting
func (SettingsEditorKeyMap) FullHelp ¶ added in v0.9.0
func (k SettingsEditorKeyMap) FullHelp() [][]key.Binding
func (SettingsEditorKeyMap) ShortHelp ¶ added in v0.9.0
func (k SettingsEditorKeyMap) ShortHelp() []key.Binding
type SettingsKeyMap ¶ added in v0.9.0
type SettingsKeyMap struct {
Tab1 key.Binding
Tab2 key.Binding
Tab3 key.Binding
Tab4 key.Binding
Tab5 key.Binding
NextTab key.Binding
PrevTab key.Binding
Browse key.Binding
Edit key.Binding
Up key.Binding
Down key.Binding
Reset key.Binding
Close key.Binding
ReportBug key.Binding
}
SettingsKeyMap defines keybindings for the settings view
func (SettingsKeyMap) FullHelp ¶ added in v0.9.0
func (k SettingsKeyMap) FullHelp() [][]key.Binding
func (SettingsKeyMap) ShortHelp ¶ added in v0.9.0
func (k SettingsKeyMap) ShortHelp() []key.Binding
type SpeedLimitsKeyMap ¶ added in v0.9.0
type SpeedLimitsKeyMap struct {
Up key.Binding
Down key.Binding
Edit key.Binding
Reset key.Binding
Close key.Binding
}
SpeedLimitsKeyMap defines keybindings for speed limits
func (SpeedLimitsKeyMap) FullHelp ¶ added in v0.9.0
func (k SpeedLimitsKeyMap) FullHelp() [][]key.Binding
func (SpeedLimitsKeyMap) ShortHelp ¶ added in v0.9.0
func (k SpeedLimitsKeyMap) ShortHelp() []key.Binding
type UpdateKeyMap ¶ added in v0.9.0
UpdateKeyMap defines keybindings for update notification
func (UpdateKeyMap) FullHelp ¶ added in v0.9.0
func (k UpdateKeyMap) FullHelp() [][]key.Binding
func (UpdateKeyMap) ShortHelp ¶ added in v0.9.0
func (k UpdateKeyMap) ShortHelp() []key.Binding