diff --git a/kernel/model/file.go b/kernel/model/file.go index eb18bf34c..efcaebf70 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -992,11 +992,6 @@ func MoveDoc(fromBoxID, fromPath, toBoxID, toPath string) (newPath string, err e return } - if depth := strings.Count(toPath, "/"); 6 < depth && !Conf.FileTree.AllowCreateDeeper { - err = errors.New(Conf.Language(118)) - return - } - fromDir := strings.TrimSuffix(fromPath, ".sy") if strings.HasPrefix(toPath, fromDir) { err = errors.New(Conf.Language(87)) @@ -1016,6 +1011,12 @@ func MoveDoc(fromBoxID, fromPath, toBoxID, toPath string) (newPath string, err e 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)) diff --git a/kernel/util/path.go b/kernel/util/path.go index f630f7a81..26be07a28 100644 --- a/kernel/util/path.go +++ b/kernel/util/path.go @@ -21,6 +21,7 @@ import ( "net" "os" "path" + "path/filepath" "strings" "time" @@ -138,3 +139,23 @@ func TimeFromID(id string) (ret string) { ret = id[:14] return } + +func GetChildDocDepth(treeAbsPath string) (ret int) { + dir := strings.TrimSuffix(treeAbsPath, ".sy") + if !gulu.File.IsDir(dir) { + return + } + + baseDepth := strings.Count(filepath.ToSlash(treeAbsPath), "/") + depth := 1 + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + p := filepath.ToSlash(path) + currentDepth := strings.Count(p, "/") + if depth < currentDepth { + depth = currentDepth + } + return nil + }) + ret = depth - baseDepth + return +}