浏览代码

:art: 搜索支持命名查询 https://github.com/siyuan-note/siyuan/issues/6589

Liang Ding 2 年之前
父节点
当前提交
72e966af84
共有 4 个文件被更改,包括 110 次插入24 次删除
  1. 1 0
      kernel/api/router.go
  2. 37 0
      kernel/api/setting.go
  3. 47 0
      kernel/conf/criterion.go
  4. 25 24
      kernel/model/conf.go

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

+ 37 - 0
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)

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

+ 25 - 24
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() {