Browse Source

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 <[email protected]>
fgsfds 6 days ago
parent
commit
6879a8fbcb
2 changed files with 77 additions and 8 deletions
  1. 2 2
      .gitignore
  2. 75 6
      config/config.go

+ 2 - 2
.gitignore

@@ -29,9 +29,9 @@ main
 .DS_Store
 .DS_Store
 Thumbs.db
 Thumbs.db
 
 
-# Ignore Go specific files
+# Ignore Go build files
 *.exe
 *.exe
-*.exe~
+x-ui.db
 
 
 # Ignore Docker specific files
 # Ignore Docker specific files
 docker-compose.override.yml
 docker-compose.override.yml

+ 75 - 6
config/config.go

@@ -3,7 +3,10 @@ package config
 import (
 import (
 	_ "embed"
 	_ "embed"
 	"fmt"
 	"fmt"
+	"io"
 	"os"
 	"os"
+	"path/filepath"
+	"runtime"
 	"strings"
 	"strings"
 )
 )
 
 
@@ -54,12 +57,32 @@ func GetBinFolderPath() string {
 	return binFolderPath
 	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 {
 func GetDBFolderPath() string {
 	dbFolderPath := os.Getenv("XUI_DB_FOLDER")
 	dbFolderPath := os.Getenv("XUI_DB_FOLDER")
-	if dbFolderPath == "" {
-		dbFolderPath = "/etc/x-ui"
+	if dbFolderPath != "" {
+		return dbFolderPath
+	}
+	if runtime.GOOS == "windows" {
+		return getBaseDir()
 	}
 	}
-	return dbFolderPath
+	return "/etc/x-ui"
 }
 }
 
 
 func GetDBPath() string {
 func GetDBPath() string {
@@ -68,8 +91,54 @@ func GetDBPath() string {
 
 
 func GetLogFolder() string {
 func GetLogFolder() string {
 	logFolderPath := os.Getenv("XUI_LOG_FOLDER")
 	logFolderPath := os.Getenv("XUI_LOG_FOLDER")
-	if logFolderPath == "" {
-		logFolderPath = "/var/log"
+	if 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
 	}
 	}
-	return logFolderPath
+	_ = copyFile(oldDBPath, newDBPath) // ignore error
 }
 }