From 72e966af84c6806550f0ea9dafb9c18b4eef15b5 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Sat, 3 Dec 2022 23:26:15 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=90=9C=E7=B4=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E6=9F=A5=E8=AF=A2=20https://github.com/siyua?= =?UTF-8?q?n-note/siyuan/issues/6589?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/router.go | 1 + kernel/api/setting.go | 37 ++++++++++++++++++++++++++++++ kernel/conf/criterion.go | 47 ++++++++++++++++++++++++++++++++++++++ kernel/model/conf.go | 49 ++++++++++++++++++++-------------------- 4 files changed, 110 insertions(+), 24 deletions(-) create mode 100644 kernel/conf/criterion.go diff --git a/kernel/api/router.go b/kernel/api/router.go index e878a2a15..4bd1ec701 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -245,6 +245,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/setting/setExport", model.CheckAuth, setExport) ginServer.Handle("POST", "/api/setting/setFiletree", model.CheckAuth, setFiletree) ginServer.Handle("POST", "/api/setting/setSearch", model.CheckAuth, setSearch) + ginServer.Handle("POST", "/api/setting/setCriterion", model.CheckAuth, setCriterion) ginServer.Handle("POST", "/api/setting/setKeymap", model.CheckAuth, setKeymap) ginServer.Handle("POST", "/api/setting/setAppearance", model.CheckAuth, setAppearance) ginServer.Handle("POST", "/api/setting/getCloudUser", model.CheckAuth, getCloudUser) diff --git a/kernel/api/setting.go b/kernel/api/setting.go index 3848dd326..0f5fe9204 100644 --- a/kernel/api/setting.go +++ b/kernel/api/setting.go @@ -219,6 +219,43 @@ func setSearch(c *gin.Context) { ret.Data = s } +func setCriterion(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + param, err := gulu.JSON.MarshalJSON(arg["criterion"]) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } + + criterion := &conf.Criterion{} + if err = gulu.JSON.UnmarshalJSON(param, criterion); nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } + + update := false + for i, criteria := range model.Conf.Criteria { + if criteria.Name == criterion.Name { + model.Conf.Criteria[i] = criterion + update = true + break + } + } + if !update { + model.Conf.Criteria = append(model.Conf.Criteria, criterion) + } + model.Conf.Save() +} + func setKeymap(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/conf/criterion.go b/kernel/conf/criterion.go new file mode 100644 index 000000000..e2a86b9f7 --- /dev/null +++ b/kernel/conf/criterion.go @@ -0,0 +1,47 @@ +// 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 conf + +type Criterion struct { + Name string `json:"name"` + Sort int `json:"sort"` // 0:按块类型(默认),1:按创建时间升序,2:按创建时间降序,3:按更新时间升序,4:按更新时间降序,5:按内容顺序(仅在按文档分组时) + Group int `json:"group"` // 0:不分组,1:按文档分组 + Layout int `json:"layout"` // 0:上下,1:左右 + HasReplace bool `json:"hasReplace"` // 是否有替换 + Method int `json:"method"` // 0:文本,1:查询语法,2:SQL,3:正则表达式 + HPath string `json:"hPath"` + IDPath []string `json:"idPath"` + K string `json:"k"` // 搜索关键字 + R string `json:"r"` // 替换关键字 + ReplaceList []string `json:"replaceList"` // 替换候选列表 + List []string `json:"list"` // 搜索候选列表 + Types *CriterionTypes `json:"types"` // 类型过滤选项 +} + +type CriterionTypes struct { + mathBlock bool + table bool + blockquote bool + superBlock bool + paragraph bool + document bool + heading bool + list bool + listItem bool + codeBlock bool + htmlBlock bool +} diff --git a/kernel/model/conf.go b/kernel/model/conf.go index ce42efa38..76baba671 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -46,30 +46,31 @@ var Conf *AppConf // AppConf 维护应用元数据,保存在 ~/.siyuan/conf.json。 type AppConf struct { - LogLevel string `json:"logLevel"` // 日志级别:Off, Trace, Debug, Info, Warn, Error, Fatal - Appearance *conf.Appearance `json:"appearance"` // 外观 - Langs []*conf.Lang `json:"langs"` // 界面语言列表 - Lang string `json:"lang"` // 选择的界面语言,同 Appearance.Lang - FileTree *conf.FileTree `json:"fileTree"` // 文档面板 - Tag *conf.Tag `json:"tag"` // 标签面板 - Editor *conf.Editor `json:"editor"` // 编辑器配置 - Export *conf.Export `json:"export"` // 导出配置 - Graph *conf.Graph `json:"graph"` // 关系图配置 - UILayout *conf.UILayout `json:"uiLayout"` // 界面布局 - UserData string `json:"userData"` // 社区用户信息,对 User 加密存储 - User *conf.User `json:"-"` // 社区用户内存结构,不持久化 - Account *conf.Account `json:"account"` // 帐号配置 - ReadOnly bool `json:"readonly"` // 是否是以只读模式运行 - LocalIPs []string `json:"localIPs"` // 本地 IP 列表 - AccessAuthCode string `json:"accessAuthCode"` // 访问授权码 - System *conf.System `json:"system"` // 系统配置 - Keymap *conf.Keymap `json:"keymap"` // 快捷键配置 - Sync *conf.Sync `json:"sync"` // 同步配置 - Search *conf.Search `json:"search"` // 搜索配置 - Stat *conf.Stat `json:"stat"` // 统计 - Api *conf.API `json:"api"` // API - Repo *conf.Repo `json:"repo"` // 数据仓库 - Newbie bool `json:"newbie"` // 是否是安装后第一次启动 + LogLevel string `json:"logLevel"` // 日志级别:Off, Trace, Debug, Info, Warn, Error, Fatal + Appearance *conf.Appearance `json:"appearance"` // 外观 + Langs []*conf.Lang `json:"langs"` // 界面语言列表 + Lang string `json:"lang"` // 选择的界面语言,同 Appearance.Lang + FileTree *conf.FileTree `json:"fileTree"` // 文档面板 + Tag *conf.Tag `json:"tag"` // 标签面板 + Editor *conf.Editor `json:"editor"` // 编辑器配置 + Export *conf.Export `json:"export"` // 导出配置 + Graph *conf.Graph `json:"graph"` // 关系图配置 + UILayout *conf.UILayout `json:"uiLayout"` // 界面布局 + UserData string `json:"userData"` // 社区用户信息,对 User 加密存储 + User *conf.User `json:"-"` // 社区用户内存结构,不持久化 + Account *conf.Account `json:"account"` // 帐号配置 + ReadOnly bool `json:"readonly"` // 是否是以只读模式运行 + LocalIPs []string `json:"localIPs"` // 本地 IP 列表 + AccessAuthCode string `json:"accessAuthCode"` // 访问授权码 + System *conf.System `json:"system"` // 系统配置 + Keymap *conf.Keymap `json:"keymap"` // 快捷键配置 + Sync *conf.Sync `json:"sync"` // 同步配置 + Search *conf.Search `json:"search"` // 搜索配置 + Stat *conf.Stat `json:"stat"` // 统计 + Api *conf.API `json:"api"` // API + Repo *conf.Repo `json:"repo"` // 数据仓库 + Newbie bool `json:"newbie"` // 是否是安装后第一次启动 + Criteria []*conf.Criterion `json:"criteria"` // 搜索查询 } func InitConf() {