This commit is contained in:
Liang Ding 2023-01-04 20:13:17 +08:00
parent fb7361d98b
commit a9cb87787e
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 95 additions and 29 deletions

View file

@ -217,7 +217,7 @@ func initWorkspaceDir(workspaceArg string) {
log.Printf("unmarshal workspace conf [%s] failed: %s", workspaceConf, err)
}
tmp := workspacePaths[:0]
var tmp []string
for _, d := range workspacePaths {
d = strings.TrimRight(d, " \t\n") // 去掉工作空间路径尾部空格 https://github.com/siyuan-note/siyuan/issues/6353
if gulu.File.IsDir(d) {

View file

@ -17,9 +17,11 @@
package util
import (
"log"
"math/rand"
"os"
"path/filepath"
"strings"
"time"
"github.com/88250/gulu"
@ -33,41 +35,105 @@ func BootMobile(container, appDir, workspaceBaseDir, lang string) {
rand.Seed(time.Now().UTC().UnixNano())
initMime()
initHttpClient()
workspaceDir := filepath.Join(workspaceBaseDir, "siyuan")
HomeDir = filepath.Join(workspaceBaseDir, "home")
userHomeConfDir := filepath.Join(HomeDir, ".config", "siyuan")
if !gulu.File.IsExist(userHomeConfDir) {
os.MkdirAll(userHomeConfDir, 0755)
}
WorkingDir = filepath.Join(appDir, "app")
WorkspaceDir = workspaceDir
ConfDir = filepath.Join(workspaceDir, "conf")
DataDir = filepath.Join(workspaceDir, "data")
HistoryDir = filepath.Join(workspaceDir, "history")
RepoDir = filepath.Join(WorkspaceDir, "repo")
TempDir = filepath.Join(workspaceDir, "temp")
osTmpDir := filepath.Join(TempDir, "os")
os.RemoveAll(osTmpDir)
os.MkdirAll(osTmpDir, 0755)
os.RemoveAll(filepath.Join(TempDir, "repo"))
os.Setenv("TMPDIR", osTmpDir)
DBPath = filepath.Join(TempDir, DBName)
HistoryDBPath = filepath.Join(TempDir, "history.db")
BlockTreePath = filepath.Join(TempDir, "blocktree.msgpack")
LogPath = filepath.Join(TempDir, "siyuan.log")
logging.SetLogPath(LogPath)
AppearancePath = filepath.Join(ConfDir, "appearance")
ThemesPath = filepath.Join(AppearancePath, "themes")
IconsPath = filepath.Join(AppearancePath, "icons")
SnippetsPath = filepath.Join(DataDir, "snippets")
ServerPort = FixedPort
Container = container
UserAgent = UserAgent + " " + Container
httpclient.SetUserAgent(UserAgent)
Lang = lang
WorkingDir = filepath.Join(appDir, "app")
HomeDir = filepath.Join(workspaceBaseDir, "home")
userHomeConfDir := filepath.Join(HomeDir, ".config", "siyuan")
if !gulu.File.IsExist(userHomeConfDir) {
os.MkdirAll(userHomeConfDir, 0755)
}
initWorkspaceDirMobile(workspaceBaseDir)
initPathDir()
bootBanner := figure.NewFigure("SiYuan", "", true)
logging.LogInfof("\n" + bootBanner.String())
logBootInfo()
}
func initWorkspaceDirMobile(workspaceBaseDir string) {
userHomeConfDir := filepath.Join(HomeDir, ".config", "siyuan")
workspaceConf := filepath.Join(userHomeConfDir, "workspace.json")
if !gulu.File.IsExist(workspaceConf) {
if err := os.MkdirAll(userHomeConfDir, 0755); nil != err && !os.IsExist(err) {
log.Printf("create user home conf folder [%s] failed: %s", userHomeConfDir, err)
os.Exit(ExitCodeCreateConfDirErr)
}
}
defaultWorkspaceDir := filepath.Join(workspaceBaseDir, "siyuan")
var workspacePaths []string
if !gulu.File.IsExist(workspaceConf) {
WorkspaceDir = defaultWorkspaceDir
if !gulu.File.IsDir(WorkspaceDir) {
log.Printf("use the default workspace [%s] since the specified workspace [%s] is not a dir", WorkspaceDir, defaultWorkspaceDir)
WorkspaceDir = defaultWorkspaceDir
}
workspacePaths = append(workspacePaths, WorkspaceDir)
} else {
data, err := os.ReadFile(workspaceConf)
if err = gulu.JSON.UnmarshalJSON(data, &workspacePaths); nil != err {
log.Printf("unmarshal workspace conf [%s] failed: %s", workspaceConf, err)
}
var tmp []string
for _, d := range workspacePaths {
d = strings.TrimRight(d, " \t\n") // 去掉工作空间路径尾部空格 https://github.com/siyuan-note/siyuan/issues/6353
if gulu.File.IsDir(d) {
tmp = append(tmp, d)
}
}
workspacePaths = tmp
if 0 < len(workspacePaths) {
WorkspaceDir = workspacePaths[len(workspacePaths)-1]
if !gulu.File.IsDir(WorkspaceDir) {
log.Printf("use the default workspace [%s] since the specified workspace [%s] is not a dir", WorkspaceDir, defaultWorkspaceDir)
WorkspaceDir = defaultWorkspaceDir
}
workspacePaths[len(workspacePaths)-1] = WorkspaceDir
} else {
WorkspaceDir = defaultWorkspaceDir
workspacePaths = append(workspacePaths, WorkspaceDir)
}
}
if data, err := gulu.JSON.MarshalJSON(workspacePaths); nil == err {
if err = os.WriteFile(workspaceConf, data, 0644); nil != err {
log.Fatalf("write workspace conf [%s] failed: %s", workspaceConf, err)
}
} else {
log.Fatalf("marshal workspace conf [%s] failed: %s", workspaceConf, err)
}
ConfDir = filepath.Join(WorkspaceDir, "conf")
DataDir = filepath.Join(WorkspaceDir, "data")
RepoDir = filepath.Join(WorkspaceDir, "repo")
HistoryDir = filepath.Join(WorkspaceDir, "history")
TempDir = filepath.Join(WorkspaceDir, "temp")
osTmpDir := filepath.Join(TempDir, "os")
os.RemoveAll(osTmpDir)
if err := os.MkdirAll(osTmpDir, 0755); nil != err {
log.Fatalf("create os tmp dir [%s] failed: %s", osTmpDir, err)
}
os.RemoveAll(filepath.Join(TempDir, "repo"))
os.Setenv("TMPDIR", osTmpDir)
os.Setenv("TEMP", osTmpDir)
os.Setenv("TMP", osTmpDir)
DBPath = filepath.Join(TempDir, DBName)
HistoryDBPath = filepath.Join(TempDir, "history.db")
BlockTreePath = filepath.Join(TempDir, "blocktree.msgpack")
SnippetsPath = filepath.Join(DataDir, "snippets")
AppearancePath = filepath.Join(ConfDir, "appearance")
ThemesPath = filepath.Join(AppearancePath, "themes")
IconsPath = filepath.Join(AppearancePath, "icons")
LogPath = filepath.Join(TempDir, "siyuan.log")
logging.SetLogPath(LogPath)
}