79 lines
1.4 KiB
Go
79 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
)
|
|
|
|
type Config struct {
|
|
TelegramToken string `json:"telegram_token"`
|
|
TelegramOwnerID int64 `json:"telegram_owner_id"`
|
|
DefaultDir string `json:"default_dir"`
|
|
DownloadLimit int `json:"download_limit_kbs"` // 0 = no limit
|
|
UploadLimit int `json:"upload_limit_kbs"` // 0 = no limit
|
|
DisableAnimations bool `json:"disable_animations"`
|
|
}
|
|
|
|
var (
|
|
mu sync.Mutex
|
|
)
|
|
|
|
func getConfigPath() (string, error) {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(home, ".ztrr", "config.json"), nil
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
path, err := getConfigPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return &Config{}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
var cfg Config
|
|
if err := json.Unmarshal(data, &cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
return &cfg, nil
|
|
}
|
|
|
|
func Save(cfg *Config) error {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
path, err := getConfigPath()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
|
|
return err
|
|
}
|
|
|
|
data, err := json.MarshalIndent(cfg, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tmpPath := path + ".tmp"
|
|
if err := os.WriteFile(tmpPath, data, 0644); err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.Rename(tmpPath, path)
|
|
}
|