Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2024-10-31 10:17:21 +08:00
commit 7c2efd6b4a
16 changed files with 84 additions and 32 deletions

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "Nach der Aktivierung wird die Eingabe der Inline-Unterstreichungssyntax <code class='fn__code'>_foo_</code> und <code class='fn__code'>__foo__</code> unterstützt",
"currentNotebook": "Aktuelles Notizbuch",
"containerBlockTip1": "Die Aktivierung von Containerblöcken führt zu doppelten Suchergebnissen.",
"containerBlockTip2": "Die Aktivierung von Dokumentenblöcken unterstützt derzeit nur die Suche nach Dokumenttiteln.",
"copyAsPNG": "Als PNG kopieren",
"unbindBlock": "Block entkoppeln",
"showTitle": "Datenbanktitel anzeigen",
@ -1425,7 +1424,7 @@
"108": "Daten-Synchronisierung fand Konflikte, Sie können den generierten Konfliktinhalt in [Datenverlauf] anzeigen.",
"109": "Erinnerung Entfernen abgeschlossen [%s]",
"110": "Umbenennung...",
"111": "Dokument [%s] speichern...",
"111": "Daten werden gespeichert [%s]...",
"112": "Markdown-Syntaxzeichen [%s] nicht einfügen",
"113": "Daten beschreiben abschließen...",
"114": "Tag kann nicht leer sein",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "After enabling, the <code class='fn__code'>_foo_</code> italic syntax and the <code class='fn__code'>__foo__</code> bold syntax input will be supported",
"currentNotebook": "Current Notebook",
"containerBlockTip1": "Enabling container blocks will result in duplicate search results",
"containerBlockTip2": "Enabling document blocks currently only supports searching for document titles",
"copyAsPNG": "Copy as PNG",
"unbindBlock": "Unbind block",
"showTitle": "Show database title",
@ -1425,7 +1424,7 @@
"108": "Data sync found conflicts, you can view the generated conflict content in [Data History]",
"109": "Remove reminder completed [%s]",
"110": "Renaming...",
"111": "Saving document [%s]...",
"111": "Saving data [%s]...",
"112": "Do not include Markdown syntax marker [%s]",
"113": "Completing data writing...",
"114": "Tag cannot be empty",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "Después de habilitar, se admitirá la sintaxis <code class='fn__code'>_foo_</code> en cursiva y <code class='fn__code'>__foo__</code> en negrita",
"currentNotebook": "Cuaderno actual",
"containerBlockTip1": "Habilitar bloques de contenedores generará resultados de búsqueda duplicados",
"containerBlockTip2": "Habilitar bloques de documentos actualmente solo admite la búsqueda de títulos de documentos",
"copyAsPNG": "Copiar como PNG",
"unbindBlock": "Desvincular bloque",
"showTitle": "Mostrar título de la base de datos",
@ -1425,7 +1424,7 @@
"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...",
"111": "Guardando documento [%s]...",
"111": "Guardando los datos [%s]...",
"112": "No incluir marcador de sintaxis Markdown [%s]",
"113": "Completando la escritura de datos...",
"114": "La etiqueta no puede estar vacía",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "Après l'activation, la syntaxe <code class='fn__code'>_foo_</code> italique et la syntaxe <code class='fn__code'>__foo__</code> gras seront prises en charge",
"currentNotebook": "Carnet actuel",
"containerBlockTip1": "L'activation des blocs de conteneurs entraînera des résultats de recherche en double",
"containerBlockTip2": "L'activation des blocs de documents ne prend actuellement en charge que la recherche de titres de documents",
"copyAsPNG": "Copier en tant PNG",
"unbindBlock": "Dissocier le bloc",
"showTitle": "Afficher le titre de la base de données",
@ -1425,7 +1424,7 @@
"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...",
"111": "Enregistrement du document [%s]...",
"111": "Enregistrement des données [%s]...",
"112": "Ne pas inclure les balises de syntaxe Markdown [%s]",
"113": "Fin de l'écriture des données...",
"114": "La balise ne peut pas être vide",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "לאחר הפעלה, <code class='fn__code'>_foo_</code> תחביר נטוי ו <code class='fn__code'>__foo__</code> תחביר מודגש יתמוך בקלט",
"currentNotebook": "מחברת נוכחית",
"containerBlockTip1": "הפעלת בלוקים יחידתיים תוביל לתוצאות חיפוש כפולות",
"containerBlockTip2": "הפעלת בלוקי מסמכים תומכת כרגע רק בחיפוש הכותרות של המסמכים",
"copyAsPNG": "העתק כ-PNG",
"unbindBlock": "שחרר בלוק",
"showTitle": "הצג כותרת מסד נתונים",
@ -1425,7 +1424,7 @@
"108": "נמצא סכסוך בנתוני הסנכרון, תוכל לראות את התוכן שנוצר בסכסוך ב[היסטוריית הנתונים]",
"109": "הסרת תזכורת הושלמה [%s]",
"110": "מחזיק...",
"111": "שומר את המסמך [%s]...",
"111": "שומר את הנתונים [%s]...",
"112": "אין לכלול את סימן התחביר של Markdown [%s]",
"113": "שלמת הנתונים מתבצעת...",
"114": "תייג לא יכול להיות ריקן",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "Dopo aver attivato, saranno supportate la sintassi in corsivo <code class='fn__code'>_foo_</code> e la sintassi in grassetto <code class='fn__code'>__foo__</code>",
"currentNotebook": "Taccuino corrente",
"containerBlockTip1": "L'abilitazione dei blocchi contenitore comporterà risultati di ricerca duplicati",
"containerBlockTip2": "L'abilitazione dei blocchi documento attualmente supporta solo la ricerca per titoli di documento",
"copyAsPNG": "Copia come PNG",
"unbindBlock": "Scollega blocco",
"showTitle": "Mostra titolo del database",
@ -1425,7 +1424,7 @@
"108": "La sincronizzazione dei dati ha trovato conflitti, puoi visualizzare il contenuto del conflitto generato in [Cronologia Dati]",
"109": "Rimozione del promemoria completata [%s]",
"110": "Rinominando...",
"111": "Salvataggio del documento [%s]...",
"111": "Salvataggio dei dati [%s]...",
"112": "Non includere il marcatore di sintassi Markdown [%s]",
"113": "Completamento della scrittura dei dati...",
"114": "L'etichetta non può essere vuota",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "<code class='fn__code'>_foo_</code> 形式の斜体構文と <code class='fn__code'>__foo__</code> 形式の太字構文を有効にします",
"currentNotebook": "現在のノートブック",
"containerBlockTip1": "コンテナブロックを有効にすると重複した検索結果が表示されます",
"containerBlockTip2": "ドキュメントブロックはタイトルの検索のみをサポートしています",
"copyAsPNG": "PNG としてコピー",
"unbindBlock": "ブロックのバインドを解除",
"showTitle": "データベースのタイトルを表示",
@ -1425,7 +1424,7 @@
"108": "データ同期で競合が検出されました。生成された競合内容は [データ履歴] で確認できます",
"109": "リマインダーの削除が完了しました [%s]",
"110": "名前を変更しています...",
"111": "ドキュメントを保存しています [%s]...",
"111": "データを保存しています [%s]...",
"112": "Markdown 構文マーカーを含めないでください [%s]",
"113": "データの書き込みを完了しています...",
"114": "タグは空にできません",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "Po włączeniu zostanie obsługiwana składnia kursywy i pogrubionego tekstu w formacie <code class='fn__code'>_foo_</code> i <code class='fn__code'>__foo__</code>",
"currentNotebook": "Bieżący notes",
"containerBlockTip1": "Włączenie bloków kontenerowych spowoduje duplikację wyników wyszukiwania",
"containerBlockTip2": "Włączenie bloków dokumentów obecnie wspiera tylko wyszukiwanie tytułów dokumentów",
"copyAsPNG": "Kopiuj jako PNG",
"unbindBlock": "Odłącz blok",
"showTitle": "Pokaż tytuł bazy danych",
@ -1425,7 +1424,7 @@
"108": "Synchronizacja danych wykryła konflikty, możesz zobaczyć wygenerowaną treść konfliktów w [Historii danych]",
"109": "Usunięcie przypomnienia zakończone [%s]",
"110": "Zmiana nazwy...",
"111": "Zapisywanie dokumentu [%s]...",
"111": "Zapisywanie danych [%s]...",
"112": "Nie dołączać znacznika składni Markdown [%s]",
"113": "Zakończenie pisania danych...",
"114": "Tag nie może być pusty",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "После включения будет поддерживаться синтаксис курсива <code class='fn__code'>_foo_</code> и синтаксис жирного текста <code class='fn__code'>__foo__</code>",
"currentNotebook": "Текущий блокнот",
"containerBlockTip1": "Включение контейнерных блоков приведет к дублированию результатов поиска",
"containerBlockTip2": "Включение блочных документов в настоящее время поддерживает только поиск по заголовкам документов",
"copyAsPNG": "Скопировать как PNG",
"unbindBlock": "Отвязать блок",
"showTitle": "Показать заголовок базы данных",
@ -1425,7 +1424,7 @@
"108": "Синхронизация данных обнаружила конфликты, вы можете просмотреть созданный контент конфликта в [Истории данных]",
"109": "Удаление напоминания завершено [%s]",
"110": "Переименование...",
"111": "Сохранение документа [%s]...",
"111": "Сохранение данных [%s]...",
"112": "Не включать маркер синтаксиса Markdown [%s]",
"113": "Завершение записи данных...",
"114": "Тег не может быть пустым",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "啟用後將支援 <code class='fn__code'>_foo_</code> 傾斜語法和 <code class='fn__code'>__foo__</code> 加粗語法輸入",
"currentNotebook": "目前筆記本",
"containerBlockTip1": "啟用容器塊後會導致搜尋結果重複",
"containerBlockTip2": "啟用文件塊目前僅支援搜尋文件名稱",
"copyAsPNG": "複製為 PNG",
"unbindBlock": "取消綁定塊",
"showTitle": "顯示資料庫標題",
@ -1425,7 +1424,7 @@
"108": "資料同步發現衝突,可在 [資料歷史] 中查看生成的衝突內容",
"109": "移除提醒完畢 [%s]",
"110": "正在重命名...",
"111": "正在保存文檔 [%s]...",
"111": "正在保存数据 [%s]...",
"112": "請勿包含 Markdown 語法標記符 [%s]",
"113": "正在完成資料寫入...",
"114": "標籤不能為空",

View file

@ -64,7 +64,6 @@
"editorMarkdownInlineUnderscoreTip": "启用后将支持 <code class='fn__code'>_foo_</code> 倾斜语法和 <code class='fn__code'>__foo__</code> 加粗语法输入",
"currentNotebook": "当前笔记本",
"containerBlockTip1": "启用容器块后会导致搜索结果重复",
"containerBlockTip2": "启用文档块目前仅支持搜索文档名",
"copyAsPNG": "复制为 PNG",
"unbindBlock": "取消绑定块",
"showTitle": "显示数据库标题",
@ -1425,7 +1424,7 @@
"108": "数据同步发现冲突,可在 [数据历史] 中查看生成的冲突内容",
"109": "移除提醒完毕 [%s]",
"110": "正在重命名...",
"111": "正在保存文档 [%s]...",
"111": "正在保存数据 [%s]...",
"112": "请勿包含 Markdown 语法标记符 [%s]",
"113": "正在完成数据写入...",
"114": "标签不能为空",

View file

@ -154,7 +154,7 @@ export const query = {
<svg class="svg"><use xlink:href="#iconFile"></use></svg>
<span class="fn__space"></span>
<div class="fn__flex-1">
${window.siyuan.languages.doc} <sup>[1] [2]</sup>
${window.siyuan.languages.doc}
</div>
<span class="fn__space"></span>
<input class="b3-switch" id="document" type="checkbox"${window.siyuan.config.search.document ? " checked" : ""}/>
@ -163,7 +163,6 @@ export const query = {
<span class="fn__space"></span>
<div class="fn__flex-1">
<div class="b3-label__text">[1] ${window.siyuan.languages.containerBlockTip1}</div>
<div class="b3-label__text">[2] ${window.siyuan.languages.containerBlockTip2}</div>
</div>
</div>
<div class="b3-label">

View file

@ -161,7 +161,7 @@ export const filterMenu = (config: Config.IUILayoutTabSearchConfig, cb: () => vo
<svg class="ft__on-surface svg fn__flex-center"><use xlink:href="#iconFile"></use></svg>
<span class="fn__space"></span>
<div class="fn__flex-1 fn__flex-center">
${window.siyuan.languages.doc} <sup>[1] [2]</sup>
${window.siyuan.languages.doc}
</div>
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" data-type="document" type="checkbox"${config.types.document ? " checked" : ""}>
@ -169,7 +169,6 @@ export const filterMenu = (config: Config.IUILayoutTabSearchConfig, cb: () => vo
<span class="fn__space"></span>
<div class="fn__flex-1">
<div class="b3-label__text">[1] ${window.siyuan.languages.containerBlockTip1}</div>
<div class="b3-label__text">[2] ${window.siyuan.languages.containerBlockTip2}</div>
</div>
</div>
<div class="b3-dialog__action">

View file

@ -116,6 +116,7 @@ func loadThemes() {
Conf.Appearance.DarkThemes = nil
Conf.Appearance.LightThemes = nil
var daylightTheme, midnightTheme *conf.AppearanceTheme
for _, themeDir := range themeDirs {
if !util.IsDirRegularOrSymlink(themeDir) {
continue
@ -151,6 +152,14 @@ func loadThemes() {
}
}
if "midnight" == name {
midnightTheme = t
continue
} else if "daylight" == name {
daylightTheme = t
continue
}
if "dark" == mode {
Conf.Appearance.DarkThemes = append(Conf.Appearance.DarkThemes, t)
} else if "light" == mode {
@ -172,6 +181,9 @@ func loadThemes() {
go watchTheme(filepath.Join(util.ThemesPath, name))
}
Conf.Appearance.LightThemes = append([]*conf.AppearanceTheme{daylightTheme}, Conf.Appearance.LightThemes...)
Conf.Appearance.DarkThemes = append([]*conf.AppearanceTheme{midnightTheme}, Conf.Appearance.DarkThemes...)
}
func loadIcons() {

View file

@ -521,17 +521,19 @@ func RemoveUnusedAssets() (ret []string) {
sql.BatchRemoveAssetsQueue(hashes)
for _, unusedAsset := range unusedAssets {
if unusedAsset = filepath.Join(util.DataDir, unusedAsset); filelock.IsExist(unusedAsset) {
info, statErr := os.Stat(unusedAsset)
absPath := filepath.Join(util.DataDir, unusedAsset)
if filelock.IsExist(absPath) {
info, statErr := os.Stat(absPath)
if statErr == nil {
size += info.Size()
}
if err := filelock.Remove(unusedAsset); err != nil {
logging.LogErrorf("remove unused asset [%s] failed: %s", unusedAsset, err)
if err := filelock.Remove(absPath); err != nil {
logging.LogErrorf("remove unused asset [%s] failed: %s", absPath, err)
}
util.RemoveAssetText(unusedAsset)
}
ret = append(ret, unusedAsset)
ret = append(ret, absPath)
}
if 0 < len(ret) {
IncSync()
@ -569,6 +571,9 @@ func RemoveUnusedAsset(p string) (ret string) {
logging.LogErrorf("remove unused asset [%s] failed: %s", absPath, err)
}
ret = absPath
util.RemoveAssetText(p)
IncSync()
indexHistoryDir(filepath.Base(historyDir), util.NewLute())
@ -655,6 +660,45 @@ func RenameAsset(oldPath, newName string) (newPath string, err error) {
}
}
storageAvDir := filepath.Join(util.DataDir, "storage", "av")
if gulu.File.IsDir(storageAvDir) {
entries, readErr := os.ReadDir(storageAvDir)
if nil != readErr {
logging.LogErrorf("read dir [%s] failed: %s", storageAvDir, readErr)
err = readErr
return
}
for _, entry := range entries {
if !strings.HasSuffix(entry.Name(), ".json") || !ast.IsNodeIDPattern(strings.TrimSuffix(entry.Name(), ".json")) {
continue
}
data, readDataErr := filelock.ReadFile(filepath.Join(util.DataDir, "storage", "av", entry.Name()))
if nil != readDataErr {
logging.LogErrorf("read file [%s] failed: %s", entry.Name(), readDataErr)
err = readDataErr
return
}
if bytes.Contains(data, []byte(oldPath)) {
data = bytes.ReplaceAll(data, []byte(oldPath), []byte(newPath))
if writeDataErr := filelock.WriteFile(filepath.Join(util.DataDir, "storage", "av", entry.Name()), data); nil != writeDataErr {
logging.LogErrorf("write file [%s] failed: %s", entry.Name(), writeDataErr)
err = writeDataErr
return
}
}
util.PushEndlessProgress(fmt.Sprintf(Conf.Language(111), util.EscapeHTML(entry.Name())))
}
}
if ocrText := util.GetAssetText(oldPath); "" != ocrText {
// 图片重命名后 ocr-texts.json 需要更新 https://github.com/siyuan-note/siyuan/issues/12974
util.SetAssetText(newPath, ocrText)
}
IncSync()
return
}

View file

@ -164,12 +164,21 @@ func OcrAsset(asset string) (ret []map[string]interface{}) {
return
}
// https://github.com/siyuan-note/siyuan/pull/11708
func GetAssetText(asset string) (ret string) {
assetsTextsLock.Lock()
ret = assetsTexts[asset]
assetsTextsLock.Unlock()
assetsTextsChanged.Store(true)
return
}
func RemoveAssetText(asset string) {
assetsTextsLock.Lock()
delete(assetsTexts, asset)
assetsTextsLock.Unlock()
assetsTextsChanged.Store(true)
}
func IsTesseractExtractable(p string) bool {
lowerName := strings.ToLower(p)
return strings.HasSuffix(lowerName, ".png") || strings.HasSuffix(lowerName, ".jpg") || strings.HasSuffix(lowerName, ".jpeg")