From 221693d93796c382d09fd72d8c2ef9142653761c Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Wed, 26 Oct 2022 20:44:45 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E8=AE=BE=E7=BD=AE=E4=BB=A3=E7=A0=81=E7=89=87?= =?UTF-8?q?=E6=AE=B5=20https://github.com/siyuan-note/siyuan/issues/6357?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/router.go | 1 + kernel/api/snippet.go | 21 +++++++++++ kernel/model/conf.go | 25 ------------- kernel/model/snippet.go | 82 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 25 deletions(-) create mode 100644 kernel/model/snippet.go diff --git a/kernel/api/router.go b/kernel/api/router.go index 6507ebd59..ba33d4ac1 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -283,5 +283,6 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/notification/pushErrMsg", model.CheckAuth, pushErrMsg) ginServer.Handle("POST", "/api/snippet/getSnippet", model.CheckAuth, getSnippet) + ginServer.Handle("POST", "/api/snippet/setSnippet", model.CheckAuth, setSnippet) ginServer.Handle("GET", "/snippets/*filepath", serveSnippets) } diff --git a/kernel/api/snippet.go b/kernel/api/snippet.go index 1b4853944..12fe7a230 100644 --- a/kernel/api/snippet.go +++ b/kernel/api/snippet.go @@ -88,3 +88,24 @@ func getSnippet(c *gin.Context) { "snippets": snippets, } } + +func setSnippet(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + name := arg["name"].(string) + typ := arg["type"].(string) + content := arg["content"].(string) + enabled := arg["enabled"].(bool) + err := model.SetSnippet(name, typ, content, enabled) + if nil != err { + ret.Code = -1 + ret.Msg = "set snippet failed: " + err.Error() + return + } +} diff --git a/kernel/model/conf.go b/kernel/model/conf.go index f652a94ec..0ea11d94f 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -696,28 +696,3 @@ func clearWorkspaceTemp() { logging.LogInfof("cleared workspace temp") } - -var loadSnippetsLock = sync.Mutex{} - -func LoadSnippets() (ret []*conf.Snippet, err error) { - loadSnippetsLock.Lock() - defer loadSnippetsLock.Unlock() - - ret = []*conf.Snippet{} - confPath := filepath.Join(util.DataDir, "snippets/conf.json") - if !gulu.File.IsExist(confPath) { - return - } - - data, err := filelock.ReadFile(confPath) - if nil != err { - logging.LogErrorf("load js snippets failed: %s", err) - return - } - - if err = gulu.JSON.UnmarshalJSON(data, &ret); nil != err { - logging.LogErrorf("unmarshal js snippets failed: %s", err) - return - } - return -} diff --git a/kernel/model/snippet.go b/kernel/model/snippet.go new file mode 100644 index 000000000..719ebc8c1 --- /dev/null +++ b/kernel/model/snippet.go @@ -0,0 +1,82 @@ +// 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 model + +import ( + "path/filepath" + "sync" + + "github.com/88250/gulu" + "github.com/siyuan-note/filelock" + "github.com/siyuan-note/logging" + "github.com/siyuan-note/siyuan/kernel/conf" + "github.com/siyuan-note/siyuan/kernel/util" +) + +var snippetsLock = sync.Mutex{} + +func SetSnippet(name, typ, content string, enabled bool) (err error) { + snippetsLock.Lock() + defer snippetsLock.Unlock() + + snippets, err := loadSnippets() + if nil != err { + return + } + snippet := &conf.Snippet{Name: name, Type: typ, Content: content, Enabled: enabled} + snippets = append(snippets, snippet) + err = writeSnippetsConf(snippets) + return +} + +func LoadSnippets() (ret []*conf.Snippet, err error) { + snippetsLock.Lock() + defer snippetsLock.Unlock() + return loadSnippets() +} + +func loadSnippets() (ret []*conf.Snippet, err error) { + ret = []*conf.Snippet{} + confPath := filepath.Join(util.DataDir, "snippets/conf.json") + if !gulu.File.IsExist(confPath) { + return + } + + data, err := filelock.ReadFile(confPath) + if nil != err { + logging.LogErrorf("load js snippets failed: %s", err) + return + } + + if err = gulu.JSON.UnmarshalJSON(data, &ret); nil != err { + logging.LogErrorf("unmarshal js snippets failed: %s", err) + return + } + return +} + +func writeSnippetsConf(snippets []*conf.Snippet) (err error) { + data, err := gulu.JSON.MarshalIndentJSON(snippets, "", " ") + if nil != err { + logging.LogErrorf("marshal snippets failed: %s", err) + return + } + + confPath := filepath.Join(util.DataDir, "snippets/conf.json") + err = filelock.WriteFile(confPath, data) + return +}