From 740761fcc871ce8be72326d4e5d34a15f1348259 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 10:15:57 +0800 Subject: [PATCH 1/8] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=9C=A8=20All?= =?UTF-8?q?=20=E5=8D=A1=E5=8C=85=E4=B8=AD=E7=A7=BB=E9=99=A4=E9=97=AA?= =?UTF-8?q?=E5=8D=A1=20Fix=20https://github.com/siyuan-note/siyuan/issues/?= =?UTF-8?q?7425?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/flashcard.go | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 61d6ba695..4d55ccd6c 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -379,9 +379,11 @@ func RemoveFlashcards(deckID string, blockIDs []string) (err error) { deckAttrs := node.IALAttr("custom-riff-decks") var deckIDs []string - for _, dID := range strings.Split(deckAttrs, ",") { - if dID != deckID && gulu.Str.Contains(dID, availableDeckIDs) { - deckIDs = append(deckIDs, dID) + if "" != deckID { + for _, dID := range strings.Split(deckAttrs, ",") { + if dID != deckID && gulu.Str.Contains(dID, availableDeckIDs) { + deckIDs = append(deckIDs, dID) + } } } @@ -410,20 +412,32 @@ func RemoveFlashcards(deckID string, blockIDs []string) (err error) { pushBroadcastAttrTransactions(trans) } - deck := Decks[deckID] - if nil != deck { - for _, blockID := range blockIDs { - deck.RemoveCard(blockID) - } - err = deck.Save() - if nil != err { - logging.LogErrorf("save deck [%s] failed: %s", deckID, err) - return + if "" == deckID { // 支持在 All 卡包中移除闪卡 https://github.com/siyuan-note/siyuan/issues/7425 + for _, deck := range Decks { + removeFlashcard(blockIDs, deck) } + } else { + removeFlashcard(blockIDs, Decks[deckID]) } return } +func removeFlashcard(blockIDs []string, deck *riff.Deck) { + if nil == deck { + logging.LogErrorf("deck is nil") + return + } + + for _, blockID := range blockIDs { + deck.RemoveCard(blockID) + } + + err := deck.Save() + if nil != err { + logging.LogErrorf("save deck [%s] failed: %s", deck.ID, err) + } +} + func AddFlashcards(deckID string, blockIDs []string) (err error) { deckLock.Lock() defer deckLock.Unlock() From 6faff1109c5e317071cb4d850686859c221b731b Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 10:48:51 +0800 Subject: [PATCH 2/8] =?UTF-8?q?:bug:=20=E5=A4=8D=E5=88=B6=E5=90=AB?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=9A=84=E5=9D=97=E4=B8=BA=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=9D=97=E5=BC=82=E5=B8=B8=20Fix=20https://github.com/siyuan-n?= =?UTF-8?q?ote/siyuan/issues/7426?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/blockial.go | 2 +- kernel/model/render.go | 4 ++-- kernel/model/virutalref.go | 2 +- kernel/sql/database.go | 8 +++++--- kernel/treenode/node.go | 10 ++-------- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/kernel/model/blockial.go b/kernel/model/blockial.go index d09f566c6..08e56d495 100644 --- a/kernel/model/blockial.go +++ b/kernel/model/blockial.go @@ -63,7 +63,7 @@ func SetBlockReminder(id string, timed string) (err error) { if ast.NodeDocument != node.Type && node.IsContainerBlock() { node = treenode.FirstLeafBlock(node) } - content := treenode.NodeStaticContent(node, nil) + content := treenode.NodeStaticContent(node, nil, false) content = gulu.Str.SubStr(content, 128) err = SetCloudBlockReminder(id, content, timedMills) if nil != err { diff --git a/kernel/model/render.go b/kernel/model/render.go index 73047513c..10198ea25 100644 --- a/kernel/model/render.go +++ b/kernel/model/render.go @@ -78,7 +78,7 @@ func renderOutline(node *ast.Node, luteEngine *lute.Lute) (ret string) { } func renderBlockText(node *ast.Node, excludeTypes []string) (ret string) { - ret = treenode.NodeStaticContent(node, excludeTypes) + ret = treenode.NodeStaticContent(node, excludeTypes, false) ret = strings.TrimSpace(ret) ret = strings.ReplaceAll(ret, "\n", "") ret = util.EscapeHTML(ret) @@ -141,7 +141,7 @@ func renderBlockContentByNodes(nodes []*ast.Node) string { buf := bytes.Buffer{} for _, n := range subNodes { - buf.WriteString(treenode.NodeStaticContent(n, nil)) + buf.WriteString(treenode.NodeStaticContent(n, nil, false)) } return buf.String() } diff --git a/kernel/model/virutalref.go b/kernel/model/virutalref.go index f16defad2..0130b1469 100644 --- a/kernel/model/virutalref.go +++ b/kernel/model/virutalref.go @@ -51,7 +51,7 @@ func getBlockVirtualRefKeywords(root *ast.Node) (ret []string) { return ast.WalkContinue } - content := treenode.NodeStaticContent(n, nil) + content := treenode.NodeStaticContent(n, nil, false) buf.WriteString(content) return ast.WalkContinue }) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 0187e20cd..502a87eb4 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -699,9 +699,10 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes fcontent = content length = utf8.RuneCountInString(fcontent) } else if n.IsContainerBlock() { - markdown, content = treenode.NodeStaticMdContent(n, luteEngine) + markdown = treenode.ExportNodeStdMd(n, luteEngine) + content = treenode.NodeStaticContent(n, nil, true) fc := treenode.FirstLeafBlock(n) - fcontent = treenode.NodeStaticContent(fc, nil) + fcontent = treenode.NodeStaticContent(fc, nil, false) parentID = n.Parent.ID // 将标题块作为父节点 if h := heading(n); nil != h { @@ -709,7 +710,8 @@ func buildBlockFromNode(n *ast.Node, tree *parse.Tree) (block *Block, attributes } length = utf8.RuneCountInString(fcontent) } else { - markdown, content = treenode.NodeStaticMdContent(n, luteEngine) + markdown = treenode.ExportNodeStdMd(n, luteEngine) + content = treenode.NodeStaticContent(n, nil, true) parentID = n.Parent.ID // 将标题块作为父节点 if h := heading(n); nil != h { diff --git a/kernel/treenode/node.go b/kernel/treenode/node.go index d94b5eda8..e2eb2528a 100644 --- a/kernel/treenode/node.go +++ b/kernel/treenode/node.go @@ -114,12 +114,6 @@ func IsEmbedBlockRef(n *ast.Node) bool { return "" != GetEmbedBlockRef(n) } -func NodeStaticMdContent(node *ast.Node, luteEngine *lute.Lute) (md, content string) { - md = ExportNodeStdMd(node, luteEngine) - content = NodeStaticContent(node, nil) - return -} - func FormatNode(node *ast.Node, luteEngine *lute.Lute) string { markdown, err := lute.FormatNodeSync(node, luteEngine.ParseOptions, luteEngine.RenderOptions) if nil != err { @@ -138,7 +132,7 @@ func ExportNodeStdMd(node *ast.Node, luteEngine *lute.Lute) string { return markdown } -func NodeStaticContent(node *ast.Node, excludeTypes []string) string { +func NodeStaticContent(node *ast.Node, excludeTypes []string, includeTextMarkATitleURL bool) string { if nil == node { return "" } @@ -225,7 +219,7 @@ func NodeStaticContent(node *ast.Node, excludeTypes []string) string { if n.IsTextMarkType("tag") { buf.WriteByte('#') } - if n.IsTextMarkType("a") { + if n.IsTextMarkType("a") && includeTextMarkATitleURL { // 搜索不到超链接元素的 URL 和标题 https://github.com/siyuan-note/siyuan/issues/7352 if "" != n.TextMarkATitle { buf.WriteString(" " + n.TextMarkATitle) From a91059c280fcef0f0c04cffcf2e6b6bafea779f3 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 11:00:54 +0800 Subject: [PATCH 3/8] =?UTF-8?q?:art:=20=E6=9B=B4=E6=94=B9=E7=88=B6?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=A0=87=E9=A2=98=E6=88=96=E8=80=85=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E7=88=B6=E6=96=87=E6=A1=A3=E5=90=8E=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=8F=E6=8E=A8=E9=80=81=E5=AD=90=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E7=A7=BB=E5=8A=A8=E8=BF=9B=E5=BA=A6=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7422?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/box.go | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/kernel/model/box.go b/kernel/model/box.go index 1410ac4f8..e96560460 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -385,10 +385,8 @@ func (box *Box) renameSubTrees(tree *parse.Tree) { } func (box *Box) moveTrees0(files []*FileInfo) { - totals := len(files) + 5 - showProgress := 64 < totals luteEngine := util.NewLute() - for i, subFile := range files { + for _, subFile := range files { if !strings.HasSuffix(subFile.path, ".sy") { continue } @@ -400,15 +398,8 @@ func (box *Box) moveTrees0(files []*FileInfo) { treenode.SetBlockTreePath(subTree) sql.UpsertTreeQueue(subTree) - - if showProgress { - msg := fmt.Sprintf(Conf.Language(107), subTree.HPath) - util.PushProgress(util.PushProgressCodeProgressed, i, totals, msg) - } - } - - if showProgress { - util.ClearPushProgress(totals) + msg := fmt.Sprintf(Conf.Language(107), subTree.HPath) + util.PushStatusBar(msg) } } From aad58a221fce91128c41dfd22e0dd88db01c43b2 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 12:37:32 +0800 Subject: [PATCH 4/8] =?UTF-8?q?:art:=20=E7=A7=BB=E5=8A=A8=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=9B=B4=E6=96=B0=E7=B4=A2=E5=BC=95=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/sql/database.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 502a87eb4..f5f17f948 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -1096,9 +1096,11 @@ func batchUpdateHPath(tx *sql.Tx, boxID, rootID, oldHPath, newHPath string) (err if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { return } - stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE box = ? AND root_id = ? AND hpath = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { - return + if !caseSensitive { + stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE box = ? AND root_id = ? AND hpath = ?" + if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { + return + } } ClearCache() return From c88268fbfd2927a634eda82cb7247b102fedf78d Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 12:39:29 +0800 Subject: [PATCH 5/8] =?UTF-8?q?:art:=20=E7=A7=BB=E5=8A=A8=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=9B=B4=E6=96=B0=E7=B4=A2=E5=BC=95=E6=97=B6=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E5=A4=A7=E5=B0=8F=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/sql/database.go | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index f5f17f948..e152f790c 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -869,9 +869,11 @@ func deleteBlocksByIDs(tx *sql.Tx, ids []string) (err error) { if err = execStmtTx(tx, stmt); nil != err { return } - stmt = "DELETE FROM blocks_fts_case_insensitive WHERE id IN " + in.String() - if err = execStmtTx(tx, stmt); nil != err { - return + if !caseSensitive { + stmt = "DELETE FROM blocks_fts_case_insensitive WHERE id IN " + in.String() + if err = execStmtTx(tx, stmt); nil != err { + return + } } return } @@ -885,9 +887,11 @@ func deleteBlocksByBoxTx(tx *sql.Tx, box string) (err error) { if err = execStmtTx(tx, stmt, box); nil != err { return } - stmt = "DELETE FROM blocks_fts_case_insensitive WHERE box = ?" - if err = execStmtTx(tx, stmt, box); nil != err { - return + if !caseSensitive { + stmt = "DELETE FROM blocks_fts_case_insensitive WHERE box = ?" + if err = execStmtTx(tx, stmt, box); nil != err { + return + } } ClearCache() return @@ -993,9 +997,11 @@ func deleteByRootID(tx *sql.Tx, rootID string, context map[string]interface{}) ( if err = execStmtTx(tx, stmt, rootID); nil != err { return } - stmt = "DELETE FROM blocks_fts_case_insensitive WHERE root_id = ?" - if err = execStmtTx(tx, stmt, rootID); nil != err { - return + if !caseSensitive { + stmt = "DELETE FROM blocks_fts_case_insensitive WHERE root_id = ?" + if err = execStmtTx(tx, stmt, rootID); nil != err { + return + } } stmt = "DELETE FROM spans WHERE root_id = ?" if err = execStmtTx(tx, stmt, rootID); nil != err { @@ -1029,9 +1035,11 @@ func batchDeleteByRootIDs(tx *sql.Tx, rootIDs []string, context map[string]inter if err = execStmtTx(tx, stmt); nil != err { return } - stmt = "DELETE FROM blocks_fts_case_insensitive WHERE root_id IN " + ids - if err = execStmtTx(tx, stmt); nil != err { - return + if !caseSensitive { + stmt = "DELETE FROM blocks_fts_case_insensitive WHERE root_id IN " + ids + if err = execStmtTx(tx, stmt); nil != err { + return + } } stmt = "DELETE FROM spans WHERE root_id IN " + ids if err = execStmtTx(tx, stmt); nil != err { @@ -1063,9 +1071,11 @@ func batchDeleteByPathPrefix(tx *sql.Tx, boxID, pathPrefix string) (err error) { if err = execStmtTx(tx, stmt, boxID, pathPrefix+"%"); nil != err { return } - stmt = "DELETE FROM blocks_fts_case_insensitive WHERE box = ? AND path LIKE ?" - if err = execStmtTx(tx, stmt, boxID, pathPrefix+"%"); nil != err { - return + if !caseSensitive { + stmt = "DELETE FROM blocks_fts_case_insensitive WHERE box = ? AND path LIKE ?" + if err = execStmtTx(tx, stmt, boxID, pathPrefix+"%"); nil != err { + return + } } stmt = "DELETE FROM spans WHERE box = ? AND path LIKE ?" if err = execStmtTx(tx, stmt, boxID, pathPrefix+"%"); nil != err { From 3a36def366de4ef80b77b253200f615e3aa3d702 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 13:00:27 +0800 Subject: [PATCH 6/8] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E6=96=87=E6=A1=A3=E6=80=A7=E8=83=BD=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7422?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/appearance/langs/en_US.json | 2 +- app/appearance/langs/es_ES.json | 2 +- app/appearance/langs/fr_FR.json | 2 +- app/appearance/langs/zh_CHT.json | 2 +- app/appearance/langs/zh_CN.json | 2 +- kernel/model/box.go | 2 +- kernel/model/file.go | 8 +++----- kernel/sql/database.go | 14 +++++++------- kernel/sql/queue.go | 13 ++++++------- 9 files changed, 22 insertions(+), 25 deletions(-) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 9bed6d199..9b5a24028 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1006,7 +1006,7 @@ "104": "The update installation package failed to download, please check the network connection", "105": "Corrupted data repo have been automatically reset", "106": "Maximum length is limited to 512 characters", - "107": "Moving document [%s]", + "107": "Moved document [%s]", "108": "Data sync found conflicts, you can view the generated conflict content in [Data History]", "109": "Remove reminder completed [%s]", "110": "Renaming...", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index d0e11f424..5a9ae0f2c 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1006,7 +1006,7 @@ "104": "El paquete de instalación de la actualización no se pudo descargar, verifique la conexión de red", "105": "El repositorio de datos corruptos se ha restablecido automáticamente", "106": "La longitud máxima está limitada a 512 caracteres", - "107": "Moviendo documento [%s]", + "107": "Documento movido [%s]", "108": "La sincronizaci\u00f3n de datos encontr\u00f3 en conflictos, puede ver el contenido del conflicto generado en [Historial de datos]", "109": "Eliminación de recordatorios completada [%s]", "110": "Renombrar...", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 766d5b756..66e1a7dc9 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1006,7 +1006,7 @@ "104": "Le package d'installation de la mise à jour n'a pas pu être téléchargé, veuillez vérifier la connexion réseau", "105": "Le référentiel de données corrompu a été automatiquement réinitialisé", "106": "La longueur maximale est limitée à 512 caractères", - "107": "Déplacement du document [%s]", + "107": "Document déplacé [%s]", "108": "La synchronisation des données a trouvé des conflits, vous pouvez afficher le contenu du conflit généré dans [Historique des données]", "109": "Supprimer le rappel terminé [%s]", "110": "Renommer...", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 08ac93573..4039da67c 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1006,7 +1006,7 @@ "104": "更新安裝包下載失敗,請檢查網絡連接", "105": "已經自動重置損壞的數據倉庫", "106": "最大長度限制為 512 字元", - "107": "正在移動文檔 [%s]", + "107": "已經移動文檔 [%s]", "108": "數據同步發現衝突,可在 [數據歷史] 中查看生成的衝突內容", "109": "移除提醒完畢 [%s]", "110": "正在重命名...", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 45374b71e..1a94f9406 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1006,7 +1006,7 @@ "104": "更新安装包下载失败,请检查网络连接", "105": "已经自动重置损坏的数据仓库", "106": "最大长度限制为 512 字符", - "107": "正在移动文档 [%s]", + "107": "已经移动文档 [%s]", "108": "数据同步发现冲突,可在 [数据历史] 中查看生成的冲突内容", "109": "移除提醒完毕 [%s]", "110": "正在重命名...", diff --git a/kernel/model/box.go b/kernel/model/box.go index e96560460..b16ec6e73 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -397,7 +397,7 @@ func (box *Box) moveTrees0(files []*FileInfo) { } treenode.SetBlockTreePath(subTree) - sql.UpsertTreeQueue(subTree) + sql.RenameTreeQueue(subTree) msg := fmt.Sprintf(Conf.Language(107), subTree.HPath) util.PushStatusBar(msg) } diff --git a/kernel/model/file.go b/kernel/model/file.go index 7bddac1c5..925e5581c 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -882,11 +882,11 @@ func indexWriteJSONQueueWithoutChangeTime(tree *parse.Tree) (err error) { return writeJSONQueueWithoutChangeTime(tree) } -func renameWriteJSONQueue(tree *parse.Tree, oldHPath string) (err error) { +func renameWriteJSONQueue(tree *parse.Tree) (err error) { if err = filesys.WriteTree(tree); nil != err { return } - sql.RenameTreeQueue(tree, oldHPath) + sql.RenameTreeQueue(tree) treenode.IndexBlockTree(tree) return } @@ -1288,12 +1288,10 @@ func RenameDoc(boxID, p, title string) (err error) { } title = strings.ReplaceAll(title, "/", "") - oldHPath := tree.HPath tree.HPath = path.Join(path.Dir(tree.HPath), title) tree.Root.SetIALAttr("title", title) tree.Root.SetIALAttr("updated", util.CurrentTimeSecondsStr()) - - if err = renameWriteJSONQueue(tree, oldHPath); nil != err { + if err = renameWriteJSONQueue(tree); nil != err { return } diff --git a/kernel/sql/database.go b/kernel/sql/database.go index e152f790c..e019a8b74 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -1097,18 +1097,18 @@ func batchDeleteByPathPrefix(tx *sql.Tx, boxID, pathPrefix string) (err error) { return } -func batchUpdateHPath(tx *sql.Tx, boxID, rootID, oldHPath, newHPath string) (err error) { - stmt := "UPDATE blocks SET hpath = ? WHERE box = ? AND root_id = ? AND hpath = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { +func batchUpdateHPath(tx *sql.Tx, boxID, rootID, newHPath string) (err error) { + stmt := "UPDATE blocks SET hpath = ? WHERE box = ? AND root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { return } - stmt = "UPDATE blocks_fts SET hpath = ? WHERE box = ? AND root_id = ? AND hpath = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { + stmt = "UPDATE blocks_fts SET hpath = ? WHERE box = ? AND root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { return } if !caseSensitive { - stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE box = ? AND root_id = ? AND hpath = ?" - if err = execStmtTx(tx, stmt, newHPath, boxID, rootID, oldHPath); nil != err { + stmt = "UPDATE blocks_fts_case_insensitive SET hpath = ? WHERE box = ? AND root_id = ?" + if err = execStmtTx(tx, stmt, newHPath, boxID, rootID); nil != err { return } } diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index cfc61215e..8d41fe330 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -50,7 +50,6 @@ type dbQueueOperation struct { removeTreeIDs []string // delete_ids box string // delete_box/delete_box_refs/index renameTree *parse.Tree // rename - renameTreeOldHPath string // rename block *Block // update_block_content removeAssetHashes []string // delete_assets } @@ -168,7 +167,7 @@ func execOp(op *dbQueueOperation, tx *sql.Tx, context map[string]interface{}) (e case "delete_ids": err = batchDeleteByRootIDs(tx, op.removeTreeIDs, context) case "rename": - err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTreeOldHPath, op.renameTree.HPath) + err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTree.HPath) if nil != err { break } @@ -303,15 +302,15 @@ func UpsertTreeQueue(tree *parse.Tree) { operationQueue = append(operationQueue, newOp) } -func RenameTreeQueue(tree *parse.Tree, oldHPath string) { +func RenameTreeQueue(tree *parse.Tree) { dbQueueLock.Lock() defer dbQueueLock.Unlock() newOp := &dbQueueOperation{ - renameTree: tree, - renameTreeOldHPath: oldHPath, - inQueueTime: time.Now(), - action: "rename"} + renameTree: tree, + inQueueTime: time.Now(), + action: "rename", + } for i, op := range operationQueue { if "rename" == op.action && op.renameTree.ID == tree.ID { // 相同树则覆盖 operationQueue[i] = newOp From 4e58f47a259cf145b578c774c8e4426aa61bf232 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 13:16:19 +0800 Subject: [PATCH 7/8] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E6=96=87=E6=A1=A3=E6=80=A7=E8=83=BD=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7422?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/box.go | 2 +- kernel/sql/queue.go | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/kernel/model/box.go b/kernel/model/box.go index b16ec6e73..639c17651 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -397,7 +397,7 @@ func (box *Box) moveTrees0(files []*FileInfo) { } treenode.SetBlockTreePath(subTree) - sql.RenameTreeQueue(subTree) + sql.RenameSubTreeQueue(subTree) msg := fmt.Sprintf(Conf.Language(107), subTree.HPath) util.PushStatusBar(msg) } diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index 8d41fe330..75844d06d 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -41,7 +41,7 @@ var ( type dbQueueOperation struct { inQueueTime time.Time - action string // upsert/delete/delete_id/rename/delete_box/delete_box_refs/insert_refs/index/delete_ids/update_block_content/delete_assets + action string // upsert/delete/delete_id/rename/rename_sub_tree/delete_box/delete_box_refs/insert_refs/index/delete_ids/update_block_content/delete_assets indexPath string // index upsertTree *parse.Tree // upsert/insert_refs @@ -49,7 +49,7 @@ type dbQueueOperation struct { removeTreeIDBox, removeTreeID string // delete_id removeTreeIDs []string // delete_ids box string // delete_box/delete_box_refs/index - renameTree *parse.Tree // rename + renameTree *parse.Tree // rename/rename_sub_tree block *Block // update_block_content removeAssetHashes []string // delete_assets } @@ -172,6 +172,8 @@ func execOp(op *dbQueueOperation, tx *sql.Tx, context map[string]interface{}) (e break } err = updateRootContent(tx, path.Base(op.renameTree.HPath), op.renameTree.Root.IALAttr("updated"), op.renameTree.ID) + case "rename_sub_tree": + err = batchUpdateHPath(tx, op.renameTree.Box, op.renameTree.ID, op.renameTree.HPath) case "delete_box": err = deleteByBoxTx(tx, op.box) case "delete_box_refs": @@ -320,6 +322,24 @@ func RenameTreeQueue(tree *parse.Tree) { operationQueue = append(operationQueue, newOp) } +func RenameSubTreeQueue(tree *parse.Tree) { + dbQueueLock.Lock() + defer dbQueueLock.Unlock() + + newOp := &dbQueueOperation{ + renameTree: tree, + inQueueTime: time.Now(), + action: "rename_sub_tree", + } + for i, op := range operationQueue { + if "rename_sub_tree" == op.action && op.renameTree.ID == tree.ID { // 相同树则覆盖 + operationQueue[i] = newOp + return + } + } + operationQueue = append(operationQueue, newOp) +} + func RemoveTreeQueue(box, rootID string) { dbQueueLock.Lock() defer dbQueueLock.Unlock() From ad4bbc6240acd0c044fe97703883ac7f9f51f5d6 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 21 Feb 2023 13:21:14 +0800 Subject: [PATCH 8/8] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E6=96=87=E6=A1=A3=E6=80=A7=E8=83=BD=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7422?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/sql/cache.go | 2 -- kernel/sql/database.go | 4 ---- 2 files changed, 6 deletions(-) diff --git a/kernel/sql/cache.go b/kernel/sql/cache.go index 1ff183824..1901f5759 100644 --- a/kernel/sql/cache.go +++ b/kernel/sql/cache.go @@ -17,7 +17,6 @@ package sql import ( - "runtime/debug" "time" "github.com/88250/lute/ast" @@ -46,7 +45,6 @@ var blockCache, _ = ristretto.NewCache(&ristretto.Config{ func ClearCache() { blockCache.Clear() - debug.FreeOSMemory() } func putBlockCache(block *Block) { diff --git a/kernel/sql/database.go b/kernel/sql/database.go index e019a8b74..1933582bd 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -820,10 +820,6 @@ func heading(node *ast.Node) *ast.Node { return nil } -func DeleteBlockByIDs(tx *sql.Tx, ids []string) (err error) { - return deleteBlocksByIDs(tx, ids) -} - func deleteByBoxTx(tx *sql.Tx, box string) (err error) { if err = deleteBlocksByBoxTx(tx, box); nil != err { return