mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 22:50:13 +01:00
🎨 移动端支持多工作空间 https://github.com/siyuan-note/siyuan/issues/4642
This commit is contained in:
parent
fb7361d98b
commit
a9cb87787e
2 changed files with 95 additions and 29 deletions
|
|
@ -217,7 +217,7 @@ func initWorkspaceDir(workspaceArg string) {
|
||||||
log.Printf("unmarshal workspace conf [%s] failed: %s", workspaceConf, err)
|
log.Printf("unmarshal workspace conf [%s] failed: %s", workspaceConf, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp := workspacePaths[:0]
|
var tmp []string
|
||||||
for _, d := range workspacePaths {
|
for _, d := range workspacePaths {
|
||||||
d = strings.TrimRight(d, " \t\n") // 去掉工作空间路径尾部空格 https://github.com/siyuan-note/siyuan/issues/6353
|
d = strings.TrimRight(d, " \t\n") // 去掉工作空间路径尾部空格 https://github.com/siyuan-note/siyuan/issues/6353
|
||||||
if gulu.File.IsDir(d) {
|
if gulu.File.IsDir(d) {
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,11 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/88250/gulu"
|
"github.com/88250/gulu"
|
||||||
|
|
@ -33,41 +35,105 @@ func BootMobile(container, appDir, workspaceBaseDir, lang string) {
|
||||||
rand.Seed(time.Now().UTC().UnixNano())
|
rand.Seed(time.Now().UTC().UnixNano())
|
||||||
initMime()
|
initMime()
|
||||||
initHttpClient()
|
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
|
ServerPort = FixedPort
|
||||||
Container = container
|
Container = container
|
||||||
UserAgent = UserAgent + " " + Container
|
UserAgent = UserAgent + " " + Container
|
||||||
httpclient.SetUserAgent(UserAgent)
|
httpclient.SetUserAgent(UserAgent)
|
||||||
Lang = lang
|
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()
|
initPathDir()
|
||||||
bootBanner := figure.NewFigure("SiYuan", "", true)
|
bootBanner := figure.NewFigure("SiYuan", "", true)
|
||||||
logging.LogInfof("\n" + bootBanner.String())
|
logging.LogInfof("\n" + bootBanner.String())
|
||||||
logBootInfo()
|
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)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue