🎨 Attribute View number column format https://github.com/siyuan-note/siyuan/issues/8764
This commit is contained in:
parent
7d992ce175
commit
afb698d1fe
4 changed files with 61 additions and 11 deletions
|
@ -17,6 +17,12 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/88250/gulu"
|
||||
"github.com/88250/lute/ast"
|
||||
"github.com/siyuan-note/eventbus"
|
||||
|
@ -25,11 +31,48 @@ import (
|
|||
"github.com/siyuan-note/siyuan/kernel/sql"
|
||||
"github.com/siyuan-note/siyuan/kernel/task"
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
"io/fs"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var assetContentSearcher = NewAssetsSearcher()
|
||||
|
||||
func IndexAssetContent(absPath string) {
|
||||
assetsDir := util.GetDataAssetsAbsPath()
|
||||
|
||||
ext := strings.ToLower(filepath.Ext(absPath))
|
||||
parser, found := assetContentSearcher.Parsers[ext]
|
||||
if !found {
|
||||
return
|
||||
}
|
||||
|
||||
result := parser.Parse(absPath)
|
||||
if nil == result {
|
||||
return
|
||||
}
|
||||
|
||||
info, err := os.Stat(absPath)
|
||||
if nil != err {
|
||||
logging.LogErrorf("stat [%s] failed: %s", absPath, err)
|
||||
return
|
||||
}
|
||||
|
||||
p := "assets" + filepath.ToSlash(strings.TrimPrefix(absPath, assetsDir))
|
||||
|
||||
assetContents := []*sql.AssetContent{
|
||||
{
|
||||
ID: ast.NewNodeID(),
|
||||
Name: filepath.Base(p),
|
||||
Ext: filepath.Ext(p),
|
||||
Path: p,
|
||||
Size: info.Size(),
|
||||
Updated: info.ModTime().Unix(),
|
||||
Content: result.Content,
|
||||
},
|
||||
}
|
||||
|
||||
sql.DeleteAssetContentsByPathQueue(p)
|
||||
sql.IndexAssetContentsQueue(assetContents)
|
||||
}
|
||||
|
||||
func ReindexAssetContent() {
|
||||
task.AppendTask(task.AssetContentDatabaseIndexFull, fullReindexAssetContent)
|
||||
return
|
||||
|
@ -39,8 +82,7 @@ func fullReindexAssetContent() {
|
|||
util.PushMsg(Conf.Language(216), 7*1000)
|
||||
sql.InitAssetContentDatabase(true)
|
||||
|
||||
assetsSearch := NewAssetsSearcher()
|
||||
assetsSearch.Index()
|
||||
assetContentSearcher.FullIndex()
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -59,12 +101,13 @@ var (
|
|||
)
|
||||
|
||||
type AssetsSearcher struct {
|
||||
AssetsDir string
|
||||
Parsers map[string]AssetParser
|
||||
Parsers map[string]AssetParser
|
||||
|
||||
lock *sync.Mutex
|
||||
}
|
||||
|
||||
func (searcher *AssetsSearcher) Index() {
|
||||
assetsDir := searcher.AssetsDir
|
||||
func (searcher *AssetsSearcher) FullIndex() {
|
||||
assetsDir := util.GetDataAssetsAbsPath()
|
||||
if !gulu.File.IsDir(assetsDir) {
|
||||
return
|
||||
}
|
||||
|
@ -116,10 +159,11 @@ func (searcher *AssetsSearcher) Index() {
|
|||
|
||||
func NewAssetsSearcher() *AssetsSearcher {
|
||||
return &AssetsSearcher{
|
||||
AssetsDir: util.GetDataAssetsAbsPath(),
|
||||
Parsers: map[string]AssetParser{
|
||||
".txt": &TxtAssetParser{},
|
||||
},
|
||||
|
||||
lock: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -87,6 +87,9 @@ func watchAssets() {
|
|||
|
||||
// 重新缓存资源文件,以便使用 /资源 搜索
|
||||
go cache.LoadAssets()
|
||||
|
||||
// 索引资源文件内容
|
||||
IndexAssetContent(lastEvent.Name)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
|
|
@ -59,6 +59,9 @@ func watchAssets() {
|
|||
|
||||
// 重新缓存资源文件,以便使用 /资源 搜索
|
||||
go cache.LoadAssets()
|
||||
|
||||
// 索引资源文件内容
|
||||
IndexAssetContent(event.Path)
|
||||
case err, ok := <-assetsWatcher.Error:
|
||||
if !ok {
|
||||
return
|
||||
|
|
|
@ -111,7 +111,7 @@ func execAssetContentOp(op *assetContentDBQueueOperation, tx *sql.Tx, context ma
|
|||
switch op.action {
|
||||
case "index":
|
||||
err = insertAssetContents(tx, op.assetContents, context)
|
||||
case "delete":
|
||||
case "deletePath":
|
||||
err = deleteAssetContentsByPath(tx, op.path, context)
|
||||
default:
|
||||
msg := fmt.Sprintf("unknown asset content operation [%s]", op.action)
|
||||
|
|
Loading…
Add table
Reference in a new issue