package config import ( "os" "gopkg.in/vansante/go-ffprobe.v2" ) type ConfigInterface interface { GetConfig() ZurgConfig GetVersion() string GetToken() string GetNumOfWorkers() int GetRefreshEverySecs() int GetRepairEveryMins() int EnableRepair() bool GetHost() string GetPort() string GetUsername() string GetPassword() string GetDirectories() []string MeetsConditions(directory, torrentName string, torrentSize int64, torrentIDs, fileNames []string, fileSizes []int64, mediaInfos []*ffprobe.ProbeData) bool GetOnLibraryUpdate() string GetNetworkBufferSize() int EnableRetainFolderNameExtension() bool EnableRetainRDTorrentName() bool ShouldIgnoreRenames() bool ShouldServeFromRclone() bool ShouldForceIPv6() bool GetApiTimeoutSecs() int GetDownloadTimeoutSecs() int GetRetriesUntilFailed() int GetRarAction() string GetDownloadsEveryMins() int GetDumpTorrentsEveryMins() int GetPlayableExtensions() []string GetProxy() string } type ZurgConfig struct { Version string `yaml:"zurg" json:"-"` Token string `yaml:"token" json:"-"` ApiTimeoutSecs int `yaml:"api_timeout_secs" json:"api_timeout_secs"` CanRepair bool `yaml:"enable_repair" json:"enable_repair"` DownloadsEveryMins int `yaml:"downloads_every_mins" json:"downloads_every_mins"` DumpTorrentsEveryMins int `yaml:"dump_torrents_every_mins" json:"dump_torrents_every_mins"` DownloadTimeoutSecs int `yaml:"download_timeout_secs" json:"download_timeout_secs"` ForceIPv6 bool `yaml:"force_ipv6" json:"force_ipv6"` Host string `yaml:"host" json:"host"` IgnoreRenames bool `yaml:"ignore_renames" json:"ignore_renames"` NetworkBufferSize int `yaml:"network_buffer_size" json:"network_buffer_size"` NumOfWorkers int `yaml:"concurrent_workers" json:"concurrent_workers"` OnLibraryUpdate string `yaml:"on_library_update" json:"on_library_update"` Password string `yaml:"password" json:"password"` PlayableExtensions []string `yaml:"addl_playable_extensions" json:"addl_playable_extensions"` Port string `yaml:"port" json:"port"` Proxy string `yaml:"proxy" json:"proxy"` RefreshEverySecs int `yaml:"check_for_changes_every_secs" json:"check_for_changes_every_secs"` RepairEveryMins int `yaml:"repair_every_mins" json:"repair_every_mins"` RetainFolderNameExtension bool `yaml:"retain_folder_name_extension" json:"retain_folder_name_extension"` RetainRDTorrentName bool `yaml:"retain_rd_torrent_name" json:"retain_rd_torrent_name"` RetriesUntilFailed int `yaml:"retries_until_failed" json:"retries_until_failed"` ServeFromRclone bool `yaml:"serve_from_rclone" json:"serve_from_rclone"` Username string `yaml:"username" json:"username"` RarAction string `yaml:"rar_action" json:"rar_action"` } func (z *ZurgConfig) GetConfig() ZurgConfig { return *z } func (z *ZurgConfig) GetToken() string { return z.Token } func (z *ZurgConfig) GetHost() string { if z.Host == "" { return "[::]" } return z.Host } func (z *ZurgConfig) GetPort() string { if os.Getenv("PORT") != "" { return os.Getenv("PORT") } if z.Port == "" { return "9999" } return z.Port } func (z *ZurgConfig) GetUsername() string { return z.Username } func (z *ZurgConfig) GetPassword() string { return z.Password } func (z *ZurgConfig) GetNumOfWorkers() int { if z.NumOfWorkers == 0 { return 20 } return z.NumOfWorkers } func (z *ZurgConfig) GetRefreshEverySecs() int { if z.RefreshEverySecs == 0 { return 15 } return z.RefreshEverySecs } func (z *ZurgConfig) GetRepairEveryMins() int { if z.RepairEveryMins == 0 { return 60 // 1 hour } return z.RepairEveryMins } func (z *ZurgConfig) GetDownloadsEveryMins() int { if z.DownloadsEveryMins == 0 { return 720 // 12 hours } return z.DownloadsEveryMins } func (z *ZurgConfig) GetDumpTorrentsEveryMins() int { if z.DumpTorrentsEveryMins == 0 { return 1440 // 1 day } return z.DumpTorrentsEveryMins } func (z *ZurgConfig) EnableRepair() bool { return z.CanRepair } func (z *ZurgConfig) GetOnLibraryUpdate() string { return z.OnLibraryUpdate } func (z *ZurgConfig) GetNetworkBufferSize() int { if z.NetworkBufferSize == 0 { return 32 * 1024 // 32kb } return z.NetworkBufferSize } func (z *ZurgConfig) EnableRetainFolderNameExtension() bool { return z.RetainFolderNameExtension } func (z *ZurgConfig) EnableRetainRDTorrentName() bool { return z.RetainRDTorrentName } func (z *ZurgConfig) ShouldIgnoreRenames() bool { return !z.IgnoreRenames } func (z *ZurgConfig) ShouldServeFromRclone() bool { return z.ServeFromRclone } func (z *ZurgConfig) ShouldForceIPv6() bool { return z.ForceIPv6 } func (z *ZurgConfig) GetRetriesUntilFailed() int { if z.RetriesUntilFailed == 0 { return 2 } return z.RetriesUntilFailed } func (z *ZurgConfig) GetApiTimeoutSecs() int { if z.ApiTimeoutSecs == 0 { return 60 } return z.ApiTimeoutSecs } func (z *ZurgConfig) GetDownloadTimeoutSecs() int { if z.DownloadTimeoutSecs == 0 { return 10 } return z.DownloadTimeoutSecs } // GetRarAction returns the action to take when a rar'ed torrent is found // none: do nothing (mark as unrepairable) // extract: extract the rar'ed torrent // delete: delete the rar'ed torrent func (z *ZurgConfig) GetRarAction() string { if z.RarAction == "" { return "none" } return z.RarAction } func (z *ZurgConfig) GetPlayableExtensions() []string { if len(z.PlayableExtensions) == 0 { return []string{} } return z.PlayableExtensions } func (z *ZurgConfig) GetProxy() string { return z.Proxy }