diff --git a/kernel/api/router.go b/kernel/api/router.go index f1052b81a..b854a1ddc 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -46,6 +46,8 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/system/setNetworkProxy", model.CheckAuth, setNetworkProxy) ginServer.Handle("POST", "/api/system/setWorkspaceDir", model.CheckAuth, setWorkspaceDir) ginServer.Handle("POST", "/api/system/listWorkspaceDirs", model.CheckAuth, listWorkspaceDirs) + ginServer.Handle("POST", "/api/system/createWorkspaceDir", model.CheckAuth, createWorkspaceDir) + ginServer.Handle("POST", "/api/system/removeWorkspaceDir", model.CheckAuth, removeWorkspaceDir) ginServer.Handle("POST", "/api/system/setAppearanceMode", model.CheckAuth, setAppearanceMode) ginServer.Handle("POST", "/api/system/getSysFonts", model.CheckAuth, getSysFonts) ginServer.Handle("POST", "/api/system/exit", model.CheckAuth, exit) diff --git a/kernel/api/workspace.go b/kernel/api/workspace.go index 7078536e2..8def3b3ce 100644 --- a/kernel/api/workspace.go +++ b/kernel/api/workspace.go @@ -30,6 +30,75 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func createWorkspaceDir(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + path := arg["path"].(string) + if gulu.File.IsExist(path) { + ret.Code = -1 + ret.Msg = model.Conf.Language(78) + return + } + + if err := os.MkdirAll(path, 0755); nil != err { + ret.Code = -1 + ret.Msg = fmt.Sprintf("create workspace dir [%s] failed: %s", path, err) + return + } + +} + +func removeWorkspaceDir(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + path := arg["path"].(string) + + var workspacePaths []string + workspaceConf := filepath.Join(util.HomeDir, ".config", "siyuan", "workspace.json") + data, err := os.ReadFile(workspaceConf) + if nil != err { + logging.LogErrorf("read workspace conf failed: %s", err) + } else { + if err = gulu.JSON.UnmarshalJSON(data, &workspacePaths); nil != err { + logging.LogErrorf("unmarshal workspace conf failed: %s", err) + } + } + + workspacePaths = gulu.Str.RemoveElem(workspacePaths, path) + if data, err = gulu.JSON.MarshalJSON(workspacePaths); nil != err { + msg := fmt.Sprintf("marshal workspace conf [%s] failed: %s", workspaceConf, err) + ret.Code = -1 + ret.Msg = msg + return + } + + if err = gulu.File.WriteFileSafer(workspaceConf, data, 0644); nil != err { + msg := fmt.Sprintf("write workspace conf [%s] failed: %s", workspaceConf, err) + ret.Code = -1 + ret.Msg = msg + return + } + + if err = os.RemoveAll(path); nil != err { + msg := fmt.Sprintf("remove workspace dir [%s] failed: %s", path, err) + ret.Code = -1 + ret.Msg = msg + return + } +} + func listWorkspaceDirs(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret)