From 6879a8fbcba33dc56afa0ef0a172d506e1f874f3 Mon Sep 17 00:00:00 2001 From: fgsfds <4870330+fgsfds@users.noreply.github.com> Date: Thu, 14 Aug 2025 02:19:59 +0500 Subject: [PATCH] Moved DB to same app folder on Windows (#3340) * moved db to user folder on windows * moved db to local appdata * made getDBFolderPath func private * added getWindowsDbPath() func * fix --------- Co-authored-by: mhsanaei --- .gitignore | 4 +-- config/config.go | 81 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index a7644d78..8fa4eeb0 100644 --- a/.gitignore +++ b/.gitignore @@ -29,9 +29,9 @@ main .DS_Store Thumbs.db -# Ignore Go specific files +# Ignore Go build files *.exe -*.exe~ +x-ui.db # Ignore Docker specific files docker-compose.override.yml diff --git a/config/config.go b/config/config.go index 70be5ae6..32d83055 100644 --- a/config/config.go +++ b/config/config.go @@ -3,7 +3,10 @@ package config import ( _ "embed" "fmt" + "io" "os" + "path/filepath" + "runtime" "strings" ) @@ -54,12 +57,32 @@ func GetBinFolderPath() string { return binFolderPath } +func getBaseDir() string { + exePath, err := os.Executable() + if err != nil { + return "." + } + exeDir := filepath.Dir(exePath) + exeDirLower := strings.ToLower(filepath.ToSlash(exeDir)) + if strings.Contains(exeDirLower, "/appdata/local/temp/") || strings.Contains(exeDirLower, "/go-build") { + wd, err := os.Getwd() + if err != nil { + return "." + } + return wd + } + return exeDir +} + func GetDBFolderPath() string { dbFolderPath := os.Getenv("XUI_DB_FOLDER") - if dbFolderPath == "" { - dbFolderPath = "/etc/x-ui" + if dbFolderPath != "" { + return dbFolderPath } - return dbFolderPath + if runtime.GOOS == "windows" { + return getBaseDir() + } + return "/etc/x-ui" } func GetDBPath() string { @@ -68,8 +91,54 @@ func GetDBPath() string { func GetLogFolder() string { logFolderPath := os.Getenv("XUI_LOG_FOLDER") - if logFolderPath == "" { - logFolderPath = "/var/log" + if logFolderPath != "" { + return logFolderPath } - return logFolderPath + if runtime.GOOS == "windows" { + return getBaseDir() + } + return "/var/log" +} + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + + out, err := os.Create(dst) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, in) + if err != nil { + return err + } + + return out.Sync() +} + +func init() { + if runtime.GOOS != "windows" { + return + } + if os.Getenv("XUI_DB_FOLDER") != "" { + return + } + oldDBFolder := "/etc/x-ui" + oldDBPath := fmt.Sprintf("%s/%s.db", oldDBFolder, GetName()) + newDBFolder := GetDBFolderPath() + newDBPath := fmt.Sprintf("%s/%s.db", newDBFolder, GetName()) + _, err := os.Stat(newDBPath) + if err == nil { + return // new exists + } + _, err = os.Stat(oldDBPath) + if os.IsNotExist(err) { + return // old does not exist + } + _ = copyFile(oldDBPath, newDBPath) // ignore error }