diff --git a/kernel/api/filetree.go b/kernel/api/filetree.go index f0b867227..5187c6c84 100644 --- a/kernel/api/filetree.go +++ b/kernel/api/filetree.go @@ -80,6 +80,12 @@ func moveLocalShorthands(c *gin.Context) { ret.Msg = err.Error() return } + if "" == id { + ret.Code = 1 + ret.Msg = "No local shorthand need to move" + return + } + ret.Data = id model.FlushTxQueue() diff --git a/kernel/api/router.go b/kernel/api/router.go index f4788bf91..8c43706ee 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -126,6 +126,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/filetree/upsertIndexes", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, upsertIndexes) ginServer.Handle("POST", "/api/filetree/removeIndexes", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, removeIndexes) ginServer.Handle("POST", "/api/filetree/listDocTree", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, listDocTree) + ginServer.Handle("POST", "/api/filetree/moveLocalShorthands", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, moveLocalShorthands) ginServer.Handle("POST", "/api/format/autoSpace", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, autoSpace) ginServer.Handle("POST", "/api/format/netImg2LocalAssets", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, netImg2LocalAssets) diff --git a/kernel/job/cron.go b/kernel/job/cron.go index 7255631f2..133c2fbd7 100644 --- a/kernel/job/cron.go +++ b/kernel/job/cron.go @@ -44,6 +44,7 @@ func StartCron() { go every(30*time.Second, model.HookDesktopUIProcJob) go every(24*time.Hour, model.AutoPurgeRepoJob) go every(30*time.Minute, model.AutoCheckMicrosoftDefender) + go every(3*time.Second, model.WatchLocalShorthands) } func every(interval time.Duration, f func()) { diff --git a/kernel/model/shortcuts.go b/kernel/model/shortcuts.go index 9f53f75b0..53dd42037 100644 --- a/kernel/model/shortcuts.go +++ b/kernel/model/shortcuts.go @@ -33,7 +33,7 @@ func MoveLocalShorthands(boxID, hPath, parentID, id string) (retID string, err e return } - dir, err := os.ReadDir(shorthandsDir) + entries, err := os.ReadDir(shorthandsDir) if nil != err { logging.LogErrorf("read dir [%s] failed: %s", shorthandsDir, err) return @@ -41,7 +41,7 @@ func MoveLocalShorthands(boxID, hPath, parentID, id string) (retID string, err e buff := bytes.Buffer{} var toRemoves []string - for _, entry := range dir { + for _, entry := range entries { if entry.IsDir() { continue } @@ -88,3 +88,35 @@ func MoveLocalShorthands(boxID, hPath, parentID, id string) (retID string, err e clearShorthand(toRemoves) return } + +func WatchLocalShorthands() { + shorthandsDir := filepath.Join(util.ShortcutsPath, "shorthands") + if !gulu.File.IsDir(shorthandsDir) { + return + } + + entries, err := os.ReadDir(shorthandsDir) + if nil != err { + logging.LogErrorf("read dir [%s] failed: %s", shorthandsDir, err) + return + } + + shorthandCount := 0 + for _, entry := range entries { + if entry.IsDir() { + continue + } + + if filepath.Ext(entry.Name()) != ".md" { + continue + } + + shorthandCount++ + } + + if 1 > shorthandCount { + return + } + + util.PushLocalShorthandCount(shorthandCount) +} diff --git a/kernel/util/websocket.go b/kernel/util/websocket.go index 954c427ed..6ba724266 100644 --- a/kernel/util/websocket.go +++ b/kernel/util/websocket.go @@ -275,6 +275,10 @@ func PushSetDefRefCount(rootID, blockID string, defIDs []string, refCount, rootR BroadcastByType("main", "setDefRefCount", 0, "", map[string]interface{}{"rootID": rootID, "blockID": blockID, "refCount": refCount, "rootRefCount": rootRefCount, "defIDs": defIDs}) } +func PushLocalShorthandCount(count int) { + BroadcastByType("main", "setLocalShorthandCount", 0, "", map[string]interface{}{"count": count}) +} + func PushProtyleLoading(rootID, msg string) { BroadcastByType("protyle", "addLoading", 0, msg, rootID) }