From e9d15ade0031c7a85c20f143500fc88ee365f389 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Fri, 4 Nov 2022 21:44:09 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=96=87=E6=A1=A3=E6=A0=91=E6=94=AF?= =?UTF-8?q?=E6=8C=81=20`Ctrl+Click`=20=E5=92=8C=20`Shift+=E2=86=91/?= =?UTF-8?q?=E2=86=93`=20=E8=BF=9B=E8=A1=8C=E5=A4=9A=E9=80=89=20https://git?= =?UTF-8?q?hub.com/siyuan-note/siyuan/issues/1359?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/filetree.go | 33 --------------------------- kernel/api/router.go | 1 - kernel/model/file.go | 51 +++++++++--------------------------------- 3 files changed, 10 insertions(+), 75 deletions(-) diff --git a/kernel/api/filetree.go b/kernel/api/filetree.go index 6607a43a2..b09600018 100644 --- a/kernel/api/filetree.go +++ b/kernel/api/filetree.go @@ -257,39 +257,6 @@ func getFullHPathByID(c *gin.Context) { ret.Data = hPath } -func moveDoc(c *gin.Context) { - ret := gulu.Ret.NewResult() - defer c.JSON(http.StatusOK, ret) - - arg, ok := util.JsonArg(c, ret) - if !ok { - return - } - - fromNotebook := arg["fromNotebook"].(string) - toNotebook := arg["toNotebook"].(string) - fromPath := arg["fromPath"].(string) - toPath := arg["toPath"].(string) - - newPath, err := model.MoveDoc(fromNotebook, fromPath, toNotebook, toPath) - if nil != err { - ret.Code = -1 - ret.Msg = err.Error() - ret.Data = map[string]interface{}{"closeTimeout": 7000} - return - } - - evt := util.NewCmdResult("moveDoc", 0, util.PushModeBroadcast, util.PushModeNone) - evt.Data = map[string]interface{}{ - "fromNotebook": fromNotebook, - "toNotebook": toNotebook, - "fromPath": fromPath, - "toPath": toPath, - "newPath": newPath, - } - util.PushEvent(evt) -} - func moveDocs(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index db19690a8..351f4f9d3 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -88,7 +88,6 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/filetree/renameDoc", model.CheckAuth, model.CheckReadonly, renameDoc) ginServer.Handle("POST", "/api/filetree/removeDoc", model.CheckAuth, model.CheckReadonly, removeDoc) ginServer.Handle("POST", "/api/filetree/removeDocs", model.CheckAuth, model.CheckReadonly, removeDocs) - ginServer.Handle("POST", "/api/filetree/moveDoc", model.CheckAuth, model.CheckReadonly, moveDoc) ginServer.Handle("POST", "/api/filetree/moveDocs", model.CheckAuth, model.CheckReadonly, moveDocs) ginServer.Handle("POST", "/api/filetree/duplicateDoc", model.CheckAuth, model.CheckReadonly, duplicateDoc) ginServer.Handle("POST", "/api/filetree/getHPathByPath", model.CheckAuth, getHPathByPath) diff --git a/kernel/model/file.go b/kernel/model/file.go index 0e2aeefe7..6b87d9c0b 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -1005,47 +1005,6 @@ func GetFullHPathByID(id string) (hPath string, err error) { return } -func MoveDoc(fromBoxID, fromPath, toBoxID, toPath string) (newPath string, err error) { - WaitForWritingFiles() - - if fromBoxID == toBoxID && fromPath == toPath { - return - } - - fromDir := strings.TrimSuffix(fromPath, ".sy") - if strings.HasPrefix(toPath, fromDir) { - err = errors.New(Conf.Language(87)) - return - } - - fromBox := Conf.Box(fromBoxID) - if nil == fromBox { - err = errors.New(Conf.Language(0)) - return - } - - childDepth := util.GetChildDocDepth(filepath.Join(util.DataDir, fromBoxID, fromPath)) - if depth := strings.Count(toPath, "/") + childDepth; 6 < depth && !Conf.FileTree.AllowCreateDeeper { - err = errors.New(Conf.Language(118)) - return - } - - toBox := Conf.Box(toBoxID) - if nil == toBox { - err = errors.New(Conf.Language(0)) - return - } - - newPath, err = moveDoc(fromBox, fromPath, toBox, toPath) - if nil != err { - return - } - - cache.ClearDocsIAL() - IncSync() - return -} - func MoveDocs(fromPaths []string, toBoxID, toPath string) (err error) { toBox := Conf.Box(toBoxID) if nil == toBox { @@ -1060,6 +1019,16 @@ func MoveDocs(fromPaths []string, toBoxID, toPath string) (err error) { fromPaths = util.FilterMoveDocFromPaths(fromPaths, toPath) } pathsBoxes := getBoxesByPaths(fromPaths) + + // 检查路径深度是否超过限制 + for fromPath, fromBox := range pathsBoxes { + childDepth := util.GetChildDocDepth(filepath.Join(util.DataDir, fromBox.ID, fromPath)) + if depth := strings.Count(toPath, "/") + childDepth; 6 < depth && !Conf.FileTree.AllowCreateDeeper { + err = errors.New(Conf.Language(118)) + return + } + } + needShowProgress := 32 < len(fromPaths) if needShowProgress { util.PushEndlessProgress(Conf.Language(116))