|
@@ -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
|
|
|
+ }
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ return getBaseDir()
|
|
|
}
|
|
|
- return dbFolderPath
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ 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
|
|
|
}
|