Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
25b8f08470
4 changed files with 101 additions and 39 deletions
|
@ -32,16 +32,16 @@ import (
|
|||
_ "golang.org/x/mobile/bind"
|
||||
)
|
||||
|
||||
func StartKernelFast(container, appDir, workspaceDir, nativeLibDir, privateDataDir, localIP string) {
|
||||
func StartKernelFast(container, appDir, workspaceBaseDir, localIPs string) {
|
||||
go server.Serve(true)
|
||||
}
|
||||
|
||||
func StartKernel(container, appDir, workspaceDir, nativeLibDir, privateDataDir, timezoneID, localIPs, lang string) {
|
||||
func StartKernel(container, appDir, workspaceBaseDir, timezoneID, localIPs, lang string) {
|
||||
SetTimezone(container, appDir, timezoneID)
|
||||
util.Mode = "prod"
|
||||
|
||||
util.LocalIPs = strings.Split(localIPs, ",")
|
||||
util.BootMobile(container, appDir, workspaceDir, nativeLibDir, privateDataDir, lang)
|
||||
util.BootMobile(container, appDir, workspaceBaseDir, lang)
|
||||
|
||||
model.InitConf()
|
||||
go server.Serve(false)
|
||||
|
|
|
@ -36,7 +36,7 @@ const (
|
|||
ExitCodeUnavailablePort = 21 // 端口不可用
|
||||
ExitCodeCreateConfDirErr = 22 // 创建配置目录失败
|
||||
ExitCodeBlockTreeErr = 23 // 无法读写 blocktree.msgpack 文件
|
||||
ExitCodeWorkspaceLocked = 24 // 工作区已被锁定
|
||||
ExitCodeWorkspaceLocked = 24 // 工作空间已被锁定
|
||||
ExitCodeOk = 0 // 正常退出
|
||||
ExitCodeFatal = 1 // 致命错误
|
||||
)
|
||||
|
|
|
@ -176,9 +176,6 @@ var (
|
|||
IconsPath string // 配置目录下的外观目录下的 icons/ 路径
|
||||
SnippetsPath string // 数据目录下的 snippets/ 路径
|
||||
|
||||
AndroidNativeLibDir string // Android 库路径
|
||||
AndroidPrivateDataDir string // Android 私有数据路径
|
||||
|
||||
UIProcessIDs = sync.Map{} // UI 进程 ID
|
||||
|
||||
IsNewbie bool // 是否是第一次安装
|
||||
|
@ -210,7 +207,7 @@ func initWorkspaceDir(workspaceArg string) {
|
|||
WorkspaceDir = workspaceArg
|
||||
}
|
||||
if !gulu.File.IsDir(WorkspaceDir) {
|
||||
log.Printf("use the default workspace [%s] since the specified workspace [%s] is not a dir", WorkspaceDir, defaultWorkspaceDir)
|
||||
log.Printf("use the default workspace [%s] since the specified workspace [%s] is not a dir", defaultWorkspaceDir, WorkspaceDir)
|
||||
WorkspaceDir = defaultWorkspaceDir
|
||||
}
|
||||
workspacePaths = append(workspacePaths, WorkspaceDir)
|
||||
|
@ -220,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) {
|
||||
|
|
|
@ -17,9 +17,11 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"log"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/88250/gulu"
|
||||
|
@ -28,47 +30,110 @@ import (
|
|||
"github.com/siyuan-note/logging"
|
||||
)
|
||||
|
||||
func BootMobile(container, appDir, workspaceDir, nativeLibDir, privateDataDir, lang string) {
|
||||
func BootMobile(container, appDir, workspaceBaseDir, lang string) {
|
||||
IncBootProgress(3, "Booting...")
|
||||
rand.Seed(time.Now().UTC().UnixNano())
|
||||
initMime()
|
||||
initHttpClient()
|
||||
|
||||
HomeDir = filepath.Join(workspaceDir, "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")
|
||||
AndroidNativeLibDir = nativeLibDir
|
||||
AndroidPrivateDataDir = privateDataDir
|
||||
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", defaultWorkspaceDir, WorkspaceDir)
|
||||
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
Reference in a new issue