瀏覽代碼

:art: 支持通过界面设置代码片段 https://github.com/siyuan-note/siyuan/issues/6357

Liang Ding 2 年之前
父節點
當前提交
221693d937
共有 4 個文件被更改,包括 104 次插入25 次删除
  1. 1 0
      kernel/api/router.go
  2. 21 0
      kernel/api/snippet.go
  3. 0 25
      kernel/model/conf.go
  4. 82 0
      kernel/model/snippet.go

+ 1 - 0
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)
 }

+ 21 - 0
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
+	}
+}

+ 0 - 25
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
-}

+ 82 - 0
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 <https://www.gnu.org/licenses/>.
+
+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
+}