From 5779dcb151334884d0bedc81e275fdd7ede6d8e5 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sun, 5 Jun 2022 11:40:21 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=8F=90=E4=BE=9B=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=8E=A8=E9=80=81=20API=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=20https://github.com/siyuan-note/siyuan/issues/5102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/notification.go | 61 ++++++++++++++++++++++++++++++++++++++ kernel/api/router.go | 3 ++ kernel/util/websocket.go | 14 +++++---- 3 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 kernel/api/notification.go 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 (