From c917330a5d5736a0ded9cd717250e14398ad38ab Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 18:30:17 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=8C=82=E4=BB=B6=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=97=B6=E8=BF=87=E6=BB=A4=E4=B8=8D=E7=9B=B8=E5=85=B3=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20Fix=20https://github.com/siyuan-note/siyuan/issues/?= =?UTF-8?q?7434?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/widget.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/kernel/model/widget.go b/kernel/model/widget.go index af53b5ede..937d7aeb7 100644 --- a/kernel/model/widget.go +++ b/kernel/model/widget.go @@ -29,23 +29,43 @@ import ( func SearchWidget(keyword string) (ret []*Block) { ret = []*Block{} widgets := filepath.Join(util.DataDir, "widgets") - dirs, err := os.ReadDir(widgets) + entries, err := os.ReadDir(widgets) if nil != err { logging.LogErrorf("read dir [%s] failed: %s", widgets, err) return } k := strings.ToLower(keyword) - for _, dir := range dirs { - name := strings.ToLower(dir.Name()) + for _, entry := range entries { + if !entry.IsDir() { + continue + } + + isWidgetDir := false + subEntries, readErr := os.ReadDir(filepath.Join(widgets, entry.Name())) + if nil != readErr { + logging.LogWarnf("read dir [%s] failed: %s", filepath.Join(widgets, entry.Name()), readErr) + continue + } + for _, subEntry := range subEntries { + if !subEntry.IsDir() && "widget.json" == subEntry.Name() { + isWidgetDir = true + break + } + } + if !isWidgetDir { + continue + } + + name := strings.ToLower(entry.Name()) if strings.HasPrefix(name, ".") { continue } if strings.Contains(name, k) { - name = dir.Name() + name = entry.Name() if "" != keyword { - _, name = search.MarkText(dir.Name(), keyword, 32, Conf.Search.CaseSensitive) + _, name = search.MarkText(entry.Name(), keyword, 32, Conf.Search.CaseSensitive) } b := &Block{Content: name} ret = append(ret, b)