diff --git a/kernel/api/workspace.go b/kernel/api/workspace.go index 6b07968c7..44c52df2e 100644 --- a/kernel/api/workspace.go +++ b/kernel/api/workspace.go @@ -21,11 +21,13 @@ import ( "net/http" "os" "path/filepath" + "sort" "strings" "time" "unicode/utf8" "github.com/88250/gulu" + "github.com/facette/natsort" "github.com/gin-gonic/gin" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/model" @@ -130,11 +132,23 @@ func getWorkspaces(c *gin.Context) { return } - var workspaces []*Workspace + var workspaces, openedWorkspaces, closedWorkspaces []*Workspace for _, p := range workspacePaths { closed := !util.IsWorkspaceLocked(p) - workspaces = append(workspaces, &Workspace{Path: p, Closed: closed}) + if closed { + closedWorkspaces = append(closedWorkspaces, &Workspace{Path: p, Closed: closed}) + } else { + openedWorkspaces = append(openedWorkspaces, &Workspace{Path: p, Closed: closed}) + } } + sort.Slice(openedWorkspaces, func(i, j int) bool { + return natsort.Compare(util.RemoveEmoji(filepath.Base(openedWorkspaces[i].Path)), util.RemoveEmoji(filepath.Base(openedWorkspaces[j].Path))) + }) + sort.Slice(closedWorkspaces, func(i, j int) bool { + return natsort.Compare(util.RemoveEmoji(filepath.Base(closedWorkspaces[i].Path)), util.RemoveEmoji(filepath.Base(closedWorkspaces[j].Path))) + }) + workspaces = append(workspaces, openedWorkspaces...) + workspaces = append(workspaces, closedWorkspaces...) ret.Data = workspaces }