Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
660affc487
8 changed files with 59 additions and 26 deletions
|
@ -750,6 +750,7 @@
|
|||
"nameEmpty": "Name is empty",
|
||||
"ordered-list": "Order List",
|
||||
"outdent": "Outdent",
|
||||
"outdentTip": "After enabling will use the logical outdent of the list outline, move the list item below the parent",
|
||||
"over": "over",
|
||||
"preview": "Export Preview",
|
||||
"quote": "Blockquote",
|
||||
|
|
|
@ -750,6 +750,7 @@
|
|||
"nameEmpty": "El nombre está vacío",
|
||||
"ordered-list": "Lista ordenada",
|
||||
"outdent": "anular la sangría",
|
||||
"outdentTip": "Después de habilitar usará la sangría lógica del esquema de la lista, mueva el elemento de la lista debajo del padre",
|
||||
"over": "sobre",
|
||||
"preview": "Vista previa de la exportación",
|
||||
"quote": "Párrafo cita",
|
||||
|
|
|
@ -750,6 +750,7 @@
|
|||
"nameEmpty": "Nom est vide",
|
||||
"ordered-list": "Liste d'ordres",
|
||||
"outdent": "Outdent",
|
||||
"outdentTip": "Après l'activation, le retrait logique du contour de la liste sera utilisé, déplacez l'élément de la liste sous le parent",
|
||||
"over": "over",
|
||||
"preview": "Aperçu de l'exportation",
|
||||
"quote": "Citation de bloc",
|
||||
|
|
|
@ -750,6 +750,7 @@
|
|||
"nameEmpty": "檔案名不能為空",
|
||||
"ordered-list": "有序列表",
|
||||
"outdent": "列表反向縮進",
|
||||
"outdentTip": "啟用後將使用列表大綱的邏輯式反向縮進,即將列表項移動到父級下方",
|
||||
"over": "超過",
|
||||
"preview": "匯出預覽",
|
||||
"quote": "引述",
|
||||
|
|
|
@ -750,6 +750,7 @@
|
|||
"nameEmpty": "文件名不能为空",
|
||||
"ordered-list": "有序列表",
|
||||
"outdent": "列表反向缩进",
|
||||
"outdentTip": "启用后将使用列表大纲的逻辑式反向缩进,即将列表项移动到父级下方",
|
||||
"over": "超过",
|
||||
"preview": "导出预览",
|
||||
"quote": "引述",
|
||||
|
|
|
@ -86,10 +86,8 @@ try {
|
|||
}
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
require('electron').
|
||||
dialog.
|
||||
showErrorBox('创建配置目录失败 Failed to create config directory',
|
||||
'思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。\n\nSiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.')
|
||||
require('electron').dialog.showErrorBox('创建配置目录失败 Failed to create config directory',
|
||||
'思源需要在用户家目录下创建配置文件夹(~/.config/siyuan),请确保该路径具有写入权限。\n\nSiYuan needs to create a configuration folder (~/.config/siyuan) in the user\'s home directory. Please make sure that the path has write permissions.')
|
||||
app.exit()
|
||||
}
|
||||
|
||||
|
@ -332,10 +330,23 @@ const boot = () => {
|
|||
if (url.startsWith('http://127.0.0.1:6806')) {
|
||||
return
|
||||
}
|
||||
|
||||
event.preventDefault()
|
||||
shell.openExternal(url)
|
||||
})
|
||||
|
||||
// IFrame 块不跟随重定向 https://github.com/siyuan-note/siyuan/issues/6327
|
||||
mainWindow.webContents.on('will-redirect', (event, url, isInPlace, isMainFrame) => {
|
||||
if (url.startsWith('http://127.0.0.1:6806')) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!isMainFrame) {
|
||||
event.preventDefault()
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
mainWindow.on('close', (event) => {
|
||||
if (mainWindow && !mainWindow.isDestroyed()) {
|
||||
mainWindow.webContents.send('siyuan-save-close', false)
|
||||
|
|
|
@ -1282,6 +1282,15 @@ func RenameDoc(boxID, p, title string) (err error) {
|
|||
title = "Untitled"
|
||||
}
|
||||
|
||||
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 {
|
||||
return
|
||||
}
|
||||
|
||||
refText := getNodeRefText(tree.Root)
|
||||
evt := util.NewCmdResult("rename", 0, util.PushModeBroadcast, util.PushModeNone)
|
||||
evt.Data = map[string]interface{}{
|
||||
|
@ -1293,26 +1302,8 @@ func RenameDoc(boxID, p, title string) (err error) {
|
|||
}
|
||||
util.PushEvent(evt)
|
||||
|
||||
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 {
|
||||
return
|
||||
}
|
||||
|
||||
box.renameSubTrees(tree)
|
||||
changedDefs := map[string]*ast.Node{tree.ID: tree.Root}
|
||||
changedTrees := map[string]*parse.Tree{tree.ID: tree}
|
||||
|
||||
// 引用文档时锚文本没有跟随文档重命名 https://github.com/siyuan-note/siyuan/issues/4193
|
||||
// 详见 refreshDynamicRefText 函数实现
|
||||
go func() {
|
||||
sql.WaitForWritingDatabase()
|
||||
refreshDynamicRefText(changedDefs, changedTrees)
|
||||
}()
|
||||
|
||||
go updateRefTextRenameDoc(tree)
|
||||
IncSync()
|
||||
return
|
||||
}
|
||||
|
|
|
@ -100,6 +100,7 @@ func isWritingFiles() bool {
|
|||
}
|
||||
|
||||
func AutoFlushTx() {
|
||||
go autoFlushUpdateRefTextRenameDoc()
|
||||
for {
|
||||
flushTx()
|
||||
time.Sleep(time.Duration(txDelay) * time.Millisecond)
|
||||
|
@ -1060,9 +1061,6 @@ func (tx *Transaction) writeTree(tree *parse.Tree) (err error) {
|
|||
|
||||
func refreshDynamicRefText(updatedDefNodes map[string]*ast.Node, updatedTrees map[string]*parse.Tree) {
|
||||
// 这个实现依赖了数据库缓存,导致外部调用时可能需要阻塞等待数据库写入后才能获取到 refs
|
||||
// 比如通过块引创建文档后立即重命名文档,这时引用关系还没有入库,所以重命名查询不到引用关系,最终导致动态锚文本设置失败
|
||||
// 引用文档时锚文本没有跟随文档重命名 https://github.com/siyuan-note/siyuan/issues/4193
|
||||
// 解决方案是将重命名通过协程异步调用,详见 RenameDoc 函数
|
||||
|
||||
treeRefNodeIDs := map[string]*hashset.Set{}
|
||||
for _, updateNode := range updatedDefNodes {
|
||||
|
@ -1126,6 +1124,34 @@ func refreshDynamicRefText(updatedDefNodes map[string]*ast.Node, updatedTrees ma
|
|||
}
|
||||
}
|
||||
|
||||
var updateRefTextRenameDocs = map[string]*parse.Tree{}
|
||||
var updateRefTextRenameDocLock = sync.Mutex{}
|
||||
|
||||
func updateRefTextRenameDoc(renamedTree *parse.Tree) {
|
||||
updateRefTextRenameDocLock.Lock()
|
||||
updateRefTextRenameDocs[renamedTree.ID] = renamedTree
|
||||
updateRefTextRenameDocLock.Unlock()
|
||||
}
|
||||
|
||||
func autoFlushUpdateRefTextRenameDoc() {
|
||||
for {
|
||||
sql.WaitForWritingDatabase()
|
||||
flushUpdateRefTextRenameDoc()
|
||||
}
|
||||
}
|
||||
|
||||
func flushUpdateRefTextRenameDoc() {
|
||||
updateRefTextRenameDocLock.Lock()
|
||||
defer updateRefTextRenameDocLock.Unlock()
|
||||
|
||||
for _, tree := range updateRefTextRenameDocs {
|
||||
changedDefs := map[string]*ast.Node{tree.ID: tree.Root}
|
||||
changedTrees := map[string]*parse.Tree{tree.ID: tree}
|
||||
refreshDynamicRefText(changedDefs, changedTrees)
|
||||
}
|
||||
updateRefTextRenameDocs = map[string]*parse.Tree{}
|
||||
}
|
||||
|
||||
func updateRefText(refNode *ast.Node, changedDefNodes map[string]*ast.Node) (changed bool) {
|
||||
ast.Walk(refNode, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if !entering {
|
||||
|
|
Loading…
Add table
Reference in a new issue