Browse Source

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

Vanessa 7 months ago
parent
commit
590b088f69

+ 7 - 1
.github/CONTRIBUTING.md

@@ -58,4 +58,10 @@ Note: In the development environment, the kernel process will not be automatical
 * `gomobile bind --tags fts5 -ldflags '-s -w' -v -o kernel.aar -target='android/arm64' -androidapi 24 ./mobile/`
 * https://github.com/siyuan-note/siyuan-android
 
-For the mobile-end, please refer to the corresponding project repository.
+### Harmony
+
+Only support compilation under Linux, need to install Harmony SDK, and need to modify Go source code, please refer to https://github.com/siyuan-note/siyuan/issues/13184
+
+* `cd kernel/harmony`
+* `./build.sh` (`./build-win.sh` for Windows Emulator)
+* https://github.com/siyuan-note/siyuan-harmony

+ 7 - 1
.github/CONTRIBUTING_zh_CN.md

@@ -60,4 +60,10 @@ NPM 镜像:
 * `gomobile bind --tags fts5 -ldflags '-s -w' -v -o kernel.aar -target='android/arm64' -androidapi 24 ./mobile/`
 * https://github.com/siyuan-note/siyuan-android
 
-移动端请参考对应项目仓库。
+### Harmony
+
+仅支持在 Linux 下编译,需要安装鸿蒙 SDK,并且需要修改 Go 源码,详情请参考 https://github.com/siyuan-note/siyuan/issues/13184
+
+* `cd kernel/harmony`
+* `./build.sh` (Windows 模拟器使用 `./build-win.sh`)
+* https://github.com/siyuan-note/siyuan-harmony

+ 3 - 1
README.md

@@ -100,7 +100,7 @@ Most features are free, even for commercial use.
 * Multi-tab, drag and drop to split screen
 * Template snippet
 * JavaScript/CSS snippet
-* Android/iOS App
+* Android/iOS/HarmonyOS App
 * Docker deployment
 * [API](https://github.com/siyuan-note/siyuan/blob/master/API.md)
 * Community marketplace
@@ -120,6 +120,7 @@ Some features are only available to paid members, for more details please refer
 | [petal](https://github.com/siyuan-note/petal)            | Plugin API            | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal)          | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal)          |
 | [android](https://github.com/siyuan-note/siyuan-android) | Android App           | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) |
 | [ios](https://github.com/siyuan-note/siyuan-ios)         | iOS App               | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios)     |
+| [harmony](https://github.com/siyuan-note/siyuan-harmony) | HarmonyOS App         | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony) |
 | [riff](https://github.com/siyuan-note/riff)              | Spaced repetition     | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff)           | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff)           |
 
 ## 🌟 Star History
@@ -346,6 +347,7 @@ SiYuan is completely open source, and contributions are welcome:
 * [User Interface and Kernel](https://github.com/siyuan-note/siyuan)
 * [Android](https://github.com/siyuan-note/siyuan-android)
 * [iOS](https://github.com/siyuan-note/siyuan-ios)
+* [HarmonyOS](https://github.com/siyuan-note/siyuan-harmony)
 * [Chrome Clipping Extension](https://github.com/siyuan-note/siyuan-chrome)
 
 For more details, please refer to [Development Guide](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING.md).

+ 12 - 10
README_ja_JP.md

@@ -99,7 +99,7 @@ SiYuanは、プライバシーを最優先とする個人の知識管理シス
 * マルチタブ、ドラッグアンドドロップで分割画面
 * テンプレートスニペット
 * JavaScript/CSSスニペット
-* Android/iOSアプリ
+* Android/iOS/HarmonyOSアプリ
 * Dockerデプロイメント
 * [API](https://github.com/siyuan-note/siyuan/blob/master/API.md)
 * コミュニティマーケットプレイス
@@ -110,16 +110,17 @@ SiYuanは、プライバシーを最優先とする個人の知識管理シス
 
 ![SiYuan Arch](https://b3logfile.com/file/2023/05/SiYuan_Arch-Sgu8vXT.png "SiYuan Arch")
 
-| プロジェクト                                                  | 説明           | フォーク                                                                           | スター                                                                                | 
-|----------------------------------------------------------|-----------------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
-| [lute](https://github.com/88250/lute)                    | エディタエンジン         | ![GitHub forks](https://img.shields.io/github/forks/88250/lute)                 | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute)                 |
-| [chrome](https://github.com/siyuan-note/siyuan-chrome)   | Chrome/Edge拡張 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-chrome)  | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-chrome)  |
+| プロジェクト                                                   | 説明              | フォーク                                                                           | スター                                                                                | 
+|----------------------------------------------------------|-----------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
+| [lute](https://github.com/88250/lute)                    | エディタエンジン        | ![GitHub forks](https://img.shields.io/github/forks/88250/lute)                 | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute)                 |
+| [chrome](https://github.com/siyuan-note/siyuan-chrome)   | Chrome/Edge拡張   | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-chrome)  | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-chrome)  |
 | [bazaar](https://github.com/siyuan-note/bazaar)          | コミュニティマーケットプレイス | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar)         |
-| [dejavu](https://github.com/siyuan-note/dejavu)          | データリポジトリ             | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu)         |
-| [petal](https://github.com/siyuan-note/petal)            | プラグインAPI            | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal)          | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal)          |
-| [android](https://github.com/siyuan-note/siyuan-android) | Androidアプリ           | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) |
-| [ios](https://github.com/siyuan-note/siyuan-ios)         | iOSアプリ               | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios)     |
-| [riff](https://github.com/siyuan-note/riff)              | 間隔反復     | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff)           | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff)           |
+| [dejavu](https://github.com/siyuan-note/dejavu)          | データリポジトリ        | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu)         |
+| [petal](https://github.com/siyuan-note/petal)            | プラグインAPI        | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal)          | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal)          |
+| [android](https://github.com/siyuan-note/siyuan-android) | Androidアプリ      | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) |
+| [ios](https://github.com/siyuan-note/siyuan-ios)         | iOSアプリ          | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios)     |
+| [harmony](https://github.com/siyuan-note/siyuan-harmony)     | HarmonyOSアプリ    | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony)     |
+| [riff](https://github.com/siyuan-note/riff)              | 間隔反復            | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff)           | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff)           |
 
 ## 🌟 スター履歴
 
@@ -345,6 +346,7 @@ SiYuanは完全にオープンソースであり、貢献を歓迎します:
 * [ユーザーインターフェースとカーネル](https://github.com/siyuan-note/siyuan)
 * [Android](https://github.com/siyuan-note/siyuan-android)
 * [iOS](https://github.com/siyuan-note/siyuan-ios)
+* [harmony](https://github.com/siyuan-note/siyuan-harmony)
 * [Chromeクリッピング拡張](https://github.com/siyuan-note/siyuan-chrome)
 
 詳細については[開発ガイド](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING.md)をご覧ください。

+ 12 - 10
README_zh_CN.md

@@ -101,7 +101,7 @@
 * Tesseract OCR
 * 模板片段
 * JavaScript/CSS 代码片段
-* Android/iOS App
+* Android/iOS/鸿蒙 App
 * Docker 部署
 * [API](API_zh_CN.md)
 * 社区集市
@@ -112,16 +112,17 @@
 
 ![思源笔记架构设计](https://b3logfile.com/file/2023/05/SiYuan_Arch-Sgu8vXT.png "思源笔记架构设计")
 
-| Project                                                  | Description    | Forks                                                                           | Stars                                                                                | 
-|----------------------------------------------------------|----------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
-| [lute](https://github.com/88250/lute)                    | 编辑器引擎          | ![GitHub forks](https://img.shields.io/github/forks/88250/lute)                 | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute)                 |
+| Project                                                  | Description  | Forks                                                                           | Stars                                                                                | 
+|----------------------------------------------------------|--------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
+| [lute](https://github.com/88250/lute)                    | 编辑器引擎        | ![GitHub forks](https://img.shields.io/github/forks/88250/lute)                 | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute)                 |
 | [chrome](https://github.com/siyuan-note/siyuan-chrome)   | Chrome/Edge 扩展 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-chrome)  | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-chrome)  |
-| [bazaar](https://github.com/siyuan-note/bazaar)          | 社区集市           | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar)         |
-| [dejavu](https://github.com/siyuan-note/dejavu)          | 数据仓库           | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu)         |
-| [petal](https://github.com/siyuan-note/petal)            | 插件 API         | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal)          | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal)          |
-| [android](https://github.com/siyuan-note/siyuan-android) | Android App    | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) |
-| [ios](https://github.com/siyuan-note/siyuan-ios)         | iOS App        | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios)     |
-| [riff](https://github.com/siyuan-note/riff)              | 间隔重复           | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff)           | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff)           |
+| [bazaar](https://github.com/siyuan-note/bazaar)          | 社区集市         | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar)         |
+| [dejavu](https://github.com/siyuan-note/dejavu)          | 数据仓库         | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu)         | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu)         |
+| [petal](https://github.com/siyuan-note/petal)            | 插件 API       | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal)          | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal)          |
+| [android](https://github.com/siyuan-note/siyuan-android) | Android App  | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) |
+| [ios](https://github.com/siyuan-note/siyuan-ios)         | iOS App      | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios)     |
+| [harmony](https://github.com/siyuan-note/siyuan-harmony)         | 鸿蒙 App       | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony)     | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony)     |
+| [riff](https://github.com/siyuan-note/riff)              | 间隔重复         | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff)           | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff)           |
 
 ## 🌟 星标历史
 
@@ -381,6 +382,7 @@ Publish parameters: --accessAuthCode=******(访问授权码)
 * [界面和内核](https://github.com/siyuan-note/siyuan)
 * [Android 端](https://github.com/siyuan-note/siyuan-android)
 * [iOS 端](https://github.com/siyuan-note/siyuan-ios)
+* [鸿蒙端](https://github.com/siyuan-note/siyuan-harmony)
 * [Chrome 剪藏扩展](https://github.com/siyuan-note/siyuan-chrome)
 
 更多细节请参考[开发指南](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING_zh_CN.md)。

+ 3 - 3
app/appearance/langs/de_DE.json

@@ -504,7 +504,7 @@
   "editReadonly": "Schreibgeschützter Modus",
   "editReadonlyTip": "Nach der Aktivierung wird das Dokument im schreibgeschützten Modus geladen.",
   "generateConflictDoc": "Konfliktdokument generieren, wenn Synchronisationskonflikte auftreten.",
-  "generateConflictDocTip": "Nach der Aktivierung wird ein Konfliktdokument generiert, wenn ein Synchronisationskonflikt auftritt, sodass es direkt geöffnet und angezeigt werden kann. Egal ob aktiviert oder nicht, die Datenhistorie wird das Konfliktdokument aufzeichnen.",
+  "generateConflictDocTip": "Nach der Aktivierung wird ein Konfliktdokument generiert, wenn ein Synchronisationskonflikt auftritt, sodass es direkt geöffnet und angezeigt werden kann. Egal ob aktiviert oder nicht, die [Datenhistorie] wird das Konfliktdokument aufzeichnen.",
   "deleteOpConfirm": "⚠️ Bestätigung der Löschoperation",
   "filterKeywordEnter": "Keyword-Filter eingeben",
   "defBlock": "Def Block",
@@ -576,7 +576,7 @@
   "key": "Schlüssel",
   "genKey": "Automatisch generieren",
   "genKeyByPW": "Schlüssel nach Passphrase generieren",
-  "dataRepoKeyTip1": "Das Daten-Repo wird verwendet, um Datenschnappschüsse zu verschlüsseln und zu speichern. Schnappschüsse können in der Datenhistorie erstellt und zurückgerollt werden.",
+  "dataRepoKeyTip1": "Das Daten-Repo wird verwendet, um Datenschnappschüsse zu verschlüsseln und zu speichern. Schnappschüsse können in der [Datenhistorie] erstellt und zurückgerollt werden.",
   "dataRepoKeyTip2": "Alle Geräte müssen denselben Schlüssel verwenden, wenn die Schlüssel übereinstimmen, können die Daten nicht in die Cloud synchronisiert werden.",
   "dataRepoKey": "Daten-Repo-Schlüssel",
   "dataRepoPurge": "Daten-Repo bereinigen",
@@ -948,7 +948,7 @@
   "copyID": "ID kopieren",
   "newBookmark": "Lesezeichenlabel erstellen",
   "generateHistory": "Intervall der Historienerzeugung (Minuten, auf 0 setzen, um zu deaktivieren)",
-  "generateHistoryInterval": "Historien werden automatisch bei der Bearbeitung oder Löschung erstellt und können in der Datenhistorie eingesehen und zurückgerollt werden.",
+  "generateHistoryInterval": "Historien werden automatisch bei der Bearbeitung oder Löschung erstellt und können in der [Datenhistorie] eingesehen und zurückgerollt werden.",
   "historyRetentionDays": "Aufbewahrungstage der Historien",
   "historyRetentionDaysTip": "Historische Daten, die die Aufbewahrungstage überschreiten, werden automatisch und vollständig gelöscht.",
   "clearHistory": "Alle Historien löschen",

+ 3 - 3
app/appearance/langs/en_US.json

@@ -504,7 +504,7 @@
   "editReadonly": "Read-only mode",
   "editReadonlyTip": "After enabling, the editor will load the document in read-only mode",
   "generateConflictDoc": "Generate conflict documentation when syncing conflicts",
-  "generateConflictDocTip": "After enabling, a conflict document will be generated when a synchronization conflict occurs, so that it can be opened and viewed directly. Whether enabled or not, the data history will record the conflict document",
+  "generateConflictDocTip": "After enabling, a conflict document will be generated when a synchronization conflict occurs, so that it can be opened and viewed directly. Whether enabled or not, the [Data History] will record the conflict document",
   "deleteOpConfirm": "⚠️ Delete operation confirmation",
   "filterKeywordEnter": "Keyword filtering Enter",
   "defBlock": "Def block",
@@ -576,7 +576,7 @@
   "key": "Key",
   "genKey": "Auto-generate key",
   "genKeyByPW": "Gen key by passphrase",
-  "dataRepoKeyTip1": "The data repo is used to encrypt and save data snapshots. Snapshots can be created and rolled back in the data history",
+  "dataRepoKeyTip1": "The data repo is used to encrypt and save data snapshots. Snapshots can be created and rolled back in the [Data History]",
   "dataRepoKeyTip2": "All devices must use the same key, if the keys are inconsistent, the data cannot be synced to the cloud",
   "dataRepoKey": "Data repo key",
   "dataRepoPurge": "Data repo purge",
@@ -948,7 +948,7 @@
   "copyID": "Copy ID",
   "newBookmark": "Create a bookmark label",
   "generateHistory": "History Generation Interval (minutes, set to 0 to disable)",
-  "generateHistoryInterval": "History is automatically generated when editing or deleting, which can be viewed and rolled back in the data history",
+  "generateHistoryInterval": "History is automatically generated when editing or deleting, which can be viewed and rolled back in the [Data History]",
   "historyRetentionDays": "History Retention Days",
   "historyRetentionDaysTip": "Historical data exceeding the retention days will be automatically and completely deleted",
   "clearHistory": "Clear all history",

+ 3 - 3
app/appearance/langs/es_ES.json

@@ -504,7 +504,7 @@
   "editReadonly": "Modo de solo lectura",
   "editReadonlyTip": "Después de habilitarlo, el editor cargará el documento en modo de solo lectura",
   "generateConflictDoc": "Generar documentación de conflicto al sincronizar conflictos",
-  "generateConflictDocTip": "Después de habilitarlo, se generará un documento de conflicto cuando ocurra un conflicto de sincronización, para que pueda abrirse y verse directamente. Ya sea que esté habilitado o no, el historial de datos registrará el documento de conflicto",
+  "generateConflictDocTip": "Después de habilitarlo, se generará un documento de conflicto cuando ocurra un conflicto de sincronización, para que pueda abrirse y verse directamente. Ya sea que esté habilitado o no, el [Historial de datos] registrará el documento de conflicto",
   "deleteOpConfirm": "⚠️ Confirmación de operación de eliminación",
   "filterKeywordEnter": "Filtrado de palabras clave Entrar",
   "defBlock": "Definir bloque",
@@ -576,7 +576,7 @@
   "key": "Clave",
   "genKey": "Gen clave auto",
   "genKeyByPW": "Clave gen por contraseña",
-  "dataRepoKeyTip1": "El repositorio de datos se utiliza para cifrar y guardar instantáneas de datos. Las instantáneas pueden crearse y revertirse en el historial de datos",
+  "dataRepoKeyTip1": "El repositorio de datos se utiliza para cifrar y guardar instantáneas de datos. Las instantáneas pueden crearse y revertirse en el [Historial de datos]",
   "dataRepoKeyTip2": "Todos los dispositivos deben usar la misma clave, si las claves son inconsistentes, los datos no se pueden sincronizar con la nube",
   "dataRepoKey": "Clave del repositorio de datos",
   "dataRepoPurge": "Purga del repositorio de datos",
@@ -948,7 +948,7 @@
   "copyID": "ID de copia",
   "newBookmark": "Crear una etiqueta de marcador",
   "generateHistory": "Intervalo de Generación de Historial (minutos, poner a 0 para desactivar)",
-  "generateHistoryInterval": "El historial se genera automáticamente cuando se edita o se borra, y se puede ver y retroceder en el historial de datos",
+  "generateHistoryInterval": "El historial se genera automáticamente cuando se edita o se borra, y se puede ver y retroceder en el [Historial de datos]",
   "historyRetentionDays": "Días de retención del historial",
   "historyRetentionDaysTip": "Los datos históricos que superen los días de retención se eliminarán automática y completamente",
   "clearHistory": "Borrar todo el historial",

+ 4 - 4
app/appearance/langs/it_IT.json

@@ -504,7 +504,7 @@
   "editReadonly": "Modalità di sola lettura",
   "editReadonlyTip": "Dopo l'abilitazione, l'editor caricherà il documento in modalità di sola lettura",
   "generateConflictDoc": "Genera documento di conflitto quando si verificano conflitti di sincronizzazione",
-  "generateConflictDocTip": "Dopo l'abilitazione, verrà generato un documento di conflitto quando si verifica un conflitto di sincronizzazione, in modo che possa essere aperto e visualizzato direttamente. Sia che sia abilitato o meno, la cronologia dei dati registrerà il documento di conflitto",
+  "generateConflictDocTip": "Dopo l'abilitazione, verrà generato un documento di conflitto quando si verifica un conflitto di sincronizzazione, in modo che possa essere aperto e visualizzato direttamente. Sia che sia abilitato o meno, la [Cronologia dati] registrerà il documento di conflitto",
   "deleteOpConfirm": "⚠️ Conferma operazione di eliminazione",
   "filterKeywordEnter": "Parola chiave di filtraggio Invio",
   "defBlock": "Blocco definito",
@@ -576,7 +576,7 @@
   "key": "Chiave",
   "genKey": "Genera chiave automaticamente",
   "genKeyByPW": "Genera chiave tramite passphrase",
-  "dataRepoKeyTip1": "Il repository dei dati è utilizzato per crittografare e salvare gli snapshot dei dati. Gli snapshot possono essere creati e ripristinati nella cronologia dei dati",
+  "dataRepoKeyTip1": "Il repository dei dati è utilizzato per crittografare e salvare gli snapshot dei dati. Gli snapshot possono essere creati e ripristinati nella [Cronologia dati]",
   "dataRepoKeyTip2": "Tutti i dispositivi devono utilizzare la stessa chiave, se le chiavi non corrispondono i dati non possono essere sincronizzati nel cloud",
   "dataRepoKey": "Chiave del repository dati",
   "dataRepoPurge": "Pulizia repository dati",
@@ -948,7 +948,7 @@
   "copyID": "Copia ID",
   "newBookmark": "Crea un'etichetta segnalibro",
   "generateHistory": "Intervallo di generazione della cronologia (minuti, impostare a 0 per disabilitare)",
-  "generateHistoryInterval": "La cronologia viene generata automaticamente durante la modifica o l'eliminazione, può essere visualizzata e ripristinata nella cronologia dei dati",
+  "generateHistoryInterval": "La cronologia viene generata automaticamente durante la modifica o l'eliminazione, può essere visualizzata e ripristinata nella [Cronologia dati]",
   "historyRetentionDays": "Giorni di conservazione della cronologia",
   "historyRetentionDaysTip": "I dati storici che superano i giorni di conservazione verranno eliminati automaticamente e completamente",
   "clearHistory": "Cancella tutta la cronologia",
@@ -999,7 +999,7 @@
   "account11": "Fino alla fine dello sconto per gli early bird",
   "account12": "Compagno di vita",
   "clickMeToRenew": "Vai al rinnovo",
-  "dataHistory": "Cronologia dei dati",
+  "dataHistory": "Cronologia dati",
   "quitApp": "Esci?",
   "reset": "Reimposta",
   "siyuanNote": "SiYuan",

+ 3 - 3
app/appearance/langs/ja_JP.json

@@ -504,7 +504,7 @@
   "editReadonly": "読み取り専用モード",
   "editReadonlyTip": "エディタが読み取り専用モードでドキュメントを読み込みます",
   "generateConflictDoc": "同期の競合時に競合ドキュメントを生成する",
-  "generateConflictDocTip": "同期の競合が発生した場合は競合ドキュメントが生成され、直接開いて表示できます。この設定に関わらずデータ履歴には競合ドキュメントが記録されます",
+  "generateConflictDocTip": "同期の競合が発生した場合は競合ドキュメントが生成され、直接開いて表示できます。この設定に関わらず [データ履歴] には競合ドキュメントが記録されます",
   "deleteOpConfirm": "⚠️ 削除操作の確認",
   "filterKeywordEnter": "フィルタキーワードを入力",
   "defBlock": "定義ブロック",
@@ -576,7 +576,7 @@
   "key": "キー",
   "genKey": "キーの自動生成",
   "genKeyByPW": "パスワードからキーを生成",
-  "dataRepoKeyTip1": "データリポジトリはデータスナップショットの暗号化と保存に使用されます。スナップショットはデータ履歴で作成およびロールバックできます",
+  "dataRepoKeyTip1": "データリポジトリはデータスナップショットの暗号化と保存に使用されます。スナップショットは [データ履歴] で作成およびロールバックできます",
   "dataRepoKeyTip2": "すべてのデバイスで同じキーを使用する必要があります。キーが一致しなければデータはクラウドに同期されません",
   "dataRepoKey": "データリポジトリキー",
   "dataRepoPurge": "データリポジトリのクリーンアップ",
@@ -948,7 +948,7 @@
   "copyID": "ID をコピー",
   "newBookmark": "ブックマークラベルを作成",
   "generateHistory": "履歴生成間隔 (分単位、無効にするには <code class='fn__code'>0</code> に設定)",
-  "generateHistoryInterval": "履歴は編集や削除時に自動的に生成され、データ履歴から閲覧およびロールバックが可能です",
+  "generateHistoryInterval": "履歴は編集や削除時に自動的に生成され、[データ履歴] から閲覧およびロールバックが可能です",
   "historyRetentionDays": "履歴の保存日数",
   "historyRetentionDaysTip": "保存日数を超える履歴データは自動的に削除されます",
   "clearHistory": "すべての履歴を消去",

+ 3 - 3
app/appearance/langs/pl_PL.json

@@ -504,7 +504,7 @@
   "editReadonly": "Tryb tylko do odczytu",
   "editReadonlyTip": "Po włączeniu edytor załaduje dokument w trybie tylko do odczytu",
   "generateConflictDoc": "Generuj dokument konfliktowy podczas synchronizacji konfliktów",
-  "generateConflictDocTip": "Po włączeniu, dokument konfliktowy zostanie wygenerowany, gdy wystąpi konflikt synchronizacji, aby można go było otworzyć i przeglądać bezpośrednio. Niezależnie od tego, czy włączone, historia danych zarejestruje dokument konfliktowy",
+  "generateConflictDocTip": "Po włączeniu, dokument konfliktowy zostanie wygenerowany, gdy wystąpi konflikt synchronizacji, aby można go było otworzyć i przeglądać bezpośrednio. Niezależnie od tego, czy włączone, [Historia danych] zarejestruje dokument konfliktowy",
   "deleteOpConfirm": "⚠️ Potwierdzenie operacji usunięcia",
   "filterKeywordEnter": "Filtrowanie słów kluczowych Wprowadź",
   "defBlock": "Definicja bloku",
@@ -576,7 +576,7 @@
   "key": "Klucz",
   "genKey": "Automatycznie wygeneruj klucz",
   "genKeyByPW": "Gen klucz według hasła",
-  "dataRepoKeyTip1": "Repozytorium danych jest używane do szyfrowania i zapisywania zrzutów danych. Zrzuty mogą być tworzone i cofanięte w historii danych",
+  "dataRepoKeyTip1": "Repozytorium danych jest używane do szyfrowania i zapisywania zrzutów danych. Zrzuty mogą być tworzone i cofanięte w [Historia danych]",
   "dataRepoKeyTip2": "Wszystkie urządzenia muszą używać tego samego klucza, jeśli klucze się różnią, dane nie mogą być synchronizowane do chmury",
   "dataRepoKey": "Klucz repozytorium danych",
   "dataRepoPurge": "Oczyszczanie repozytorium danych",
@@ -948,7 +948,7 @@
   "copyID": "Skopiuj ID",
   "newBookmark": "Utwórz etykietę zakładki",
   "generateHistory": "Interwał generacji historii (minuty, ustaw na 0, aby wyłączyć)",
-  "generateHistoryInterval": "Historia jest automatycznie generowana podczas edytowania lub usuwania, która może być wyświetlana i wycofywana w historii danych",
+  "generateHistoryInterval": "Historia jest automatycznie generowana podczas edytowania lub usuwania, która może być wyświetlana i wycofywana w [Historia danych]",
   "historyRetentionDays": "Dni przechowywania historii",
   "historyRetentionDaysTip": "Dane historyczne, które przekraczają dni przechowywania, będą automatycznie i całkowicie usuwane",
   "clearHistory": "Wyczyść całą historię",

+ 3 - 3
app/appearance/langs/ru_RU.json

@@ -504,7 +504,7 @@
   "editReadonly": "Режим только для чтения",
   "editReadonlyTip": "После включения редактор загрузит документ в режиме только для чтения",
   "generateConflictDoc": "Создавать документацию конфликтов при возникновении конфликтов синхронизации",
-  "generateConflictDocTip": "После включения при возникновении конфликта синхронизации будет генерироваться документ конфликта, чтобы его можно было открывать и просматривать напрямую. Независимо от включения или нет, история данных зарегистрирует документ конфликта",
+  "generateConflictDocTip": "После включения при возникновении конфликта синхронизации будет генерироваться документ конфликта, чтобы его можно было открывать и просматривать напрямую. Независимо от включения или нет, [История данных] зарегистрирует документ конфликта",
   "deleteOpConfirm": "⚠️ Подтверждение операции удаления",
   "filterKeywordEnter": "Ключевое слово фильтрации Ввод",
   "defBlock": "Определить блок",
@@ -576,7 +576,7 @@
   "key": "Ключ",
   "genKey": "Авто-сгенерировать ключ",
   "genKeyByPW": "Создать ключ по паролю",
-  "dataRepoKeyTip1": "Репозиторий данных используется для шифрования и сохранения снимков данных. Снимки могут быть созданы и восстановлены в истории данных",
+  "dataRepoKeyTip1": "Репозиторий данных используется для шифрования и сохранения снимков данных. Снимки могут быть созданы и восстановлены в [Истории данных]",
   "dataRepoKeyTip2": "Все устройства должны использовать один и тот же ключ, если ключи несовпадают, данные не могут синхронизироваться в облако",
   "dataRepoKey": "Ключ репозитория данных",
   "dataRepoPurge": "Очистка репозитория данных",
@@ -948,7 +948,7 @@
   "copyID": "Скопировать ID",
   "newBookmark": "Создать метку закладки",
   "generateHistory": "Интервал генерации истории (минуты, установите 0 для отключения)",
-  "generateHistoryInterval": "История автоматически генерируется при редактировании или удалении, которую можно просмотреть и откатить в истории данных",
+  "generateHistoryInterval": "История автоматически генерируется при редактировании или удалении, которую можно просмотреть и откатить в [Истории данных]",
   "historyRetentionDays": "Дни хранения истории",
   "historyRetentionDaysTip": "Исторические данные, превышающие дни хранения, будут автоматически и полностью удалены",
   "clearHistory": "Очистить всю историю",

+ 3 - 3
app/appearance/langs/zh_CHT.json

@@ -504,7 +504,7 @@
   "editReadonly": "只讀模式",
   "editReadonlyTip": "啟用後編輯器將以只讀模式載入文檔",
   "generateConflictDoc": "同步衝突時生成衝突文檔",
-  "generateConflictDocTip": "啟用後當同步發生衝突時會生成衝突文檔,以便直接打開查看。無論是否啟用,資料歷史都會記錄衝突文檔",
+  "generateConflictDocTip": "啟用後當同步發生衝突時會生成衝突文檔,以便直接打開查看。無論是否啟用,[資料歷史] 都會記錄衝突文檔",
   "deleteOpConfirm": "⚠️ Delete operation confirmation",
   "filterKeywordEnter": "關鍵字過濾 Enter",
   "defBlock": "定義塊",
@@ -576,7 +576,7 @@
   "key": "密鑰",
   "genKey": "自動生成密鑰",
   "genKeyByPW": "通過密碼生成密鑰",
-  "dataRepoKeyTip1": "資料倉庫用於加密保存資料快照,可在資料歷史中建立快照和回復快照",
+  "dataRepoKeyTip1": "資料倉庫用於加密保存資料快照,可在 [資料歷史] 中建立快照和回復快照",
   "dataRepoKeyTip2": "所有設備必須使用相同的密鑰,如果密鑰不一致則無法雲端同步資料",
   "dataRepoKey": "資料倉庫密鑰",
   "dataRepoPurge": "資料倉庫清理",
@@ -948,7 +948,7 @@
   "copyID": "複製 ID",
   "newBookmark": "新建書籤標識",
   "generateHistory": "歷史生成間隔(分鐘,設置為 0 則禁用)",
-  "generateHistoryInterval": "編輯或刪除時會自動生成歷史,可在資料歷史中查看和回復",
+  "generateHistoryInterval": "編輯或刪除時會自動生成歷史,可在 [資料歷史] 中查看和回復",
   "historyRetentionDays": "歷史保留天數",
   "historyRetentionDaysTip": "超過保留天數的歷史資料會被自動徹底刪除",
   "clearHistory": "清空所有歷史",

+ 3 - 3
app/appearance/langs/zh_CN.json

@@ -504,7 +504,7 @@
   "editReadonly": "只读模式",
   "editReadonlyTip": "启用后编辑器将以只读模式载入文档",
   "generateConflictDoc": "同步冲突时生成冲突文档",
-  "generateConflictDocTip": "启用后当同步发生冲突时会生成冲突文档,以便直接打开查看。无论是否启用,数据历史都会记录冲突文档",
+  "generateConflictDocTip": "启用后当同步发生冲突时会生成冲突文档,以便直接打开查看。无论是否启用,[数据历史] 都会记录冲突文档",
   "deleteOpConfirm": "⚠️ 删除操作确认",
   "filterKeywordEnter": "关键字过滤 Enter",
   "defBlock": "定义块",
@@ -576,7 +576,7 @@
   "key": "密钥",
   "genKey": "自动生成密钥",
   "genKeyByPW": "通过密码生成密钥",
-  "dataRepoKeyTip1": "数据仓库用于加密保存数据快照,可在数据历史中创建快照和回滚快照",
+  "dataRepoKeyTip1": "数据仓库用于加密保存数据快照,可在 [数据历史] 中创建快照和回滚快照",
   "dataRepoKeyTip2": "所有设备必须使用相同的密钥,如果密钥不一致则无法云端同步数据",
   "dataRepoKey": "数据仓库密钥",
   "dataRepoPurge": "数据仓库清理",
@@ -948,7 +948,7 @@
   "copyID": "复制 ID",
   "newBookmark": "新建书签标识",
   "generateHistory": "历史生成间隔(分钟,设置为 0 则禁用)",
-  "generateHistoryInterval": "编辑或删除时会自动生成历史,可在数据历史中查看和回滚",
+  "generateHistoryInterval": "编辑或删除时会自动生成历史,可在 [数据历史] 中查看和回滚",
   "historyRetentionDays": "历史保留天数",
   "historyRetentionDaysTip": "超过保留天数的历史数据会被自动彻底删除",
   "clearHistory": "清空所有历史",

BIN
app/src/assets/fonts/JetBrainsMono-1.0.3/JetBrainsMono-Regular.woff


BIN
app/src/assets/fonts/JetBrainsMono-2.304/JetBrainsMono-Regular.woff2


+ 3 - 3
app/src/assets/fonts/JetBrainsMono-1.0.3/LICENSE → app/src/assets/fonts/JetBrainsMono-2.304/LICENSE

@@ -1,8 +1,8 @@
 Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
 
 This Font Software is licensed under the SIL Open Font License, Version 1.1.
-
-This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
 
 
 -----------------------------------------------------------
@@ -18,7 +18,7 @@ with others.
 
 The OFL allows the licensed fonts to be used, studied, modified and
 redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
+fonts, including any derivative works, can be bundled, embedded, 
 redistributed and/or sold with any software provided that any reserved
 names are not used by derivative works. The fonts and derivatives,
 however, cannot be released under any other type of license. The

+ 2 - 2
app/src/assets/fonts/LxgwWenKai-Lite-1.311/LICENSE → app/src/assets/fonts/LxgwWenKai-Lite-1.501/LICENSE

@@ -1,9 +1,9 @@
-Copyright 2021-2023 LXGW (https://github.com/lxgw/LxgwWenKai)
+Copyright 2021-2024 LXGW (https://github.com/lxgw/LxgwWenKai)
 Copyright 2020 The Klee Project Authors (https://github.com/fontworks-fonts/Klee)
 
 This Font Software is licensed under the SIL Open Font License, Version 1.1.
 This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
+https://openfontlicense.org
 
 
 -----------------------------------------------------------

BIN
app/src/assets/fonts/LxgwWenKai-Lite-1.311/LXGWWenKaiLite-Regular.ttf → app/src/assets/fonts/LxgwWenKai-Lite-1.501/LXGWWenKaiLite-Regular.ttf


+ 1 - 1
app/src/assets/scss/component/_typography.scss

@@ -1,6 +1,6 @@
 @font-face {
   font-family: 'JetBrainsMono-Regular';
-  src: url(../fonts/JetBrainsMono-1.0.3/JetBrainsMono-Regular.woff) format('woff');
+  src: url(../fonts/JetBrainsMono-2.304/JetBrainsMono-Regular.woff2) format('woff2');
 }
 
 .b3-typography,

+ 3 - 3
app/src/protyle/toolbar/Font.ts

@@ -69,10 +69,10 @@ export const appearanceMenu = (protyle: IProtyle, nodeElements?: Element[]) => {
             const lastFontStatus = item.split(Constants.ZWSP);
             switch (lastFontStatus[0]) {
                 case "color":
-                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.colorFont} ${lastFontStatus[1] ? "" : window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="color:${lastFontStatus[1]}"` : ""} data-type="${lastFontStatus[0]}">A</button>`;
+                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.colorFont}${lastFontStatus[1] ? "" : " " + window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="color:${lastFontStatus[1]}"` : ""} data-type="${lastFontStatus[0]}">A</button>`;
                     break;
                 case "backgroundColor":
-                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.colorPrimary} ${lastFontStatus[1] ? "" : window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="background-color:${lastFontStatus[1]}"` : ""} data-type="${lastFontStatus[0]}"></button>`;
+                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.colorPrimary}${lastFontStatus[1] ? "" : " " + window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="background-color:${lastFontStatus[1]}"` : ""} data-type="${lastFontStatus[0]}"></button>`;
                     break;
                 case "style2":
                     lastColorHTML += `<button data-type="${lastFontStatus[0]}" class="protyle-font__style" style="-webkit-text-stroke: 0.2px var(--b3-theme-on-background);-webkit-text-fill-color : transparent;">${window.siyuan.languages.hollow}</button>`;
@@ -86,7 +86,7 @@ export const appearanceMenu = (protyle: IProtyle, nodeElements?: Element[]) => {
                     }
                     break;
                 case "style1":
-                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.color} ${lastFontStatus[1] ? "" : window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="background-color:${lastFontStatus[1]};color:${lastFontStatus[2]}"` : ""} data-type="${lastFontStatus[0]}">A</button>`;
+                    lastColorHTML += `<button class="color__square ariaLabel" data-position="3bottom" aria-label="${window.siyuan.languages.color}${lastFontStatus[1] ? "" : " " + window.siyuan.languages.default}" ${lastFontStatus[1] ? `style="background-color:${lastFontStatus[1]};color:${lastFontStatus[2]}"` : ""} data-type="${lastFontStatus[0]}">A</button>`;
                     break;
                 case "clear":
                     lastColorHTML += `<button style="height: 26px;display: flex;align-items: center;padding: 0 5px;" data-type="${lastFontStatus[0]}" class="protyle-font__style ariaLabel" aria-label="${window.siyuan.languages.clearFontStyle}"><svg class="svg--mid"><use xlink:href="#iconTrashcan"></use></svg></button>`;

+ 2 - 2
kernel/api/workspace.go

@@ -195,7 +195,7 @@ func getMobileWorkspaces(c *gin.Context) {
 	ret := gulu.Ret.NewResult()
 	defer c.JSON(http.StatusOK, ret)
 
-	if util.ContainerIOS != util.Container && util.ContainerAndroid != util.Container {
+	if util.ContainerIOS != util.Container && util.ContainerAndroid != util.Container && util.ContainerHarmony != util.Container {
 		return
 	}
 
@@ -315,7 +315,7 @@ func setWorkspaceDir(c *gin.Context) {
 		return
 	}
 
-	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 		util.PushMsg(model.Conf.Language(42), 1000*15)
 		time.Sleep(time.Second * 1)
 		model.Close(false, false, 1)

+ 2 - 0
kernel/bazaar/plugin.go

@@ -269,6 +269,8 @@ func getCurrentBackend() string {
 		return "ios"
 	case util.ContainerAndroid:
 		return "android"
+	case util.ContainerHarmony:
+		return "harmony"
 	default:
 		return runtime.GOOS
 	}

+ 1 - 1
kernel/model/asset_content.go

@@ -765,7 +765,7 @@ func (parser *PdfAssetParser) getTextPageWorker(id int, instance pdfium.Pdfium,
 
 // Parse will parse a PDF document using PDFium webassembly module using a worker pool
 func (parser *PdfAssetParser) Parse(absPath string) (ret *AssetParseResult) {
-	if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container {
+	if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container || util.ContainerHarmony == util.Container {
 		// PDF asset content searching is not supported on mobile platforms
 		return
 	}

+ 1 - 1
kernel/model/assets_watcher.go

@@ -33,7 +33,7 @@ import (
 var assetsWatcher *fsnotify.Watcher
 
 func WatchAssets() {
-	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 		return
 	}
 

+ 1 - 1
kernel/model/block.go

@@ -284,7 +284,7 @@ func RecentUpdatedBlocks() (ret []*Block) {
 	ret = []*Block{}
 
 	sqlStmt := "SELECT * FROM blocks WHERE type = 'p' AND length > 1"
-	if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container {
+	if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container || util.ContainerHarmony == util.Container {
 		sqlStmt = "SELECT * FROM blocks WHERE type = 'd'"
 	}
 

+ 2 - 2
kernel/model/conf.go

@@ -134,7 +134,7 @@ func InitConf() {
 
 	if "" != util.Lang {
 		initialized := false
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			// 移动端以上次设置的外观语言为准
 			if "" != Conf.Lang && util.Lang != Conf.Lang {
 				util.Lang = Conf.Lang
@@ -485,7 +485,7 @@ func InitConf() {
 		// 上次未正常完成数据索引
 		go func() {
 			util.WaitForUILoaded()
-			if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container {
+			if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container || util.ContainerHarmony == util.Container {
 				task.AppendAsyncTaskWithDelay(task.PushMsg, 2*time.Second, util.PushMsg, Conf.language(245), 15000)
 			} else {
 				task.AppendAsyncTaskWithDelay(task.PushMsg, 2*time.Second, util.PushMsg, Conf.language(244), 15000)

+ 1 - 1
kernel/model/emojis_watcher.go

@@ -32,7 +32,7 @@ import (
 var emojisWatcher *fsnotify.Watcher
 
 func WatchEmojis() {
-	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+	if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 		return
 	}
 

+ 1 - 1
kernel/model/export.go

@@ -1076,7 +1076,7 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) {
 		desc = descBuilder.String()
 		desc = desc[:len(desc)-1]
 
-		fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.311", "LXGWWenKaiLite-Regular.ttf")
+		fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.501", "LXGWWenKaiLite-Regular.ttf")
 		err := api.InstallFonts([]string{fontPath})
 		if err != nil {
 			logging.LogErrorf("install font [%s] failed: %s", fontPath, err)

+ 5 - 5
kernel/model/index.go

@@ -372,7 +372,7 @@ func subscribeSQLEvents() {
 	//	util.ContextPushMsg(context, msg)
 	//})
 	eventbus.Subscribe(eventbus.EvtSQLInsertBlocksFTS, func(context map[string]interface{}, blockCount int, hash string) {
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			// Android/iOS 端不显示数据索引和搜索索引状态提示 https://github.com/siyuan-note/siyuan/issues/6392
 			return
 		}
@@ -384,7 +384,7 @@ func subscribeSQLEvents() {
 		util.ContextPushMsg(context, msg)
 	})
 	eventbus.Subscribe(eventbus.EvtSQLDeleteBlocks, func(context map[string]interface{}, rootID string) {
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			return
 		}
 
@@ -395,7 +395,7 @@ func subscribeSQLEvents() {
 		util.ContextPushMsg(context, msg)
 	})
 	eventbus.Subscribe(eventbus.EvtSQLUpdateBlocksHPaths, func(context map[string]interface{}, blockCount int, hash string) {
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			return
 		}
 
@@ -407,7 +407,7 @@ func subscribeSQLEvents() {
 	})
 
 	eventbus.Subscribe(eventbus.EvtSQLInsertHistory, func(context map[string]interface{}) {
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			return
 		}
 
@@ -419,7 +419,7 @@ func subscribeSQLEvents() {
 	})
 
 	eventbus.Subscribe(eventbus.EvtSQLInsertAssetContent, func(context map[string]interface{}) {
-		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container {
+		if util.ContainerAndroid == util.Container || util.ContainerIOS == util.Container || util.ContainerHarmony == util.Container {
 			return
 		}
 

+ 1 - 1
kernel/model/session.go

@@ -238,7 +238,7 @@ func CheckAuth(c *gin.Context) {
 			return
 		}
 		if strings.HasPrefix(c.Request.RequestURI, "/api/sync/performSync") {
-			if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container {
+			if util.ContainerIOS == util.Container || util.ContainerAndroid == util.Container || util.ContainerHarmony == util.Container {
 				c.Set(RoleContextKey, RoleAdministrator)
 				c.Next()
 				return

+ 2 - 1
kernel/util/working.go

@@ -351,7 +351,7 @@ var (
 	AccessAuthCode string
 	Lang           = ""
 
-	Container        string // docker, android, ios, std
+	Container        string // docker, android, ios, harmony, std
 	ISMicrosoftStore bool   // 桌面端是否是微软商店版
 )
 
@@ -360,6 +360,7 @@ const (
 	ContainerDocker  = "docker"  // Docker 容器端
 	ContainerAndroid = "android" // Android 端
 	ContainerIOS     = "ios"     // iOS 端
+	ContainerHarmony = "harmony" // 鸿蒙端
 
 	LocalHost = "127.0.0.1" // 伺服地址
 	FixedPort = "6806"      // 固定端口