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 YTDLPPath string
17 BaseURL string
18 Workers int
19 RefreshInterval int
20}
21
22func New() *Config {
23 dataDir := getEnv("VIDARCHIVE_DATA_DIR", "./data")
24
25 return &Config{
26 Port: getEnvInt("VIDARCHIVE_PORT", 8080),
27 DataDir: dataDir,
28 DBPath: getEnv("VIDARCHIVE_DB_PATH", filepath.Join(dataDir, "vidarchive.db")),
29 DownloadDir: getEnv("VIDARCHIVE_DOWNLOAD_DIR", filepath.Join(dataDir, "downloads")),
30 YTDLPPath: getEnv("VIDARCHIVE_YTDLP_PATH", "yt-dlp"),
31 BaseURL: getEnv("VIDARCHIVE_BASE_URL", ""),
32 Workers: getEnvInt("VIDARCHIVE_WORKERS", 2),
33 RefreshInterval: getEnvInt("VIDARCHIVE_REFRESH_INTERVAL", 5),
34 }
35}
36
37func (c *Config) IsHTTPS() bool {
38 return strings.HasPrefix(c.BaseURL, "https://")
39}
40
41func getEnv(key, defaultVal string) string {
42 if v := os.Getenv(key); v != "" {
43 return v
44 }
45 return defaultVal
46}
47
48func getEnvInt(key string, defaultVal int) int {
49 v := os.Getenv(key)
50 if v == "" {
51 return defaultVal
52 }
53 i, err := strconv.Atoi(v)
54 if err != nil {
55 fmt.Fprintf(os.Stderr, "invalid %s: %v, using default %d\n", key, err, defaultVal)
56 return defaultVal
57 }
58 return i
59}
60