diff --git a/kernel/api/notification.go b/kernel/api/notification.go new file mode 100644 index 000000000..19dfe3877 --- /dev/null +++ b/kernel/api/notification.go @@ -0,0 +1,61 @@ +// SiYuan - Build Your Eternal Digital Garden +// Copyright (c) 2020-present, b3log.org +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package api + +import ( + "net/http" + + "github.com/88250/gulu" + "github.com/gin-gonic/gin" + "github.com/siyuan-note/siyuan/kernel/util" +) + +func pushMsg(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + msg := arg["msg"].(string) + timeout := int(arg["timeout"].(float64)) + msgId := util.PushMsg(msg, timeout) + + ret.Data = map[string]interface{}{ + "id": msgId, + } +} + +func pushErrMsg(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + msg := arg["msg"].(string) + timeout := int(arg["timeout"].(float64)) + msgId := util.PushErrMsg(msg, timeout) + + ret.Data = map[string]interface{}{ + "id": msgId, + } +} diff --git a/kernel/api/router.go b/kernel/api/router.go index 04cf706e4..cd8c74ab0 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -245,4 +245,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/bazaar/installBazaarTheme", model.CheckAuth, installBazaarTheme) ginServer.Handle("POST", "/api/bazaar/uninstallBazaarTheme", model.CheckAuth, uninstallBazaarTheme) ginServer.Handle("POST", "/api/bazaar/getBazaarPackageREAME", model.CheckAuth, getBazaarPackageREAME) + + ginServer.Handle("POST", "/api/notification/pushMsg", model.CheckAuth, pushMsg) + ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg) } diff --git a/kernel/util/websocket.go b/kernel/util/websocket.go index dab7fe9d1..c1b19eab8 100644 --- a/kernel/util/websocket.go +++ b/kernel/util/websocket.go @@ -127,14 +127,16 @@ func PushTxErr(msg string, code int, data interface{}) { BroadcastByType("main", "txerr", code, msg, data) } -func PushMsg(msg string, timeout int) string { - ret := gulu.Rand.String(7) - BroadcastByType("main", "msg", 0, msg, map[string]interface{}{"id": ret, "closeTimeout": timeout}) - return ret +func PushMsg(msg string, timeout int) (msgId string) { + msgId = gulu.Rand.String(7) + BroadcastByType("main", "msg", 0, msg, map[string]interface{}{"id": msgId, "closeTimeout": timeout}) + return } -func PushErrMsg(msg string, timeout int) { - BroadcastByType("main", "msg", -1, msg, map[string]interface{}{"closeTimeout": timeout}) +func PushErrMsg(msg string, timeout int) (msgId string) { + msgId = gulu.Rand.String(7) + BroadcastByType("main", "msg", -1, msg, map[string]interface{}{"id": msgId, "closeTimeout": timeout}) + return } const (