config.go
⎇
Raw
1package config
2
3import (
4 "fmt"
5 "os"
6 "path/filepath"
7 "strconv"
8 "strings"
9)
10
11type Config struct {
12 Port int
13 DataDir string
14 DBPath string
15 DownloadDir string
16 SubtitleCacheDir string
17 YTDLPPath string
18 BaseURL string
19 Workers int
20 RefreshInterval int
21}
22
23func New() *Config {
24 dataDir := getEnv("VIDARCHIVE_DATA_DIR", "./data")
25
26 return &Config{
27 Port: getEnvInt("VIDARCHIVE_PORT", 8080),
28 DataDir: dataDir,
29 DBPath: getEnv("VIDARCHIVE_DB_PATH", filepath.Join(dataDir, "vidarchive.db")),
30 DownloadDir: getEnv("VIDARCHIVE_DOWNLOAD_DIR", filepath.Join(dataDir, "downloads")),
31 SubtitleCacheDir: getEnv("VIDARCHIVE_SUBTITLE_CACHE_DIR", filepath.Join(dataDir, "subtitles")),
32 YTDLPPath: getEnv("VIDARCHIVE_YTDLP_PATH", "yt-dlp"),
33 BaseURL: getEnv("VIDARCHIVE_BASE_URL", ""),
34 Workers: getEnvInt("VIDARCHIVE_WORKERS", 2),
35 RefreshInterval: getEnvInt("VIDARCHIVE_REFRESH_INTERVAL", 5),
36 }
37}
38
39func (c *Config) IsHTTPS() bool {
40 return strings.HasPrefix(c.BaseURL, "https://")
41}
42
43func getEnv(key, defaultVal string) string {
44 if v := os.Getenv(key); v != "" {
45 return v
46 }
47 return defaultVal
48}
49
50func getEnvInt(key string, defaultVal int) int {
51 v := os.Getenv(key)
52 if v == "" {
53 return defaultVal
54 }
55 i, err := strconv.Atoi(v)
56 if err != nil {
57 fmt.Fprintf(os.Stderr, "invalid %s: %v, using default %d\n", key, err, defaultVal)
58 return defaultVal
59 }
60 return i
61}
62