From 6ccf76e6cdf2b95a708769f35a4c0d8fda669333 Mon Sep 17 00:00:00 2001
From: Daniel <845765@qq.com>
Date: Wed, 29 Nov 2023 22:59:50 +0800
Subject: [PATCH 1/4] :art: Cloud inbox support preview audio and video
https://github.com/siyuan-note/siyuan/issues/9780
---
app/src/layout/dock/Inbox.ts | 6 +++---
app/src/types/index.d.ts | 1 +
kernel/model/cloud_service.go | 28 ++++++++++++++++++++++++++++
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/app/src/layout/dock/Inbox.ts b/app/src/layout/dock/Inbox.ts
index 293ffea88..90861e037 100644
--- a/app/src/layout/dock/Inbox.ts
+++ b/app/src/layout/dock/Inbox.ts
@@ -199,7 +199,7 @@ export class Inbox extends Model {
${linkHTML}
-${(Lute.New()).MarkdownStr("", data.shorthandContent)}
+${data.shorthandContent}
`;
/// #else
if (data.shorthandURL) {
@@ -214,7 +214,7 @@ ${(Lute.New()).MarkdownStr("", data.shorthandContent)}
${linkHTML}
-${(Lute.New()).MarkdownStr("", data.shorthandContent)}
+${data.shorthandContent}
`;
/// #endif
}
@@ -332,7 +332,7 @@ ${(Lute.New()).MarkdownStr("", data.shorthandContent)}
notebook: toNotebook[0],
path: pathPosix().join(getDisplayName(toPath[0], false, true), Lute.NewNodeID() + ".sy"),
title: replaceFileName(response.data.shorthandTitle),
- md: response.data.shorthandContent,
+ md: response.data.shorthandMd,
}, (docResponse) => {
this.remove(item);
fetchPost("/api/format/netAssets2LocalAssets", {id: docResponse.data.id});
diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts
index a9467c571..53a924bd4 100644
--- a/app/src/types/index.d.ts
+++ b/app/src/types/index.d.ts
@@ -262,6 +262,7 @@ interface ISnippet {
interface IInbox {
oId: string
shorthandContent: string
+ shorthandMd: string
shorthandDesc: string
shorthandFrom: number
shorthandTitle: string
diff --git a/kernel/model/cloud_service.go b/kernel/model/cloud_service.go
index 8e4ceb494..9ee50ceac 100644
--- a/kernel/model/cloud_service.go
+++ b/kernel/model/cloud_service.go
@@ -23,11 +23,13 @@ import (
"net/http"
"os"
"path/filepath"
+ "regexp"
"strconv"
"strings"
"time"
"github.com/88250/gulu"
+ "github.com/88250/lute/parse"
"github.com/siyuan-note/httpclient"
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/conf"
@@ -456,6 +458,15 @@ func GetCloudShorthand(id string) (ret map[string]interface{}, err error) {
t, _ := strconv.ParseInt(id, 10, 64)
hCreated := util.Millisecond2Time(t)
ret["hCreated"] = hCreated.Format("2006-01-02 15:04")
+
+ md := ret["shorthandContent"].(string)
+ ret["shorthandMd"] = md
+
+ luteEngine := NewLute()
+ luteEngine.SetFootnotes(true)
+ tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
+ content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
+ ret["shorthandContent"] = content
return
}
@@ -483,6 +494,10 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
err = errors.New(result["msg"].(string))
return
}
+
+ luteEngine := NewLute()
+ audioRegexp := regexp.MustCompile(".*")
+ videoRegexp := regexp.MustCompile(".*")
shorthands := result["data"].(map[string]interface{})["shorthands"].([]interface{})
for _, item := range shorthands {
shorthand := item.(map[string]interface{})
@@ -490,6 +505,19 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
t, _ := strconv.ParseInt(id, 10, 64)
hCreated := util.Millisecond2Time(t)
shorthand["hCreated"] = hCreated.Format("2006-01-02 15:04")
+
+ desc := shorthand["shorthandDesc"].(string)
+ desc = audioRegexp.ReplaceAllString(desc, "语音、")
+ desc = videoRegexp.ReplaceAllString(desc, "视频、")
+ desc = strings.TrimSuffix(desc, "、")
+ desc = strings.ReplaceAll(desc, "\n\n", "")
+ shorthand["shorthandDesc"] = desc
+
+ md := shorthand["shorthandContent"].(string)
+ shorthand["shorthandMd"] = md
+ tree := parse.Parse("", []byte(md), luteEngine.ParseOptions)
+ content := luteEngine.ProtylePreview(tree, luteEngine.RenderOptions)
+ shorthand["shorthandContent"] = content
}
return
}
From 3d8d1ef5447729948461ac077792f98352035264 Mon Sep 17 00:00:00 2001
From: Daniel <845765@qq.com>
Date: Wed, 29 Nov 2023 23:05:26 +0800
Subject: [PATCH 2/4] :art: Cloud inbox support preview audio and video
https://github.com/siyuan-note/siyuan/issues/9780
---
kernel/model/cloud_service.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/kernel/model/cloud_service.go b/kernel/model/cloud_service.go
index 9ee50ceac..c9c33affa 100644
--- a/kernel/model/cloud_service.go
+++ b/kernel/model/cloud_service.go
@@ -507,10 +507,10 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
shorthand["hCreated"] = hCreated.Format("2006-01-02 15:04")
desc := shorthand["shorthandDesc"].(string)
- desc = audioRegexp.ReplaceAllString(desc, "语音、")
- desc = videoRegexp.ReplaceAllString(desc, "视频、")
- desc = strings.TrimSuffix(desc, "、")
+ desc = audioRegexp.ReplaceAllString(desc, " 语音 ")
+ desc = videoRegexp.ReplaceAllString(desc, " 视频 ")
desc = strings.ReplaceAll(desc, "\n\n", "")
+ desc = strings.TrimSpace(desc)
shorthand["shorthandDesc"] = desc
md := shorthand["shorthandContent"].(string)
From a1827d1f5091c7eb0abf899a558810f6cca6ca2d Mon Sep 17 00:00:00 2001
From: Daniel <845765@qq.com>
Date: Wed, 29 Nov 2023 23:08:10 +0800
Subject: [PATCH 3/4] :art: Cloud inbox support preview audio and video
https://github.com/siyuan-note/siyuan/issues/9780
---
kernel/model/cloud_service.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/model/cloud_service.go b/kernel/model/cloud_service.go
index c9c33affa..85ff31f97 100644
--- a/kernel/model/cloud_service.go
+++ b/kernel/model/cloud_service.go
@@ -498,6 +498,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
luteEngine := NewLute()
audioRegexp := regexp.MustCompile(".*")
videoRegexp := regexp.MustCompile(".*")
+ fileRegexp := regexp.MustCompile("\\[文件]\\(.*\\)")
shorthands := result["data"].(map[string]interface{})["shorthands"].([]interface{})
for _, item := range shorthands {
shorthand := item.(map[string]interface{})
@@ -509,6 +510,7 @@ func GetCloudShorthands(page int) (result map[string]interface{}, err error) {
desc := shorthand["shorthandDesc"].(string)
desc = audioRegexp.ReplaceAllString(desc, " 语音 ")
desc = videoRegexp.ReplaceAllString(desc, " 视频 ")
+ desc = fileRegexp.ReplaceAllString(desc, " 文件 ")
desc = strings.ReplaceAll(desc, "\n\n", "")
desc = strings.TrimSpace(desc)
shorthand["shorthandDesc"] = desc
From c5576284cb13764597add26d7d4c2d3444369b3b Mon Sep 17 00:00:00 2001
From: Daniel <845765@qq.com>
Date: Thu, 30 Nov 2023 10:51:27 +0800
Subject: [PATCH 4/4] :bug: `Paste escaped text` is not handled correctly Fix
https://github.com/siyuan-note/siyuan/issues/9787
---
app/src/protyle/util/paste.ts | 42 +++++++++++++++++------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/app/src/protyle/util/paste.ts b/app/src/protyle/util/paste.ts
index 1cb1cbed8..6edce2611 100644
--- a/app/src/protyle/util/paste.ts
+++ b/app/src/protyle/util/paste.ts
@@ -26,27 +26,27 @@ export const pasteEscaped = async (protyle: IProtyle, nodeElement: Element) => {
// task-blog-2~default~baiduj 无法原义粘贴含有 `~foo~` 的文本 https://github.com/siyuan-note/siyuan/issues/5523
// 这里必须多加一个反斜杆,因为 Lute 在进行 Markdown 嵌套节点转换平铺标记节点时会剔除 Backslash 节点,
- // 多加入的一个反斜杆会作为文本节点保留下来,后续 Spin 时刚好用于转义标记符 https://github.com/siyuan-note/siyuan/issues/6341
- clipText = clipText.replace(/\\/g, "\\\\\\\\")
- .replace(/\*/g, "\\\\\\*")
- .replace(/\_/g, "\\\\\\_")
- .replace(/\[/g, "\\\\\\[")
- .replace(/\]/g, "\\\\\\]")
- .replace(/\!/g, "\\\\\\!")
- .replace(/\`/g, "\\\\\\`")
- .replace(/\/g, "\\\\\\>")
- .replace(/\&/g, "\\\\\\&")
- .replace(/\~/g, "\\\\\\~")
- .replace(/\{/g, "\\\\\\{")
- .replace(/\}/g, "\\\\\\}")
- .replace(/\(/g, "\\\\\\(")
- .replace(/\)/g, "\\\\\\)")
- .replace(/\=/g, "\\\\\\=")
- .replace(/\#/g, "\\\\\\#")
- .replace(/\$/g, "\\\\\\$")
- .replace(/\^/g, "\\\\\\^")
- .replace(/\|/g, "\\\\\\|");
+ // 多加入的一个反斜杆会作为文本节点保留下来,后续 Spin 时刚好用于转义标记符
+ clipText = clipText.replace(/\\/g, "\\\\")
+ .replace(/\*/g, "\\*")
+ .replace(/_/g, "\\_")
+ .replace(/\[/g, "\\[")
+ .replace(/]/g, "\\]")
+ .replace(/!/g, "\\!")
+ .replace(/`/g, "\\`")
+ .replace(//g, "\\>")
+ .replace(/&/g, "\\&")
+ .replace(/~/g, "\\~")
+ .replace(/\{/g, "\\{")
+ .replace(/}/g, "\\}")
+ .replace(/\(/g, "\\(")
+ .replace(/\)/g, "\\)")
+ .replace(/=/g, "\\=")
+ .replace(/#/g, "\\#")
+ .replace(/\$/g, "\\$")
+ .replace(/\^/g, "\\^")
+ .replace(/\|/g, "\\|");
pasteText(protyle, clipText, nodeElement);
} catch (e) {
console.log(e);