ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

思源笔记 v3.1.19 版本详解:超级块快捷键、本地文件系统同步、广播内核 API 与 20 项体验改进

思源笔记 v3.1.19 版本详解:超级块快捷键、本地文件系统同步、广播内核 API 与 20 项体验改进 思源笔记 v3.1.19 版本详解超级块快捷键、本地文件系统同步、广播内核 API 与 20 项体验改进【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan导读本文以思源笔记SiYuanv3.1.19 的官方变更记录见 app/changelogs/v3.1.x/v3.1.19/v3.1.19_zh_CN.md为骨架逐一解析该版本引入的 20 项功能改进、5 项缺陷修复与 2 项面向开发者的内核 API 新增。你将了解到超级块布局切换快捷键如何配置、本地文件系统同步/备份的适用前提与底层实现、查询嵌入块导出转义等修复背后的代码逻辑以及基于 WebSocket/SSE 的消息广播 API 如何用于插件与外部程序开发。文中所有结论均以当前仓库源码与配置为准并给出可验证的文件路径。版本概述与定位v3.1.19 是思源笔记 v3.1.x 系列的一个细节改进版本官方概述将其定位为改进一些细节。但从 变更记录 来看该版本实际横跨了编辑器交互、数据库属性视图、云同步、搜索、剪藏、移动端与鸿蒙系统、内核 API等多个层面且包含一个任意文件删除漏洞的安全修复属于含金量较高的一次细节迭代。根据本仓库 changelogs 目录结构v3.1.x 系列v3.1.19 处于 v3.1.18 与 v3.1.20 之间可结合相邻版本记录对照查看演进脉络。改进功能详解20 项页签拖动与右键块选择**改进页签拖动 中页签相关渲染与交互逻辑。**改进右键块选择行号槽/块标交互与 app/src/protyle 其他块操作模块。超级块创建、布局切换与快捷键超级块Super Block是思源笔记中用于将多个块组合成嵌套布局水平/垂直的容器块。本版本针对其做了两处改进**改进在超级块中创建新块 与 kernel/treenode 的节点操作逻辑中体现。添加取消超级块和切换到水平/垂直布局的快捷键新增快捷键可在取消超级块拆分为普通块与水平/垂直布局之间快速切换。快捷键的注册与分发定义于 app/src/config/shortcuts.tsconfig 模块可在「设置 → 快捷键」中查看与自定义。实操提示若你的版本已包含此功能可在快捷键设置中搜索超级块相关条目将其绑定到顺手的手势未绑定前请沿用块标菜单中的布局操作。模板弹出窗口可调整预览区域大小**模板弹出窗口支持拖动预览区域大小模板渲染与前端弹窗交互。数据库属性视图改进数据库主键锚文本支持换行数据库表中的主键字段主键是文档的锚文本现在支持多行显示解决长标题折行问题。改进数据库关联和汇总样式优化了数据库关联与汇总字段的展示样式。改进数据库资源字段弹出窗口资源附件/图片字段的弹出预览窗口交互优化。上述数据库能力对应内核中的 kernel/av 系列文件属性视图/数据库核心逻辑包括 kernel/av/av.go、kernel/av/layout.go 以及渲染侧 kernel/model/attribute_view_render.go。v3.1.19 的改动主要落在前端展示与交互层内核数据结构保持稳定。设置界面与搜索改进**改进设置界面 提供的设置读写 API 与前端设置面板。**改进搜索高亮 与 kernel/searchkernel/search/mark.go中。**改进搜索 OCR 图像预览区域定位 的 OCR 索引能力。查找替换支持包含空格的关键字**改进包含空格的关键字的查找替换 等文本处理模块。移动端与平台适配**在移动设备上编辑时禁用左右滑动弹出侧栏面板。在 Android 上申请相机权限时弹出用途说明Android 端调用相机如拍照插入前会先说明权限用途涉及移动端权限申请流程。**改进对鸿蒙系统的支持。云同步与本地文件系统同步/备份支持本地文件系统同步和备份是本版本最具功能性的新增之一下面重点展开。同步 Provider 体系思源笔记的同步引擎支持多种存储后端在 kernel/conf/sync.go 中定义了 Provider 常量Provider值说明ProviderSiYuan0思源官方云端存储服务ProviderS32S3 协议对象存储ProviderWebDAV3WebDAV 协议存储ProviderLocal4本地文件系统存储v3.1.19 的 PR #13663 正是为ProviderLocal补齐了同步与备份支持即把本地文件系统作为与 WebDAV/S3 并列的同步目标目录例如映射为网络盘、U 盘或本机其他目录从而实现本地备份 同步。同步主流程与实现位置同步的核心入口位于 kernel/model/sync.goSyncDataJob()定时同步任务自动同步调度SyncData(byHand bool)手动或自动触发同步checkSync(boot, exit, byHand bool)同步前置检查。在 kernel/model/sync.go#L261-L274 的checkSync中可以看到不同 Provider 的可用性校验逻辑不同switch Conf.Sync.Provider { case conf.ProviderSiYuan: if !IsSubscriber() { ... } case conf.ProviderWebDAV, conf.ProviderS3, conf.ProviderLocal: if !IsPaidUser() { ... } }重要前提从源码看本地文件系统同步ProviderLocal与 WebDAV/S3 一样属于付费能力IsPaidUser()校验且需要先在「设置 → 同步」中开启同步并选择 Provider。配置项同步配置保存在 kernel/conf/sync.go 与 kernel/conf/conf.go 中。选择 WebDAV/S3 时配置校验与规范化逻辑见 kernel/model/sync.go 的SetSyncProviderS3、SetSyncProvider等函数以及 kernel/model/conf.go 中的默认值初始化S3/WebDAV 默认启用SkipTlsVerify端点经util.NormalizeEndpoint规范化。同时本版本还移除 S3/WebDAV 云同步目录设置的「添加」和「移除」按钮简化了云同步目录管理交互目录配置改为更直接的编辑方式。此改动同样影响同步 Provider 配置界面。同步目录conf.Sync.CloudDir相关用于指定工作空间数据在目标存储中的路径参见 kernel/model/sync.go 的SetCloudSyncDir。Windows Defender 排除项提示**支持忽略添加 Microsoft Defender 排除项的提示 与 Windows 打包配置electron-builder.yml附近。行级公式备注与微信剪藏**改进在行级公式中添加备注 接入的 Lute 引擎。**改进微信公众号文章剪藏。修复缺陷详解5 项ShiftEnter 软换行失效**ShiftEnter在块内不执行软换行 的事务处理中生成前端按键映射在 app/src/config/shortcuts.ts。导出模板时正确转义查询嵌入块脚本**导出模板时正确转义查询嵌入块脚本嵌入块渲染见 kernel/model/embedding.go。实操提示导出/导入模板是跨工作区迁移文档骨架 查询嵌入块的常用手段v3.1.19 后导出的模板在重新导入时脚本可保持原样。任意文件删除漏洞安全修复**任意文件删除漏洞、kernel/model/raw_path_guard.go 等文件操作路径对用户传入路径做了更严格的白名单/规范化校验。升级建议涉及本地文件操作的功能如删除资源文件、清理未引用资源与内核 HTTP API 直接相关强烈建议所有自托管实例升级到 v3.1.19 或更高版本尤其是暴露在局域网/公网的服务。字体相关问题**设置-编辑器-字体在 macOS 上显示乱码 与字体渲染kernel/util/font.go。加载某些字体文件导致内核崩溃修复了加载畸形/特殊字体文件时内核崩溃panic的问题属于健壮性修复相关路径为 kernel/util/font.go 的字体解析与加载。面向开发者的内核 API2 项本版本面向插件与外部程序开发者新增了两项内核 API均实现在 kernel/api/broadcast.go属于同一套广播消息机制。1. 发布二进制消息广播的内核 APIPR #13681内核新增了通过 HTTP 向广播频道推送二进制消息的 APIPOST /api/broadcast/broadcastPublish。它基于 multipart/form-data 提交一个表单字段名即一个频道名支持向同一频道同时推送多条字符串与文件二进制消息。请求与响应结构见 kernel/api/broadcast.go 中broadcastPublish的注释定义请求MultipartForm字段名为频道名值为字符串数组或文件列表响应data.results[]数组每项包含code0 表示成功非 02/3/4/5分别对应广播失败、文件打开失败、文件读取失败等channel{name, count}其中count为该频道当前订阅者数量message{type, size, filename}type为string或binary字符串消息的filename为空字符串。2. 通过 SSE 订阅广播消息的内核 APIPR #13694新增了基于SSEServer-Sent Events的订阅端点GET /es/broadcast/subscribe。核心代码是broadcastSubscribe通过retry查询参数指定重连间隔毫秒可选见GetRetry通过可重复的channel查询参数订阅指定频道Subscribe不传channel时订阅全部频道SubscribeAll。示例摘自源码注释 kernel/api/broadcast.gohttp://localhost:6806/es/broadcast/subscribe?retry1000channeltest1channeltest2底层机制双通道广播架构这两项 API 共用一套频道抽象理解其原理有助于插件开发每个频道BroadcastChannel见 kernel/api/broadcast.go同时维护一个WebSocket 服务端基于 melody 库/ws/broadcast?channelxxx客户端可订阅并互发字符串/二进制消息一个SSE 订阅者计数用于统计统一 SSE 通道上的订阅数。全局单例UnifiedSSE基于 EventBus事件名broadcast.message把 WebSocket 与 SSE 两条链路统一WebSocket 收到的消息会转投给 SSE 订阅者反之BroadcastString/BroadcastBinary会同时写 WebSocket 会话并发送 SSE 事件。BroadcastChannel.SubscriberCount()汇总三类订阅者WebSocket 会话数 频道 SSE 订阅数 全局 SSE 订阅数。频道的创建ConstructBroadcastChannel、销毁Destroy/DestroyBroadcastChannel、清理PruneBroadcastChannels以及 WebSocket 最大消息大小128 MiB都在该文件中实现WebSocket 端点注册于 kernel/api/router.go。开发场景这两项 API 组合可用于构建内核 → 插件/外部程序的推送通道例如内核将二进制资源变更、自定义事件实时推送给多个订阅端也可用于多端互联场景下的消息中转。与既有推送体系的关系值得注意的是这套新增广播 API 与思源既有的 WebSocket 推送体系kernel/util/websocket.go并存既有体系通过BroadcastByType、PushMsg、PushReloadDoc、PushProgress等函数按会话类型main/filetree/protyle等向内核已连接的客户端广播 JSON 事件用于界面刷新、状态栏消息、进度条等新增广播 API 则是面向第三方订阅者的、按频道隔离的通用消息通道二者在连接入口/ws/broadcast与AddPushChan注册的/ws、消息格式二进制/SSE 事件 vs JSON Result上相互独立。快捷键速查与自定义本版本涉及两处快捷键相关改动超级块布局切换、ShiftEnter软换行修复。思源的快捷键系统集中定义在 app/src/config/shortcuts.ts在「设置 → 快捷键」界面可搜索并按需重绑定。常用相关快捷键示例功能默认快捷键以实际设置为准插入软换行ShiftEnter文档树/页签相关操作在快捷键设置中搜索页签说明上表仅列出变更记录明确涉及的键位具体默认值与绑定情况请以「设置 → 快捷键」面板实际显示为准。升级与获取v3.1.19 的完整变更可对照 官方变更记录相邻版本差异可查看 v3.1.x changelogs 目录。自托管部署方式见仓库根目录 Dockerfile 与 kernel/main.go 启动入口若需源码级了解同步、广播 API 等实现可重点阅读同步引擎kernel/model/sync.go、kernel/conf/sync.go广播 APIkernel/api/broadcast.go、kernel/util/websocket.go超级块/块操作app/src/protyle/gutter/index.ts、kernel/treenode属性视图kernel/av小结v3.1.19 作为一次细节改进版本实际交付了超级块布局快捷键、本地文件系统同步/备份、模板预览拖动、数据库样式优化等实用功能修复了包括任意文件删除漏洞在内的 5 个缺陷并为开发者提供了WebSocket SSE 双通道的二进制/字符串广播 API。无论你是日常使用者关注同步、编辑体验与安全升级还是插件开发者关注广播 API都可以在本文指引下结合对应源码文件深入验证与二次开发。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表