From 05d114be669884cb1d8b3d2a7f17515ef1c3bb37 Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Sun, 31 Aug 2025 23:25:33 +0800 Subject: [PATCH] feat: seprate os and docker default download dir --- db/db.go | 12 +++++++++++- pkg/utils/utils.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/db/db.go b/db/db.go index 54cc45c..befa73e 100644 --- a/db/db.go +++ b/db/db.go @@ -62,7 +62,17 @@ func (c *client) init() { downloadDir := c.GetSetting(SettingDownloadDir) if downloadDir == "" { log.Infof("set default download dir") - c.SetSetting(SettingDownloadDir, "/downloads") + if utils.IsRunningInDocker() { + c.SetSetting(SettingDownloadDir, "/downloads") + } else { + downloadDir, err := utils.UserDownloadDir() + if err != nil { + log.Errorf("get user download dir error: %v", err) + downloadDir = "/downloads" + } + c.SetSetting(SettingDownloadDir, downloadDir) + } + } logLevel := c.GetSetting(SettingLogLevel) if logLevel == "" { diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 10bd86a..9ee3eaa 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -314,3 +314,35 @@ func DirSize(path string) (int64, error) { }) return size, err } + +func IsRunningInDocker() bool { + if _, err := os.Stat("/.dockerenv"); err == nil { + return true + } + return false +} + +func UserDownloadDir() (string, error) { + var downloadDirNames []string = []string{"Downloads", "downloads", "download", "下载"} + + if IsRunningInDocker() { + return "/downloads", nil + } + + homeDir, err := os.UserHomeDir() + if err != nil { + return "", err + } + + for _, ddn := range downloadDirNames { + var dir = filepath.Join(homeDir, ddn) + + if _, err := os.Stat(dir); os.IsNotExist(err) { + continue + } else { + return dir, nil + } + } + + return "", errors.New("no download dir found") +}