功能说明
本文档按使用场景整理 MyNote Mobile 当前已经支持的功能。
界面显示
-
日期时间默认显示到秒,格式为
yyyy-MM-dd HH:mm:ss,不显示毫秒或微秒,也不四舍五入。- VIP 到期时间、上次成功同步时间和收藏时间使用本地时间;关于页构建时间继续使用 UTC。
- 仅日期的选择器保留日期格式;存储、同步和时间比较保留原始精度。
-
普通确认、输入、设置及结果对话框共用窄内边距。
- 左右 12 像素,标题顶部 12 像素,内容上下 8 像素,操作区底部 8 像素;设置选项不再叠加横向内边距。
- 全屏图片预览、底部面板及笔记导航浮层保留各自专用布局。
-
Android 和 iOS 默认竖屏,显示系统栏。
-
竖屏时所有页面和弹层避让底部系统安全区域,底部至少保留 8 像素空间,避免内容被导航栏或手势区域遮挡;键盘弹出时仍保留最小间距。
-
横屏时不预留底部系统安全区或全局最小底部间距,键盘弹出时仍避让键盘。
-
编辑器内外边距缩为原来的 40%:编辑框外边距为 4.8 像素,框内左、右、下边距为 4.8 像素、上边距为 8 像素。
-
顶部应用栏按可用宽度显示操作:依次优先显示收藏夹、立即同步、搜索笔记、新建笔记,其余按原菜单顺序显示。每个图标按钮占宽 36 像素,放不下的操作收入“更多操作”,全部容纳时隐藏菜单按钮,同一操作不重复显示。
-
下文标注“更多操作”的入口,在顶部空间充足时也可直接点击对应图标。
-
顶部应用栏或“更多操作”中可切换横屏全屏,支持左右两个横屏方向;再次选择可返回竖屏。
-
横屏全屏使用沉浸式显示;系统手势可暂时显示系统栏。
-
仓库下拉入口只显示仓库名称的首字符和展开箭头,不显示省略号;读屏保留完整仓库名,抽屉列表仍显示完整名称。
-
打开笔记后,横屏将仓库入口、标签导航和编辑工具合并为顶部一行;左边只留少量边距,仓库入口按实际宽度占位。
-
横屏打开笔记时,优先为标签和编辑工具预留 540 像素,剩余宽度用于外显更多应用栏操作;窄屏优先保留收藏夹、立即同步、搜索笔记,极窄时也可收入菜单。标签与编辑工具空间不足时可左右滑动。文件筛选与差异、查看大纲和收藏大纲保留在编辑工具中,打开光标处链接收入“笔记操作”菜单。
-
“笔记操作”⋮按钮左侧的工具栏还有被裁切的操作时,按钮固定在滚动工具栏上方,仅在按钮自身的 40 像素范围内使用半透明渐变背景,透出下方的收藏等按钮,提示可以左右拖动,不向左扩展遮挡区域;⋮图标保持清晰且仍可打开菜单,末尾操作可完整滑到菜单左侧;拖到末端或全部操作可见时隐藏渐变,窗口尺寸和操作数量变化时同步更新。
-
横屏最多同时显示五个固定标签,超过五个可在固定标签区域左右滑动。竖屏保持分行布局,收藏大纲也显示在工具栏。
-
文件收藏与各处大纲收藏按钮以实心/轮廓星形表示当前状态,两种状态均使用普通背景;提示显示“收藏文件:开/关”或“收藏大纲:开/关”,预览标题保留标题名称。
-
仅使用一种图标表示两种状态的开关,在启用时使用主题
tertiary背景和onTertiary图标色;使用两种图标区分状态的按钮,两种状态均使用普通背景,尺寸与间距保持紧凑;点击行为、默认状态和持久化方式不变。 -
Android API 36 及以上不支持隐藏系统栏;宽度至少 600 dp 的设备也可能忽略方向切换。
-
Android 启动时使用清单中的竖屏配置;进入应用后仍可切换横屏全屏。
关于
- 顶部应用栏空间充足时显示“关于”图标,否则在“更多操作”菜单底部提供;悬浮快捷命令的“设置与工具”分组提供相同入口,命令 ID 为
about。 - 无需登录或打开笔记库。打开关于窗口不改变笔记状态,不中断音频播放。
- 应用内对话框显示 MyNote Mobile、应用版本、构建号、Git 短提交号(至少 7 位,冲突时由 Git 自动加长)、构建时间(UTC)和操作系统版本;不显示或复制 Flutter、Dart 版本。
- Git 提交包含构建时的未提交改动标记;构建时间指本次构建采集元数据的时间。
- 操作系统信息取自运行设备;Android 和 iOS 构建步骤自动调用
tool/flutter_with_metadata.dart注入构建信息。 - 普通
flutter run/build也会注入提交号和构建时间,无需记住专用启动命令;无 Git 的源码归档仍将提交号标为“未提供”。
- 内容支持选择、换行和滚动,适配横屏、窄屏及放大字体,沿用应用主题。
- “复制”将应用名及全部诊断信息复制为纯文本,并在窗口内提示成功或失败;复制不关闭窗口,“确定”关闭窗口。
隐藏功能
- MP3 播放、预览阅读高亮与登录/注册表单中的同步服务地址默认隐藏,包括菜单、快捷命令、自定义悬浮快捷菜单和相关设置入口。
- 连续点击关于对话框标题或正文十次,切换隐藏功能启用状态;相邻点击间隔须小于 2 秒,超时、关闭窗口或完成切换后重新计数。
- 复制、确定按钮不计数;滚动和选择文字不作为点击。
- 窗口内提示“隐藏功能已启用/已禁用”;切换或保存失败时显示错误。
- 状态仅保存在本机,重启保留,不参与同步;首次安装和旧版本升级后默认关闭。
- 禁用立即停止 MP3 播放并撤下系统媒体入口,阻止耳机控制及音频中断后的自动恢复;保留缓存、曲目和进度,重新启用不自动播放。
- 禁用时停用阅读高亮及相关手势,取消待确认操作;保留原高亮开关和各标签位置,重新启用后按原设置恢复。普通文本选择和差异高亮不受影响。
页面返回与状态保留
- 打开同步中心、登录页、个人中心、MP3 播放器或文件树差异时,保留页面栈中底下的页面。
- 顶栏返回与系统返回均回到上一层,保留原阅读、编辑和差异浏览位置、选区、未保存内容与撤销历史。
- 从同步中心进入登录页或个人中心后,返回仍保留同步中心的位置;隐藏页面不接收输入或无障碍焦点,暂停界面动画。
- 同步结果和主动切换仓库仍正常更新内容;缓存不冻结业务数据。登录页关闭时仍清除密码。
- 仅保留当前页面栈;已关闭页面再次打开与应用重启后的恢复沿用各功能原有规则。
启动与加载
-
重启后恢复上次停留的笔记首页、MP3 播放器、文件树差异或同步中心。
- MP3 与文件树差异恢复后,返回键回到笔记首页;同步中心沿用原有返回行为。
- MP3 仅在隐藏功能启用时恢复,否则回到首页并更新页面记录;复用已保存的目录、曲目和进度,重启后仍需手动播放。
- 文件树差异恢复对应仓库和已有浏览状态,重新加载比较结果;同步中心展示配额、仓库与设置。
- 正常返回、跳转到笔记或克隆成功返回首页后,不再恢复已关闭的页面。
- 页面记录仅保存在应用本地,不随仓库同步;记录损坏、目标仓库失效或比较时间不可用时回到首页。
- 登录页、菜单、抽屉、弹窗和临时面板,以及未完成的操作不恢复;强制终止前未完成的记录写入不保证恢复。
-
启动时恢复本地仓库和标签;修改时间与远端数据不阻塞主界面。
- 优先打开上次选择的仓库;没有记录或该仓库已移除时,打开名称排序后的第一个可用仓库。
-
恢复登录会话后,收藏同步和历史补齐在后台进行;登录后的远端仓库列表也异步加载。
-
历史尚未缓存或网络不可用时,修改时间筛选使用磁盘时间。
设置中心
- 隐藏功能启用后显示“当前行高亮”开关,用于启用预览阅读高亮,默认关闭;对本机所有笔记库和标签生效,立即应用并在重启后保留,不参与云同步。
- 从“更多操作 → 设置中心”集中打开图片设置与语音识别设置;图片设置仅在 Android 和 iOS 显示。
- 子设置通过返回、取消、保存或清除关闭后回到设置中心;退出设置中心后才返回主界面。
- 已登录时,退出登录也位于设置中心,沿用原有等待同步写入与保存笔记的退出流程。
- 未登录时,“更多操作”保留“登录同步服务”入口;左侧仓库下拉始终显示远端笔记库区域,并提供快捷登录按钮。
- 未登录时,首页、悬浮快捷菜单和同步中心的同步按钮仍可点击,点击后打开现有登录表单;返回后保留原页面和本地编辑。
- 已登录请求返回 HTTP 401 时,立即清除失效会话,各界面按未登录状态显示,并提示一次“登录已失效,请重新登录”。
- 停止自动同步和悬浮快捷菜单云同步重试,不强制跳转登录界面。
- 保留本地笔记库、已打开标签页、未保存编辑、待上传修改和设备身份;重新登录后继续使用现有同步流程。
- 清除持久化登录凭据,重启后不再恢复失效会话;旧会话请求的延迟响应不会清除新登录。
- 网络故障、HTTP 403 和其他服务错误不改变登录状态。
1. 仓库管理
1.1 本地仓库
- 无需登录即可新建和查看本地仓库。
- 新建仓库只保存本地元数据,不初始化同步身份。
- 左侧仓库列表和“更多操作”共用新建仓库弹窗,支持点击创建或键盘提交。
- 创建、取消或点击外部关闭时,名称输入框保留到关闭动画结束,关闭后可继续操作。
- 空白名称提示错误,不创建仓库。
- 此版本免登录主界面只显示新本地目录中的仓库。
- 旧版账号目录下的仓库暂不迁移。
1.2 仓库信息
- 在“更多操作”中可查看当前仓库:
- 名称。
- 本地路径。
- ID。
- Markdown 文件数。
- 同步身份状态。
1.3 移除仓库
- 在“更多操作”中确认后可移除当前仓库。
- 删除仓库的
.mynote元数据。 - 从本地列表隐藏仓库。
- 保留仓库目录及 Markdown 等笔记文件。
- 删除仓库的
- 元数据删除失败时,仓库仍留在列表中。
1.4 删除本地仓库
- 在当前仓库的“更多操作”或左侧本地仓库列表的操作菜单中选择“删除本地仓库”。
- 应用内确认框提示永久删除及未同步内容丢失的风险;取消不会删除数据。
- 确认后删除该仓库的整个本地目录,包括笔记、附件及元数据,不影响远端仓库。
- 删除前完成编辑器保存和已有草稿写入;同步期间禁用删除,删除失败时保留列表项并提示错误。
- 删除当前仓库会关闭其标签并返回仓库选择界面;删除其他仓库保留当前编辑界面。
- 同时清除该仓库的后台自动同步选项。
2. 账号与远端仓库
2.1 登录与会话
- 登录使用服务地址、邮箱和密码;提交前校验可见的服务地址、邮箱和 10–200 字符密码。
- 同步服务地址输入框仅在隐藏功能启用时显示,登录与注册共用此规则;隐藏后继续使用当前地址,不重置默认值、已恢复的会话地址或本次修改。
- 登录与注册密码均保留原值,包括首尾空格;不新增密码复杂度要求。
- 无效输入显示字段提示,保留页面和输入,不发送请求;修正后可继续提交。
- 登录须从主界面手动进入。
- 会话和按服务、账号隔离的设备身份保存在系统安全存储中。
- 退出后重新登录会继续使用原同步身份。
- 登录页提供“忘记密码”:填写注册邮箱,发送验证码,输入 10–200 字符新密码及 6 位验证码后重置。
- 成功后清空密码和验证码,返回登录并提示使用新密码登录;不自动建立会话。
- 重置失败保留输入,提交期间禁用重复提交和表单操作;切换用途会清空验证码,忽略旧发送响应。
- 沿用注册验证码的倒计时、有效期、重试间隔与错误提示;服务端隔离两类验证码,并共享发送限额。
- 邮箱未注册时返回相同的发送结果,仅向已注册邮箱发送重置邮件。
- 重置成功使所有旧登录令牌失效,保留设备身份、笔记及同步数据;其他设备需重新登录。
- 服务端须部署新增的密码重置接口并配置现有 SMTP;不支持旧服务端的替代流程。
- 邮箱注册沿用 PC 版:在登录页点击“注册账号”,发送邮箱验证码后填写密码和验证码,点击“验证并注册”;成功后自动登录,也可“返回登录”。
- 发送验证码只需有效服务地址和邮箱;注册密码须为 10–200 个字符,验证码为 6 位数字。
- 发送期间不能重复发送或提交注册;重发倒计时和验证码有效期采用服务端响应,发送失败时也遵守返回的重试间隔。
- 发送成功按 HTTP 成功状态及
retryAfterSeconds、expiresInSeconds判断,不要求服务返回额外的sent标记。
- 发送成功按 HTTP 成功状态及
- 修改邮箱或服务地址、切回登录或关闭页面时清空验证码和发送状态,忽略旧请求的延迟响应。
- 登录或注册失败保留密码以便修正;认证成功或关闭页面清空密码。验证码和密码不写入安全存储。
- 邮件发送、验证码限额和有效性由服务端控制;未配置 SMTP 或注册失败时显示服务错误,不影响已有账号登录。
2.2 克隆远端仓库
- 从远端仓库列表克隆时下载当前完整快照。
- 包含 Markdown 和图片附件。
- 保存后续同步所需的文件基线。
- 已有本地库不会被克隆覆盖。
- 如果同 ID 的旧克隆已存在,新克隆会使用独立目录,旧数据仍可打开。
2.3 错误反馈
- 登录、远端列表、同步和本地操作失败时,底部使用短暂的 toast 提示错误,约 4 秒后自动消失;同时带“详情”按钮和关闭图标也不常驻。
- 错误提示不占用页面内容区。
- 仓库列表展开时,Toast 显示在抽屉内部上层,支持关闭和查看错误详情,不被列表遮挡,也不自动收起列表。
- Toast 的关闭图标固定在右上角,与“详情”等操作共用顶部一行;正文在下方使用完整可用宽度,不为按钮预留侧栏,也不与按钮重叠。
- 点击关闭图标可立即关闭当前提示;文件选择器的定位提示共用此布局并支持关闭。
- 保留各处原有自动消失时长与操作按钮。
- 登录、注册、同步、笔记与仓库操作、本地设置、搜索与大纲、差异比较、照片、录音、语音转写及 MP3 的错误统一使用简洁中文说明和下一步建议,不直接展示底层异常。
- 网络、超时、权限、限流、配额及服务故障提供对应处理建议;已知验证码与同步身份错误保留具体含义。
- 已登录请求的 HTTP 401 沿用会话失效处理;登录时密码错误不清除已有会话。
- 错误提示提供“详情”,在应用内弹窗查看、选择或复制诊断文字;明确的密码、验证码及认证字段在展示和复制前隐藏。
- 详情复制失败在弹窗内提示,可继续选择文字;成功通知不增加详情入口。
- 自动同步按仓库和错误类型只提示连续失败中的首次,同类后续失败仍记录日志;该仓库同步成功后恢复提示,重新登录或切换账号时清空提示记录。
- 手动操作失败每次提示;未知服务端业务错误使用通用提示,可查看详情反馈。
- 页面或弹窗中的错误保留在原位置,旁边的“错误详情”信息图标可查看和复制诊断;照片与录音的恢复选择及文件保留规则不变。
- 相机、麦克风权限不足提示到系统设置检查权限;文件读写失败提示检查存储空间和访问权限,设备断开提示刷新设备列表。
- 倍速、播放配置等回退到默认值时明确说明当前回退状态;转写任务错误代码及 MP3 下载失败的技术信息收入详情。
- MP3 批量刷新报告保留每个文件的结果及详情入口;点击正文错误详情不会切换播放状态。
3. 文档与标签
3.1 打开与切换
- 文件选择、搜索结果和库内链接会打开或复用标签。
- 每个标签独立保留:
- 正文和未保存状态。
- 光标与选择区。
- 编辑或预览模式。
- 滚动位置:编辑和预览分别保存,切回标签时恢复最近的位置,不回退到标签创建时的初始位置。
- 大纲状态。
- 切换标签不会自动保存;选中的固定标签会滚动到可见区域。
- 标签栏左侧保留最近选中的非固定标签及其关闭按钮,名称超出固定宽度时省略,内边距与固定标签一致;单击立即打开列表,连续点击第二次会关闭列表并固定。
- 文件切换等忙碌期间保留关闭按钮和原有占位,仅禁用操作,避免标签栏宽度与相邻按钮位置晃动。
- 右侧按原有顺序展示固定标签,每个按钮只显示文件名首字符,统一采用“测”按钮约 24 像素的宽度,按钮间距为宽度的一半,并使用不透明背景;单击立即切换标签,连续点击第二次会取消固定。
- 长按标签通过底部 toast 仅显示完整路径(含文件名),不再单独重复显示文件名。
- 选中固定标签时,左侧仍保留最近选中的非固定标签,不重复展示固定标签;若全部标签都已固定,左侧显示“选择标签”入口。
- 在列表中关闭左侧显示的标签后,选择列表中的下一个非固定标签;若没有非固定标签,则切换到第一个固定标签。
- 当前标签仅使用背景高亮,不显示额外勾选图标。
已打开标签列表
- 单击左侧标签或“选择标签”入口,可从标签栏附近打开已打开标签列表。
- 列表自适应应用宽度。
- 默认固定标签置顶;每项可固定或取消固定。固定按钮以实心/轮廓图钉表示当前状态,两种状态均使用普通背景,提示显示“固定 文件路径:开/关”。
- 列表提供“按最近排序”复选项,默认不选中;启用后所有标签不区分固定状态,混合按最近访问顺序(MRU)排列,最近访问的在前,与 PC 端一致。
- 打开笔记、切换标签及关闭当前标签后自动选中的标签均更新访问顺序;固定或取消固定不改变 MRU 顺序。关闭选项恢复固定标签置顶、各组按打开顺序排列,不改变顶栏固定标签顺序。
- 排序选项与访问顺序随当前仓库的标签会话保存在本机,重启后恢复。
- 每项显示“文件名(路径)”。
- 当前项使用背景高亮。
- 右侧的 × 单击即可关闭对应标签并刷新列表,可连续关闭标签;未保存的笔记仍需确认丢弃。
- 选择标签、全部关闭或点击列表外时退出列表。
- 切换到其他标签后不弹出路径 toast;长按标签仍可查看完整路径。
- 标签列表使用与文件树和大纲一致的 34 像素行距。
3.2 导航历史
- 标签栏提供紧凑间距的前进和后退按钮;相邻导航图标以及前进图标与普通标签的可见间距均约为 12 像素。
- 系统返回操作也会执行后退。
- Android 没有可返回位置时,首次返回提示“再按一次返回键回到桌面”,2 秒内再次返回则回到桌面。
- 超过 2 秒、返回操作被抽屉、悬浮快捷菜单或子页面消耗,或应用切入后台后,需重新连续按两次返回。
- 以下跳转共用当前仓库的运行期导航历史:
- 文件选择。
- 标签切换。
- 搜索结果。
- 大纲。
- 库内链接。
- 返回已关闭的标签时会重新打开文件,并恢复:
- 编辑或预览模式。
- 选区。
- 滚动位置。
- 后退后进行新跳转会清除原前进分支。
- 切换笔记库会清空历史。
3.3 编辑、预览与保存
-
编辑、预览和当前笔记只读差异模式的正文在纵向滚动时于右侧显示细滚动条,停止后自动淡出;短内容不显示,不占用正文布局空间。代码块、表格及差异的横向滚动不触发纵向滚动条,保留原有横向滚动提示。
-
大文件操作复用当前标签的标题索引和收藏查询索引;正文变化后重新生成标题索引,光标、滚动和收藏变化不重复解析全文。
- 大纲按可见行构建,过滤保留拼音匹配及祖先标题;连续过滤复用已生成的拼音,折叠和收藏操作复用当前过滤结果。
- 移动光标仅刷新相关工具栏并保存选区状态;未变化的预览、高亮文本和源码定位映射复用缓存。
- 保留精确跳转、完整预览、差异高亮、撤销重做和原有草稿保存时机;首次预览仍需布局全文,不限制文件大小或增加大文件模式。
-
Markdown 编辑区默认启用语法高亮,不增加额外工具栏或设置项。
- 预览、当前文件差异和文件树差异的 h1–h6 标题使用与编辑区相同的分级颜色,并随明暗主题切换;保留预览标题尺寸和差异背景、行内增删标记。
- 标题按六级区分颜色,支持链接与图片、粗体、斜体、删除线、行内代码、列表、引用和分隔线等语法。
- 有语言标识的围栏代码按语言及别名高亮;无标识或未知语言保持代码样式,未闭合围栏持续到文末。
- 高亮保留原始文字、选区、输入法组合区下划线和编辑差异行背景,不改变撤销重做与标签历史。
- 浅色主题采用高对比度深色调,深色主题沿用 PC 版配色;字体尺寸与行距保持原有设置。
- 文档超过 524,288 个 UTF-16 单元时暂停源码语法高亮,缩小后自动恢复;编辑、差异背景和保存仍可用。
-
编辑、预览和只读差异模式使用图标按钮,通过背景高亮表示当前模式;点击时不弹出 toast,长按提示模式名称。
- 模式按钮按各自内容定宽,预览和差异使用紧凑图标宽度,不随编辑区的差异、只读开关一起撑宽;横竖屏保持一致。
-
新打开的已有笔记默认使用预览模式。
-
编辑和预览正文支持双指缩放,范围为 40%–200%,初始为 100%;不增加工具栏控件。
- 同一仓库的编辑和预览共用比例,切换笔记或模式后保留;不同仓库独立,比例写入会话文件,重启后恢复;没有记录时使用 100%。
- 正文缩放与当前差异、文件树差异的缩放比例独立。
- 字号叠加系统文字缩放设置;正文、标题、列表和表格随缩放重排,代码文字随缩放改变字号,代码块保留源码换行并支持横向滚动。图片、工具栏、标题收藏按钮及代码复制控件不随正文缩放。
- 双指缩放或一起移动时,在绘制前补偿滚动,使两指中心对应的正文尽量跟随手势,松手后保持位置;换行重排和滚动边界允许必要偏差。
- 双指期间抑制文本选择、预览双击定位和链接误触,保留编辑内容、选区、焦点和撤销历史;松手或取消后恢复单指操作。
-
双击预览正文切换到编辑模式,并将光标定位到对应段落、标题、列表项或代码块的源码起点,自动滚动到可见区域。
- 双击正文边距、块间距或正文下方空白时,按最近的可见预览块定位,避免只恢复高亮却不进入编辑。
- 嵌套列表定位被双击的具体列表项;单击链接、收藏标题、复制代码和滚动操作保持原有行为。
- 正在执行操作或同步时暂不响应双击进入编辑。
-
启用隐藏功能并在设置中心启用“当前行高亮”后,预览正文文字处单指长按保留选字和浮动菜单,并记录待高亮的段落、标题、具体列表项或代码块;文字处长按本身及复制、全选等菜单操作不改变高亮。
- 关闭开关立即隐藏阅读高亮、停用高亮相关手势并取消待确认的高亮操作;保留各标签已记录的位置,再次开启时恢复。文本选择、复制、双击进入编辑、滚动、缩放和差异高亮不受影响,切换设置无需重启。
- 空白处单指长按直接高亮所在的预览块,不等待再次点击;块间距、正文边距及正文外空白按最近的可见块定位,无可见块时不处理。长按当前高亮块对应空白直接取消高亮。
- 随后点击预览内任意空白处(包括块间距、正文边距和短笔记下方空白),松手时立即清除选区、关闭菜单与手柄,再高亮最初长按的块,不等待双击判定;调整选区不改变待确认目标,菜单关闭后仍可确认。同一位置紧接着的重复点击不触发编辑跳转或额外移动,后续手势取消也不会撤回已完成的确认。
- 点击其他正文文字、正文控件或预览外工具栏时关闭旧选区与菜单,原控件当次点击仍生效;文字点击和预览外操作不确认待高亮目标。菜单按钮及选区手柄保留自身交互;暂时禁用预览手势时清除旧选区与菜单。菜单实际弹出时按真实选区记录待高亮目标,涵盖普通正文、标题和代码块;即使原始长按跟踪被取消或先执行复制,随后点击空白也会同时关闭菜单并确认高亮。
- 同一笔记只保留一处高亮;文字处长按已高亮块后点击空白取消高亮,文字处长按其他块后点击空白移动高亮。
- 已有高亮且没有待确认目标或活动选区时,单击高亮块上方或下方分别向前或向后移动一个预览块,与点击距离无关;块内点击不移动,首尾不循环,空白和隐藏 HTML 不作为移动目标。
- 单击上下移动在松手时立即生效,不等待双击判定;随后识别为双击时恢复首击前的高亮并定位编辑。滚动、双指缩放及链接、图片、标题收藏、代码复制和语音控件保留原有行为。待确认目标的空白点击仅确认,不额外移动。
- 高亮使用黄色半透明背景,保留差异标记;fenced code 和引用块选中时将原背景替换为黄色背景,保留文字颜色、边框和圆角;水平分隔线选中时线条变黄,取消高亮后恢复原样。引用块和水平分隔线均支持长按高亮、上下逐块移动及重启恢复。高亮按笔记标签独立写入本地会话,切换标签、模式和重启后恢复,关闭标签后重新打开不恢复,不写入笔记正文。
- 编辑或同步改变正文后,按完整块源码内容重新匹配;重复内容选择距原位置最近的一处,同距取前一处,无匹配则清除。正文变化、切换标签或模式取消尚未确认的长按目标;切换标签或模式不影响已确认高亮。
-
新建的空白笔记默认使用编辑模式。
-
“显示编辑差异”右侧提供紧凑的锁图标,切换“编辑器只读”,默认关闭;开启时高亮,点击时不弹出 toast,长按提示当前开关状态。
- 横竖屏共用入口,不增加工具栏高度;编辑、预览和差异模式下均可设置,不改变当前模式,与编辑差异开关独立。
- 开启后收起软键盘,仍显示光标,可定位、选择和复制;点击正文、移动光标、切换标签或通过搜索、大纲与差异定位不会弹出软键盘。关闭后点击正文恢复输入。
- 只读时禁止输入、剪切、粘贴、撤销重做、拍照/录音插入和语音转文字写回;保存已有草稿与仓库同步不受影响。
- 异步附件插入与恢复在写回前检查只读状态,保留待处理内容并提示解除只读后重试;照片可从拍照入口重试恢复,录音与转写沿用原入口重试。
- 只读状态按标签保存,切换标签和重启后恢复,保留草稿、撤销历史、选区和滚动位置;旧会话缺失字段时关闭。
-
恢复的标签保留上次的模式。
-
“笔记操作”下拉菜单提供“设为默认视图”和“设为默认视图并更新到已打开文件”,横竖屏共用。
- 默认视图按笔记库保存,包含编辑/预览模式、只读差异模式、显示编辑差异、编辑器只读、精简差异和自动换行;新建空白笔记仍使用编辑模式,只读开关沿用默认视图。
- “设为默认视图”仅影响后续普通打开的新标签;已有和恢复的标签保留自己的状态。
- “设为默认视图并更新到已打开文件”同时更新全部已打开标签,包括固定标签,保持当前激活标签。
- 不复制正文、历史基线、光标、浏览位置、当前差异块、预览高亮、大纲或固定状态;保留草稿和撤销历史,缩放继续沿用仓库共享设置。
- 各标签按自身文件读取历史,当前标签立即刷新,其他标签激活时加载;历史暂不可用时保留模式与开关,关闭差异时间仍退出差异。
- 新建笔记、拍照/录音恢复、收藏与文件树差异定位保留入口明确指定的模式,其余显示开关使用默认值。
- 未设置默认视图时沿用原有行为;保存完成不弹出 toast,失败仍使用应用内提示。
-
只读差异视图按标签保留模式和历史基准;切换到其他标签后再返回,仍显示该标签的差异视图。
- 模式、精简/完整差异、自动换行、当前差异块与横纵向浏览位置按仓库持久化,重启后恢复。
- 历史基准按保存的差异时间重新读取;历史暂不可用时保留模式,历史补齐后重试。
- 恢复期间直接显示差异加载状态,不临时渲染预览正文;仍可切换标签和模式。
- 启动时并行恢复本地仓库和登录状态;本地差异基线优先读取,不等待设备身份缓存写入、上次仓库记录或同步状态摘要。
- 修改差异时间后清除各标签的旧基准,再次激活差异标签时按新时间加载;关闭差异时间会退出所有标签的差异模式。
-
模式按钮和保存按钮的内边距均为 0.5em(8 像素)。保存按钮仅显示图标,点击时不弹出“保存”toast,失败仍使用应用内提示。
- 左侧放编辑与浏览工具。
- 右侧放笔记操作与保存。
-
点击“保存”后只写入当前标签。
-
编辑模式下,“笔记操作”菜单提供带图标的“撤销”和“重做”;无对应历史或正在忙碌、同步时禁用。
- Windows/Linux 使用
Ctrl+Z撤销,Ctrl+Shift+Z或Ctrl+Y重做;macOS 使用Cmd+Z撤销,Cmd+Shift+Z重做。菜单显示当前平台的快捷键名称。 - 每个标签独立记录正文和光标选区,支持输入、删除、剪切和粘贴;连续输入在 500 毫秒内合并,输入法组合期间保持为一步。仅移动光标不产生历史。
- 撤销、重做恢复光标选区并清除输入法组合状态;撤销后再次编辑会清空重做分支。
- 切换标签、进入预览和保存后保留历史;关闭标签或重启应用后清空,不写入会话文件。
- 同步改变笔记正文后清空历史,以同步后的正文为新起点;正文未变化时保留历史。
- Windows/Linux 使用
-
以下操作前会自动保存全部未保存标签:
- 切换笔记库。
- 退出登录。
- 开始同步。
-
关闭未保存标签前会确认是否丢弃修改。
-
“笔记操作”菜单在“收藏文件”(已收藏时为“取消收藏”)上方提供“关闭全部文件”,仅关闭普通标签,保留固定标签。
- 未保存的普通标签逐个确认是否丢弃;取消时停止后续关闭,已关闭的标签不恢复。
Markdown 编辑菜单
- 编辑工具条的“笔记操作”下拉菜单中的“编辑”分组仅在启用隐藏功能后显示,默认折叠;点击后在原菜单内展开,再次点击收起,空间不足时滚动。横竖屏共用此入口,不增加工具条高度。
- 隐藏功能仅控制此子菜单入口;独立 Markdown 编辑工具条、悬浮快捷菜单及键盘快捷键等其他入口保持原有行为,关闭隐藏功能后仍可使用。
- 分组平铺正文、标题 1–6、引用、切换列表、粗体、斜体、删除线、链接、行内代码、代码块,共 15 项,沿用 PC 端选区工具条的转换规则。
- 标题处理单个逻辑行,支持 ATX 与 Setext 标题转换及还原正文;跨行选区禁用标题操作。
- 引用与无序列表切换选中完整逻辑行的标记;选区恰好结束于换行后时不影响下一行。无选区时处理光标所在行。
- 粗体、斜体、删除线及行内代码要求非空选区,可添加或取消标记;行内代码不接受多行选区,并按内容选择足够长的反引号。
- 代码块包裹选中文本,无选区时在光标处插入空代码块;自动补齐块边界换行,并避开正文中的反引号。
- 链接使用应用内对话框输入文字和地址;选中完整链接、链接文字或地址时预填既有值,更新时保留链接标题,并转义文字和地址。选中 URL 时自动预填地址;取消不修改正文。
- 菜单打开时保存活动笔记、正文和选区,执行前及链接对话框确认后检查笔记、正文和写入权限;状态变化时提示重新打开菜单,不覆盖新内容。
- 格式功能仅在可写的源码编辑视图启用;加载、只读、同步锁定、预览和差异视图禁用。每次修改独立支持撤销和重做,保留转换后的选区并恢复编辑焦点。
- 仅在编辑视图的正文上方默认显示独立的 Markdown 编辑工具条,预览和差异视图不显示;切换视图不改变已保存的显示开关。横竖屏均为一行,使用图标入口提供全部 15 项操作,长按提示功能名称。
- 标题 1–6 合并为一个标题图标按钮,点击后向下展开六项标题级别;正文保留独立按钮。
- 按钮的图标尺寸、内边距和视觉密度与上方工具条一致;工具条高度为 40 像素,空间不足时横向滚动功能按钮,最右侧的关闭按钮始终可见。
- “笔记操作”菜单在“悬浮导航菜单”下方提供“编辑工具条”开关;开关图标与提示表示当前显示状态。
- 关闭按钮与菜单开关共用本机保存的显示设置,跨仓库共用,重启后恢复;该显示设置不参与账号同步。
- 工具条与两个菜单共用格式命令、选区及撤销逻辑,并遵守相同的只读和同步锁定限制;悬浮快捷菜单自定义配置不影响工具条的功能项。
- 悬浮快捷菜单新增“Markdown 编辑”分组,包含全部 15 项,复用同一命令和可用性规则,可在自定义菜单中按需勾选。
- 每项可单独通过“自定义菜单”配置,参与全选、取消全选、反选、恢复默认、本地保存及账号配置同步。
- 显示配置仅影响悬浮快捷菜单,工具条“编辑”分组始终保留全部选项;已有和未知配置 ID 均保留。
3.4 会话与草稿恢复
- 以下状态按仓库保存在
.mynote/mobile-tabs-v1.json:- 打开的标签。
- 当前笔记库的默认视图,关闭全部文件、切换笔记库和重启后仍保留。
- 活动标签。
- 标签顺序。
- 固定状态及左侧显示的非固定标签。
- 未保存草稿。
- 每篇笔记的“显示编辑差异”开关;切换标签或重启后恢复。
- 只读差异模式与显示选项、差异浏览位置,以及文件树差异浏览状态和仓库共享缩放值。
- 编辑与预览共用的正文缩放比例,即使没有打开标签也会保存;与差异缩放独立。
- 应用重启后恢复标签,包括以空行开头的笔记。
- 若恢复期间磁盘正文也已变化:
- 先尝试三方合并。
- 无法合并时,将草稿保存为同目录的可见“恢复冲突”副本,避免覆盖任一版本。
3.5 悬浮导航菜单
- 打开笔记后,正文区域右下角固定显示悬浮导航菜单;默认折叠,点击向上纵向展开。
- 四项自上而下为“上一处差异”“下一处差异”“上一个文件”“下一个文件”,使用图标和中文长按提示。
- 文件导航使用文档图案,差异导航复用“显示编辑差异”的图案,右下角分别叠放向上/向下小箭头表示方向,组合图案宽度为 28 像素。
- 操作后保持展开,点击主按钮收起;切换文件、隐藏后重新显示或离开笔记工作区再返回时保留展开状态。
- “笔记操作”下拉菜单提供“悬浮导航菜单”,控制整个悬浮导航菜单的显示与隐藏,默认开启。
- 显示与展开状态保存在设备本地,不参与仓库同步;切换文件、模式或仓库以及重新启动应用后均恢复上一次状态。
- 折叠时为直径 40 像素的圆形,展开后为宽 40 像素的胶囊形;按钮点击区域保持 48 × 48 像素,避让安全区和软键盘;可用高度不足时菜单项可纵向滚动。
- 底部提示在右侧留出菜单空间,便于连续操作;加载、同步或导航执行期间禁用菜单。
- 文件切换沿用文件面板的关键词、路径、高级条件和时间筛选,以及已有结果缓存规则。
- 按文件树深度优先顺序切换,忽略目录折叠,首尾循环。
- 当前文件不在结果中或没有结果时提示无法切换;仅有一个文件时保持当前文件。
- 复用标签打开流程,保留草稿和固定状态;新文件默认预览,已有标签恢复自身模式。
- 点击悬浮导航菜单的“上一处差异”或“下一处差异”时,保持当前编辑、预览或只读差异视图,按方向定位差异块,首尾不循环。
- 历史基准加载成功后,自动开启编辑图标旁的“显示编辑差异”开关并显示高亮;三个视图均保留当前视图,开关状态沿用标签会话保存。
- 差异时间关闭时自动启用并保存上次的差异时间,没有有效记录时使用“最近七天”;只启用比较选项,不自动切换到“差异”视图。
- 已配置的差异时间和文件筛选条件保持不变;历史不可用或没有可定位差异时保留原视图并提示原因。
- 编辑按光标定位相邻连续差异块首行;预览通过源码行定位渲染块,连续点击推进逻辑差异块,手动滚动后从视口重新定位。
- 编辑和预览定位新增/修改行,纯删除内容仍通过手动选择只读“差异”视图定位;原有差异视图上下按钮保留。
- 顶栏直接选择“差异”仍切换视图,并共用差异时间的自动启用逻辑。
- 自动开启“显示编辑差异”及比较时间不会修改正文或草稿。
3.6 可拖动悬浮快捷菜单
- 工作区默认显示可拖动悬浮快捷菜单,包括未选择仓库、空仓库及未打开笔记的状态;悬浮导航菜单保留原有行为。
- “笔记操作”菜单依次提供“悬浮快捷菜单”“悬浮导航菜单”“编辑工具条”开关;名称不加“显示”前缀及“开/关”后缀,睁眼/闭眼图标表示当前显示/隐藏状态,关闭后可从同一入口重新开启。
- 未打开笔记时,顶部应用栏或“更多操作”保留“悬浮快捷菜单”开关,确保无笔记时也能重新开启;打开笔记后不重复显示此入口。
- 两个开关复用快捷命令
floatingShortcuts和floatingNavigation,均可在自定义菜单中选用。 - 显示状态在本机保存,重启后恢复,不参与账号同步;关闭不清除拖动位置及自定义选项。
- 默认位于悬浮导航菜单左侧,主按钮点击区域为 48 × 48 像素;按住拖动即可移动,拖动不触发展开。
- 拖动结束后按可用区域的相对坐标保存位置;横竖屏切换、软键盘弹出及窗口缩小时避让安全区和键盘,不覆盖已保存的位置。
- 位置在设备本地保存,跨仓库共用,不参与仓库同步。
- 默认折叠,点击主按钮展开或收起;重新启动或重新进入工作区时折叠。
- 展开后显示图标加文字的紧凑列表,根据上下空间选择展开方向;宽度适配屏幕,高度不足时滚动。
- 点击可执行项时先收起,再执行原有操作;禁用项点击不收起。
- 点击菜单外或按返回键收起;返回键优先收起悬浮快捷菜单,再处理历史导航。
- 默认仅选中“固定当前标签”“撤销”“重做”;已有本地或云端选择保持不变。全部可选入口按以下固定分组平铺,组间加入分隔线;不生成空组分隔线。
- 导航:笔记库列表、打开笔记、后退、前进、搜索、收藏夹、大纲、文件筛选与差异、文件树差异、上/下一个文件、上/下一处差异。
- Markdown 编辑:正文、标题 1–6、引用、切换列表、粗体、斜体、删除线、链接、行内代码、代码块。
- 笔记:新建、保存、关闭当前/全部文件、固定当前标签、收藏文件/当前大纲、移动或重命名、删除。
- 视图与编辑:编辑、预览、差异、显示编辑差异、编辑器只读、撤销、重做、打开光标处链接、两项默认视图操作、悬浮快捷菜单、悬浮导航菜单、横屏全屏。
- 附件:录音插入附件、拍照插入图片、拍照并调整、批量语音转文字。
- 仓库与同步:立即同步、同步中心、新建本地仓库、仓库信息、重建大纲索引、移除仓库、删除本地仓库。
- 设置与工具:关于、设置中心、图片设置、语音识别设置、MP3 播放器(隐藏功能启用时)、登录或退出登录。
- 顶部应用栏外显操作及“更多操作”“笔记操作”两个下拉菜单的操作项均显示图标,与悬浮快捷菜单中的同一操作保持一致;收藏与全屏图标随当前状态变化,长名称在菜单内换行。
- 快捷入口复用现有操作,保留只读、同步锁定、加载状态、未保存确认及删除确认规则。
- 无活动笔记时禁用笔记相关项;平台不支持或登录状态不适用的项隐藏。
- 开关名称与图标展示当前状态;使用同一种图标的开关在开启时使用高亮背景与高对比图标。
- 文件、仓库选择及子页面内部操作继续使用原面板,不在悬浮快捷菜单中递归展开。
- 列表末尾固定提供“自定义菜单”,使用应用内对话框按组勾选显示项;点击“保存”生效,“取消”放弃本次修改。
- 配置项显示与悬浮快捷菜单一致的图标,复选框靠右;底部“恢复默认”“取消”“保存”均带图标,以紧凑间距尽量保持一行,空间不足时换行。
- 提供“全选”“取消全选”“反选”,作用于所有可配置功能项(包括当前禁用或平台暂不显示的项);批量修改同样在点击“保存”后生效,点击“取消”放弃。
- 恢复默认仅选中“固定当前标签”“撤销”“重做”,也允许取消全部功能项;自定义入口始终保留。
- 分组及组内顺序固定,不支持排序、自建分组或脚本命令。
- 显示项选择先保存到本地,跨仓库共用;登录后通过账号配置云同步,同一账号的移动设备共享选择;拖动位置和展开状态仍仅保存在本机。
- 保存配置、登录、启动恢复账号及回到前台时尝试同步;前台每 60 秒检查其他设备的修改,独立于笔记库自动同步开关;手动同步也会重试配置同步。
- 首次连接以云端已有配置为准,云端尚无配置时上传本机选择;已记录的离线修改优先上传,同一字段以服务端最后成功提交的版本为准。
- 账号与服务地址分别隔离缓存和待上传修改;切换账号时先恢复该账号缓存,新账号没有配置时使用上述三项默认选择,不上传上一账号的选择。
- 未登录时仍可本地保存;网络失败保留待上传修改,重启后继续重试;自动同步失败记录诊断日志,手动同步失败给出应用内提示。
- 无效云端配置不覆盖本机选择;未知功能 ID 保留但不影响当前菜单。启用此功能需更新服务端和桌面客户端,旧版本兼容不在本次范围内。
- 底部提示避让两个悬浮菜单的默认位置;自由拖动后仍可按需避开提示区域。
4. 笔记管理
4.1 新建笔记
- 可在当前仓库中新建 Markdown 笔记。
- 输入相对路径即可创建子文件夹。
- 路径对话框默认填写“新建笔记.md”,支持点击创建或键盘提交;确认、取消或点击外部关闭后可继续操作。
- 移动与重命名使用同一路径输入流程,预填当前路径。
4.2 移动、重命名与删除
- 当前笔记菜单支持:
- 移动到其他文件夹。
- 重命名。
- 确认后永久删除。
- 移动会让对应标签及其未保存草稿跟随新路径。
- 删除会同时关闭对应标签。
移动限制
- 跨文件夹移动笔记不会重写正文中的相对图片路径。
- 移动后可能需要手动调整图片引用。
笔记导航面板
- 文件选择、搜索笔记、文档大纲和收藏夹四项功能统称“笔记导航”,承载它们的底部面板统一称为“笔记导航面板”。
- 面板内的“文件/搜索/大纲/收藏”四项称为“导航标签”,用于查找和跳转笔记内容,与已打开笔记的文档标签区分。
- 四项功能共用一个底部面板,顶部通过导航标签点击切换,不支持左右滑动切换。
- 原有入口保留,每次打开直接选中对应标签;文件页的收藏夹按钮在同一面板内切换到收藏标签。
- 标签栏替代各页重复标题,下方保留当前页的工具按钮与原有功能。
- 横竖屏、有无软键盘时均将面板顶部固定在屏幕高度的 15% 处;下方延伸至底部安全区域,统一避让系统安全区域和键盘。
- 面板顶部按屏幕高度定位,不按键盘上方剩余空间计算;键盘与底部安全区域变化只调整下方可用内容区,切换导航标签时顶部不跳动。
- 键盘或大字体导致内容高度不足时,页内工具与列表区域可纵向滚动,顶部标签保持可见。
- 各页首次访问时才创建;同一次打开期间,切换标签保留各自独立的输入、查询结果和滚动位置。
- 隐藏页不接受焦点,也不参与无障碍朗读。
- 切换标签收起当前输入键盘;进入搜索标签时聚焦搜索框。
- 关闭后不恢复上次选中的导航标签;文件、搜索、大纲三个标签分别保留上次关键词和搜索结果,再次打开直接显示缓存结果。
- 仅修改关键词时重新计算;文件筛选条件、大纲范围或拼音选项变化,以及显式定位、读取失败重试,按对应操作更新结果。
- 笔记内容或文件清单变化不会在重新打开面板时自动重算;修改关键词后查询最新数据。结果缓存在当前应用会话内,不同仓库独立。
- 文件和大纲页的收藏操作完成后,收藏页同步刷新。
- 没有当前笔记时,大纲页在当前笔记范围显示“尚未打开笔记”,仍可通过“当前仓库所有笔记”图标切换到全库大纲;其他标签仍可使用。
- 选择文件、搜索结果、标题或收藏后关闭整个面板,再按原有规则打开或定位;文件树差异继续打开独立页面。
5. 文件选择器
- 文件选择弹窗沿用笔记导航面板布局,横竖屏、有无软键盘时顶部均固定在屏幕高度的 15% 处。
5.1 目录显示
- 默认以 34 像素紧凑行距树形展示目录。
- 树形/列表切换按钮展示当前模式图标:树形为目录树图标,列表为列表图标,两种模式均使用普通背景;提示显示“文件视图:树形/列表”。
- 同层级文件与目录保持对齐。
- 每行保持单行,名称过长时可横向滑动。
- 可切换为列表模式。
5.2 折叠、过滤与定位
- 支持单目录折叠和全部折叠或展开。
- 支持以下过滤方式:
- 中文。
- 无声调全拼。
- 拼音首字母。
- 文件页和大纲页支持
p:相对路径、f:所属文件名限定,不区分大小写,按连续文字匹配。p:匹配完整仓库相对路径(包含文件名);f:只匹配文件名,包含扩展名。- 重复限定项与普通关键词全部取“与”,并与已有高级文件筛选条件叠加;限定值不使用拼音或跳字匹配。
- 双引号支持空格,如
p:"项目 笔记" f:会议 hy;未闭合引号按当前已输入的值即时匹配,直到输入末尾。 - 空值(如
p:、f:"")保留为普通关键词;只有限定项时显示符合文件条件的结果,保持既有顺序。
- 文件名、相对路径、大纲标题与正文搜索的命中片段统一使用淡蓝色背景、深蓝色文字及粗体,明暗主题保持一致;拼音命中映射回对应汉字。
- 树形按完整路径计算,再裁剪到各行可见的目录或文件名;列表显示完整相对路径的命中。
- 支持原文顺序跳字、多关键词和拼音首字母跳字;全拼仅连续匹配,重叠命中合并。
- 高亮复用当前查询缓存,只为可见行生成,不改变筛选结果与顺序。
- 点击“定位当前文件”会:
- 保留快速过滤、高级文件筛选、修改时间条件及当前结果缓存,不触发重新筛选。
- 展开文件所在文件夹,按实际筛选结果中的行序滚动到当前文件。
- 当前文件不在显示结果中时,在面板上方显示底部 toast,约 4 秒后自动消失,无需确认,不阻挡操作;不清空过滤内容、结果列表或滚动位置。
5.3 状态保留
- 关闭后重新打开文件选择器时,保留当前仓库的:
- 树形或列表模式。
- 折叠状态。
- 过滤内容。
- 各模式的滚动位置。
- 切换仓库时,文件选择器恢复默认状态。
5.4 最近打开
- 文件选择器显示最近打开的文件。
- 每个仓库最多保存 20 条。
- 移动或删除笔记后同步更新最近记录。
5.5 收藏夹
- 收藏夹弹窗沿用笔记导航面板布局,横竖屏、有无软键盘时顶部均固定在屏幕高度的 15% 处。
- 文件选择器的文件行和当前笔记菜单可收藏或取消收藏文件。
- 大纲标题右侧的星标可收藏或取消收藏标题;同名同级标题按出现顺序区分。
- 预览正文的每个标题后也提供与标题居中对齐的星标,可直接切换该标题的收藏状态。
- “笔记操作”菜单在文件收藏项下提供大纲收藏切换项,作用于当前光标或阅读位置所属标题;首个标题之前不可用。
- 顶部“收藏夹”入口显示当前仓库的文件与大纲收藏,最多 100 项。
- 默认按文件组织;排序按钮依次切换为收藏时间降序、升序,再回到按文件组织。排序方式按仓库保留。
- 点击大纲收藏时按最新正文精确查找标题;标题身份失效时跳到收藏时记录的源码行。
- 收藏跳转保持当前编辑、预览或差异视图,并在该视图内定位;目标文件没有差异基线时保留原文件的差异视图。
- 预览中失效的大纲收藏若保存行不再是标题,则按源码位置估算预览滚动位置。
- 移动或删除笔记会更新对应收藏,并保留取消收藏记录供多设备同步。
- 收藏可离线使用,登录后与 PC 端按仓库 ID 独立同步;旧服务端缺少收藏接口时会提示升级。
- 收藏或取消收藏先写入本机,不因网络请求阻塞操作;登录恢复、切换仓库及手动或定时同步时在后台合并远端收藏。断网期间的变更保留在本机,后续同步时上传。
5.6 条件与时间筛选
-
编辑工具栏在“查看大纲”左侧提供“文件筛选与差异”按钮,横竖屏均可直接打开设置;文件选择器保留原入口,两个入口共用设置,并在筛选生效时显示标记。
-
文件选择器保留中文、全拼和拼音首字母即时搜索,并可叠加以下条件:
- 文件名包含。
- 仓库相对目录。
- 以逗号或空格分隔的扩展名。
- 支持注释、反选和父目录排除约束的忽略规则。
- 修改时间。
-
修改时间支持:
- 最近一天、七天、一个月、两个月、三个月和半年。
- 数值天数、
ms、s、m、h、d、w固定时长。 - ISO 8601 周、日和时间时长。
- 本地日期、日期时间及日历选择。
-
修改时间优先使用磁盘时间与可靠同步历史时间中较早的一个。
- 尚无同步历史时使用磁盘修改时间。
-
修改时间在打开时间筛选时按需读取;首次读取显示加载状态,已有结果时保留结果与输入框直到读取完成,失败后可重试。
-
悬浮导航菜单切换上/下一个文件时,若时间筛选尚无缓存结果,先按需读取修改时间,再与文件选择器共用筛选结果,避免将未加载的时间误判为空结果。
-
文件搜索连续输入及缓存结果刷新时保留输入焦点和软键盘,启用修改时间筛选时同样适用。
-
内置“全部文件”和“最近七天”预设。
-
每个仓库可保存、更新、重命名或删除最多 100 个自定义预设。
- 新建与重命名的名称去除首尾空白后须非空,最多 80 字符;无效时显示字段提示并保留弹窗。
- 另存与重命名使用应用内名称弹窗,确认或取消时保留输入框至关闭动画结束,避免控制器提前释放导致红屏;空白名称不保存。
-
筛选时间保留日期、天数、组合时长及 ISO 时长语法;非有限数、超大时长和日期运算越界返回无效提示,不抛出解析异常。
-
筛选条件、预设和差异选项按仓库保存在
.mynote/mobile-ui-state-v1.json。 -
筛选只影响文件选择器显示,不会修改
.mynoteignore、正文或同步范围。
5.7 当前文件差异
- 编辑和预览旁提供只读“差异”模式,默认关闭。
- 点击编辑图标恢复上次的编辑状态;旁边的“显示编辑差异”图标按钮切换开、关,开启时使用主题强调色实心背景和对应的高对比图标,与模式按钮的浅色背景区分,点击时不弹出 toast,长按提示状态。默认关闭,在编辑和预览模式下均可切换,保持当前模式;只读差异模式下不可切换。
- 开关绑定当前笔记,收藏跳转不会将来源笔记的开关复制给目标笔记。
- 重启后按保存的差异时间重新读取历史基线,保留原来的编辑或预览模式;历史暂不可用时保留开关,待历史补齐或重新切换标签后恢复高亮。
- 启用编辑差异时,当前正文中相对时间基线新增或修改的行会以绿色高亮。
- 从编辑差异切换到预览时,沿用同一历史基线高亮包含新增或修改行的预览块;普通预览不高亮,纯删除不在当前预览中标记。
- 连续源码行属于同一个 Markdown 段落时,将其映射为同一个预览块,避免其他块的高亮失效。
- 列表项的续行归入同一个预览列表块;不同项目符号形成的独立列表保持各自的源码位置。
- 原始 HTML 块不显示为预览正文,也不会影响其他预览块的差异高亮。
- 差异时间可跟随文件筛选,也可单独选择时间范围。
- 应用文件筛选设置后,当前只读差异与已开启的编辑、预览差异重新读取历史基线并计算;关闭差异时间会退出差异模式并清除高亮,历史不可用时不保留旧差异结果。
- 当前未保存正文会与指定时间或更早的最近同步历史版本比较。
- 差异视图支持:
- 带新旧行号的新增、删除及上下文行,删除为红色背景,新增为绿色背景,行首不显示加减号。
- 成对显示相似的修改行,并在行内高亮具体删除和新增内容。
- 没有可配对行的整段替换,依次显示旧文本的删除行与新文本的新增行。
- 完全空行的相等匹配优先级低于相同或相似的正文行;对齐冲突时按删除和新增显示空行,纯空格行不视为完全空行。
- 相似的删除行与新增行无论先后顺序,即使被未变化的空行隔开,也会进行行内对比,同时保持空行与行号的原有顺序。
- 默认显示精简差异,可切换为完整差异。精简时使用短文本图标,完整时使用全文图标,两种状态均使用普通背景;提示显示“精简差异:开/关”。
- 整个差异区域共享水平滚动,也可切换自动换行。换行开启时使用换行图标,关闭时使用直线文本图标,两种状态均使用普通背景;提示显示“自动换行:开/关”。
- 差异行支持双指缩放,并与同一仓库的文件树差异共享缩放值。
- 缩放仍通过调整正文、行号字号及相关间距实现;同步补偿横向、纵向滚动,使两指下的内容尽量跟随拇指,松手后保持最终位置。
- 字号变化与滚动补偿在同一帧绘制前完成,避免先缩放再归位的晃动;差异区域关闭系统边缘拉伸效果,保留单指滚动。
- 双指一起移动时可平移内容;自动换行重排或到达滚动边界时允许必要偏差,优先保持两指中心对应的正文位置。
- 上一处和下一处差异基于当前视图位置导航,仅调整垂直位置并保留水平滚动位置;当前块整段显示定位条,首尾会显示到头提示。
- 连续点击时按当前选中的差异块依次导航;上下文留白或滚动到首尾导致多个块共用滚动位置时,也不会跳回前面的块。手动滚动后按新的视图位置导航。
- 单击差异行保持差异视图,双击返回编辑模式并定位正文。
- 换行符和文件末尾换行统一处理,避免相同正文被误报。
- 大型 Markdown 超过差异内存保护阈值时,会按中间未变化的唯一行分段对齐,不会把首尾变化之间的相同内容误显示为整段删除和新增。
- 较大笔记的只读差异计算和较大历史缓存的首次解析、校验在后台执行,避免阻塞界面。
- 只读差异结果按当前正文与历史基准缓存;切换精简显示、换行或导航时复用结果。
- 移动端不提供 Git HEAD 比较。
5.8 文件树差异
- 文件选择器顶部可打开全屏文件树差异。
- “比较时间”按钮左侧提供横屏全屏切换按钮,可直接进入或退出横屏沉浸式全屏;图标和长按提示显示当前状态,切换保留差异结果与浏览位置,返回笔记后保持所选显示模式。
- 全屏时,全部展开、全部折叠、精简差异与自动换行按钮合并到顶部栏,不再单独占用一行;标题空间不足时省略显示。
- 笔记工具栏在“查看大纲”右侧也提供“文件树差异”图标入口,横竖屏均可直接打开;与文件选择器入口共用比较时间、结果和浏览状态,忙碌时禁用。
- 比较范围为仓库内全部 Markdown 文件,不受当前显示筛选影响。
- 页面只列出正文实际变化的文件;比较完成后通过底部短暂 toast 提示比较时间、变化文件数、扫描数与历史不可用跳过数,不在工具栏中常驻占位。恢复已缓存的比较结果时不重复提示。
- 比较时复用进程内的本地历史缓存,一次读取并索引历史;历史版本时间统一使用该版本的
createdAt,与 PC 端文件历史一致;当前同步历史时间未变化的正文直接跳过磁盘读取,其他文件跳过差异矩阵计算,并以最多 8 个并发读取当前正文。 - 已打开且未保存的文件直接使用内存草稿参与比较,不再读取磁盘正文。
- 首次比较、重新比较或变更比较时间时,加载页面显示准备阶段、已比较文件数、变化数、历史不可用数和当前文件。
- 诊断日志以
[mynote.tree_diff]前缀输出到 Flutter/Android 控制台,记录历史加载、逐文件读取与差异计算耗时,以及最终汇总耗时,不记录正文内容。 - 比较结果按滚动位置懒构建文件差异,避免变化文件较多时一次性创建全部行组件。
- 支持修改比较时间、重新比较、全部折叠或展开、精简差异、整体水平滚动和自动换行。精简差异与自动换行按钮的当前状态图标、普通背景和提示与当前文件差异视图一致。
- 在任一文件的差异行区域双指缩放时,所有文件的差异行(正文和行号)同步缩放,并与当前文件差异共享缩放值;缩放值按仓库持久化,重启后恢复,范围为 40%–200%。
- 以两指中心对应的正文位置补偿列表纵向滚动及当前触摸文件的横向滚动,使内容尽量跟随拇指;文件标题不参与缩放。
- 字号变化与横向、纵向滚动补偿在同一帧绘制前完成;差异区域关闭系统边缘拉伸效果,避免与缩放叠加造成晃动。
- 松手后保持最终位置;自动换行重排或到达滚动边界时允许必要偏差。
- 可从文件标题直接打开对应笔记。
- 单击差异正文保持文件树差异页面;双击正文打开对应笔记并定位,省略提示行不跳转。
- 新增行和未变化行定位当前正文对应行;删除行定位之后第一条当前正文,末尾删除定位文件末尾,空文件定位起点。
- 已打开的笔记保留原有编辑、预览或差异模式及未保存草稿;未打开的笔记沿用进入文件树差异前的模式,没有来源笔记时默认预览。
- 编辑模式定位光标并滚动到可见区域;预览模式精确定位对应段落、列表项或代码块,空白或隐藏内容定位后续可见块,末尾定位前一块,无法映射时使用应用内提示。
- 标题、代码块或引用后紧接空列表项(如
-)时仍保持独立的正文映射,不将列表标记误当作 Setext 标题下划线。
- 标题、代码块或引用后紧接空列表项(如
- 差异模式定位当前正文对应行,必要时展开完整差异;历史基线不可用时提示并保留文件树页面。
- 跳转记录导航位置并保存标签状态,可通过前进、后退恢复正文位置。
- 应用运行期间会按仓库保留最近比较结果、时间、展开状态、精简/换行设置、纵向滚动位置和各文件的横向滚动位置。
- 返回关闭、从标题打开文件或双击正文跳转后,再次打开文件树差异恢复上次浏览位置,直接使用已缓存的比较结果。
- 比较时间、精简/完整差异、自动换行、文件折叠状态、横纵向浏览位置及共享缩放值保存在
.mynote/mobile-tabs-v1.json;重启后重新比较并恢复浏览状态。 - 重新比较或修改比较时间仍清除折叠与浏览位置。
- 不同仓库分别保留浏览状态;重新比较或修改比较时间时重置展开与滚动位置,应用重启后不恢复这次浏览位置。
6. 搜索
- 搜索弹窗沿用笔记导航面板布局,横竖屏、有无软键盘时顶部均固定在屏幕高度的 15% 处,搜索内容保持在键盘上方的可用区域内。
- 返回、点击遮罩或选择搜索结果时正常收起搜索弹层,保留笔记未保存内容;再次打开恢复上次关键词及结果,不重复搜索。
- 搜索中关闭面板不会丢弃正在执行的查询;完成后更新所属仓库的缓存。新关键词始终优先,旧查询的结果或错误不会覆盖新查询。
- 搜索进度条与输入框左右对齐,上下各留 8 像素间距;固定保留 4 像素进度条位置,显示或隐藏时不移动输入框和结果列表。
6.1 搜索范围
- 可按当前仓库的相对路径和 Markdown 正文查找。
- 搜索不区分大小写。
- 所有打开标签的搜索均使用各自尚未保存的草稿。
6.2 搜索结果
- 结果按文件合并分组,路径只显示一次,下方列出该文件的命中行与片段;保持文件首次命中及文件内命中的顺序。
- 每条命中片段上下保留 4 像素留白,区分相邻结果;同一片段自动折行时保持紧凑行距。
- 分组路径与正文片段高亮实际命中的连续文字,不区分大小写;正文保留整个查询中的空格,不套用拼音或跳字规则。
- 同一片段中重复出现的命中均高亮;行号与“路径匹配”提示不参与高亮。
- 点击文件路径定位到该文件的首条命中,点击具体命中行定位到对应位置。
- 点击结果后打开或复用标签并定位。
6.3 搜索限制
- 正文超过 2 MB 的文件会跳过正文搜索。
- 最多显示 100 条命中结果,按文件合并后仍按命中条数计数。
- 界面会提示文件被跳过或结果被截断。
7. 文档大纲
- 大纲弹窗沿用笔记导航面板布局,横竖屏、有无软键盘时顶部均固定在屏幕高度的 15% 处。
7.1 标题浏览
- 可从当前文件栏打开大纲,编辑状态下入口保持在可见的工具栏前部。
- 大纲以 34 像素紧凑行距按 Markdown 标题层级显示。
- 同层级标题保持对齐。
- 每行保持单行,标题过长时可横向滑动。
- 点击标题可跳转到当前编辑、预览或差异页面中的对应位置。差异精简视图隐藏目标标题时会展开完整差异,并将标题置于差异区域顶部。
- 全库大纲按仓库相对路径分组,每组保留标题层级、紧凑行距和折叠能力;无标题的文件不显示。
- 点击其他笔记中的标题会打开该笔记并定位,已打开目标笔记保留其编辑、预览或差异模式。
- 跨文件同名同级标题按各自文件中的出现顺序识别;标题已失效时提示重新打开大纲。
7.2 折叠、过滤与定位
- 支持单个标题折叠及全部折叠或展开。
- 支持以下过滤方式:
- 中文。
- 无声调全拼。
- 拼音首字母。
- 过滤结果保留上级标题。
- 现有工具行直接提供两个图标开关,不另加一行:
- “当前仓库所有笔记”:默认关闭,开启后过滤当前仓库所有笔记的标题;空过滤展示全部标题。
- “支持拼音”:默认开启,仅影响当前笔记及全库大纲;关闭后仍支持原文、不区分大小写、顺序跳字和空格分隔的多关键词。
- 两个开关分别使用笔记集合和翻译图标;开启时显示高亮背景和高对比图标,关闭时使用普通背景。长按提示名称及当前“开/关”状态,不显示重复文字或勾选图标。
- 大纲页的普通关键词只匹配标题文本;
p:、f:按上述文件页规则限定标题来源,适用于当前笔记及全库范围。- 普通关键词不匹配路径或正文;只有文件限定项时,展示符合限定的笔记中的全部标题。
- 当前笔记及全库大纲高亮标题中的原文、全拼和首字母命中;拼音映射回完整汉字,emoji 不拆分。
- 多关键词命中合并显示,未命中的祖先文字保持普通样式;关闭拼音后仅高亮原文命中。
p:、f:的字面命中在全库文件路径分组中高亮,不将限定值当作标题关键词。- 高亮与当前结果使用同一正文版本,折叠、收藏或重新打开面板复用上次查询范围,不重新执行全库匹配。
- 全拼使用连续匹配,拼音首字母允许顺序跳字;关闭拼音不影响文件或收藏页的原有匹配。
- 全库优先恢复磁盘大纲摘要;已打开笔记使用最新编辑内容和已有大纲索引,未打开且已变化的笔记异步读取本机文件。
- 全库大纲索引、拼音及过滤结果缓存在当前应用会话内,重新打开面板直接复用,不重新读取或匹配全部文件。
- 修改全库过滤关键词时,已打开笔记按最新编辑内容检查,其他文件按修改时间和大小检查;只重读、解析发生变化的文件,并更新新增或删除的条目。
- 当前笔记大纲也保留上次过滤结果;修改关键词后使用最新正文计算。折叠、收藏及重新打开面板不重新执行标题匹配。
- 读取时显示进度;单个文件失败不会隐藏其他文件的结果,提示失败文件并提供“重试”。关闭面板或切换仓库后的过期结果不再应用。
- 大纲读取进度条位于输入框下方,与正文搜索使用相同的固定位置和间距,显示或隐藏不改变输入框和结果区域的位置。
- 全库标题的收藏仍归属于来源笔记,并与收藏页同步刷新。
- 点击“定位当前标题”会清除两个范围共享的过滤关键词、展开上级标题并定位:
- 以打开导航面板前笔记视口顶部所属的标题为准;顶部位于正文中时定位到此前最近的标题,不受远处光标影响。
- 编辑模式使用编辑器实际排版得到顶部源码位置;编辑区的标题收藏仍按光标位置判断。
- 预览模式按实际渲染的标题锚点判断,不按滚动比例估算,支持长段落、图片及缩放后的排版。
- 差异模式按实际可见的当前版本行判断,支持精简显示、换行及缩放;删除行或省略行使用其后的当前版本行,文末使用最后一行。
- 面板打开后,软键盘弹出、面板标签切换或布局变化不会改变这次记录的顶部位置。
- 在全库模式点击“定位当前标题”会先切回当前笔记范围,再执行上述定位;没有当前笔记时显示空状态。
7.3 状态保留
- 关闭后重新打开大纲时,保留当前笔记的:
- 过滤内容。
- 标题折叠状态。
- 滚动位置。
- 切换笔记时,新笔记的大纲浏览状态使用默认值,共享过滤关键词保持不变。
- “当前仓库所有笔记”和“支持拼音”作为本机选项保存在应用文档目录的
outline-options.json,切换笔记、仓库和重启后保留,不参与同步。 - 当前笔记与全库在同一仓库的应用会话内共用过滤关键词;切换“当前仓库所有笔记”开关时输入不变,包括空关键词和未闭合的引号。
- 在任一范围编辑或清除关键词,另一个范围同步使用该输入;折叠、滚动位置和结果缓存仍分别保留。
- 切回已查询过的范围时,关键词未变则复用上次结果;关键词已变则重新匹配,全库同时按文件版本增量校验数据。
- 共享关键词和全库浏览状态按仓库区分,在当前应用会话内保留。
- 选项读取失败时使用默认值并提示;保存失败时当前选择仍生效,同时提示未持久化。
- 搜索结果、拼音及面板浏览状态仍只缓存在当前应用会话内;全库大纲摘要保存在仓库的
.mynote/mobile-outline-index-v1.json,不参与同步。- 仅持久保存已落盘笔记的标题、层级、源码偏移和文件版本,不保存正文或未保存草稿。
- 重启时先恢复摘要,后台按修改时间和大小增量校验;未变化文件不重读正文。
- 保存笔记更新对应记录;文件增删、移动及同步后增量检查。后台更新不替换已经展示的搜索结果,修改关键词后使用最新索引。
- “更多操作 → 重建大纲索引”强制重新读取全部笔记,并清除全库大纲结果缓存,下一次打开面板重新匹配;重建成功不弹出 toast,部分读取失败或重建失败仍提示。
- 索引损坏或版本未知时保留诊断副本后重建;单文件失败保留其他结果并提示,读写失败使用内存结果并明确提示。
- 写入串行执行并原子替换,写入失败保留旧索引;移除仓库前终止后台更新,避免重新创建已删除的目录。
- 移动端按字符偏移定位,使用独立格式;不覆盖 Client 按行号保存的
.mynote/outline-index-v1.json。
7.4 桌面 QuickOpen 迁移对照
- 全部功能及本次迁移范围见 QuickOpen 迁移清单。
8. Markdown 预览与链接
8.1 Markdown 预览
- 支持常用 Markdown 和库内相对路径图片。
- 预览中的图片(含标题内图片)原始尺寸大于显示尺寸时,点击进入全屏大图;已按原始尺寸完整显示的图片点击无效果。
- 大图支持双指缩放(1–8 倍)与拖动查看;点击大图或返回关闭,保留笔记预览位置和正文缩放比例。
- 图片尚未加载或加载失败时不进入大图,加载失败保留替代文字。
- 标题保持左对齐。
- 每个标题后显示可直接切换大纲收藏的星标。
8.2 代码块
- 围栏代码块左上角显示语言。
- 标识为文件路径时保留大小写及空格后的完整路径;标题保持单行,默认滚动到最右侧以优先显示文件名,宽度不足时可左右拖动查看,不显示省略号,长按也可查看完整标题。
- 使用 Re-Highlight 内置语言和别名进行语法高亮,离线可用。
- 有语言标识时按对应语言解析;无标识时自动识别,成功后显示识别语言。
- 未知语言、无法识别或解析异常时回退纯文本。
- 单个代码块超过 102,400 个 UTF-16 单元时跳过代码语法分析,仍可展示、选中与复制。
- 编辑区与预览区使用相同的语言目录及主题颜色分类。
- 右上角可复制代码内容。
- 代码可选中。
- 代码块保留源码换行,不自动换行;较长的代码行可横向滚动,双指缩放后仍保持此行为。
8.3 链接
- 点击预览链接可打开库内 Markdown 笔记和标题。
- 支持中文标题。
- 支持含标点的标题锚点。
- 跨笔记跳转保持当前编辑或预览模式,并定位到预览中的对应标题。
- 编辑时将光标放在行内链接或网址上,可点击“打开光标处链接”。
- 以下链接交由系统应用打开:
- HTTP。
- HTTPS。
- 邮件。
- Codex。
8.4 拍照插入图片
- Android 和 iOS 编辑模式提供“拍照插入图片”:竖屏使用紧凑相机图标,横屏收入“笔记操作”菜单;预览和差异模式不显示。
- 调用系统相机,仅支持拍照,不提供相册选择或裁剪;确认后按图片设置调整尺寸与 JPEG 质量。
- 确认照片后,保存到笔记同级的
assets/目录,使用唯一文件名,并在原光标处插入相对路径 Markdown 图片引用;选区存在时替换选中内容。 - 插入后光标位于图片引用末尾,正文保持未保存状态;撤销、重做仅修改正文,附件保留。图片沿用现有预览和附件同步流程。
- 拍照和插入前暂停相关编辑、笔记切换和同步,避免目标笔记变化;插入后立即解除保护,后台转换不锁定笔记。取消拍照不修改正文,权限或保存失败使用应用内提示。
- 拍照前保存草稿与目标选区。Android 回收应用进程后,下次启动恢复照片并通过应用内弹窗确认插入原笔记;正文变化时使用恢复后笔记的光标位置。
- 取消恢复插入会保留已导入的附件,并提示库内路径。
- 导入或草稿保存失败时保留拍照恢复记录,下次启动可重试;存在未处理照片时暂不允许再次拍照。
- 恢复失败时可选择稍后重试或放弃恢复;放弃仅清除插入记录,不删除照片文件。
- 引入原生相机插件后需要重新构建并重启应用,热重载不能完成插件注册。
图片尺寸与质量
- “设置中心”中的“图片设置”保存本机默认档位与“拍照后调整”开关,初始为“均衡”且开启调整;不随仓库同步。
- 档位按最长边等比例缩小,小图不放大。
- 节省空间:1280 px、JPEG 质量 75。
- 均衡:1920 px、JPEG 质量 85。
- 清晰:2560 px、JPEG 质量 90。
- 原图:保持原始文件,不重新编码,保留拍摄信息。
- 自定义:最长边 320–8192 px,JPEG 质量 1–100;质量数值不是文件体积百分比。
- 调整面板支持放大检查细节、档位切换和实际像素/体积对比。竖屏预览与参数上下排列,横屏左右排列,内容可滚动并避让键盘与系统安全区。
- “插入”不因转换尚未完成而禁用;自定义参数仍须有效。
- 点击时转换未完成,立即关闭面板,确定文件名并插入图片链接;先保存可用原图,按点击时的参数在后台继续转换并原子替换同一附件,不锁定编辑、切换与同步,不显示转换完成提示。
- 文件名使用
photo-前缀加插入时的本地日期时间,例如photo-20260909-170901.jpg;同名文件已存在时依次追加-2、-3,不覆盖其他照片。 - 插入界面提示追加“未完成格式转换的将在后台转换”。
- 点击时当前参数的转换已完成,复用处理结果,不显示完成提示。
- 复用正在转换的当前参数结果;参数刚变化时等待旧转换结束,再处理最新选择,避免同时解码多张大图。
- 临时选项仅作用于当前照片;“设为默认”明确保存默认档位。关闭“拍照后调整”后直接处理并插入;竖屏长按相机按钮或横屏“拍照并调整”可临时打开面板。
- 每次调整从原始照片生成,后台处理避免阻塞界面;压缩照片校正拍摄方向并移除 EXIF/GPS 等拍摄信息。
- 若 JPEG 处理结果不比原图小,使用原始文件;调整面板提示保留拍摄信息。
- 非原图档位的 PNG 拍照结果按预定
.jpg路径转换为 JPEG,避免转换后扩展名与格式不一致。 - 处理失败可重试或选择原图,不静默切换原图。
- 仓库保存已确认插入的照片;后台转换期间先保存可用原图,完成后替换为处理结果。正常取消调整不插入正文或新增库内附件;转换成功后清理应用内处理临时文件,系统相机返回的原始文件仍由系统缓存生命周期管理。
- 拍照恢复记录保存参数、是否需要调整、固定附件路径、是否已插入与已确认的处理文件,恢复时复用确认后的字节;尚未确认的照片重新打开调整面板。已插入照片的后台转换中断时,下次启动自动续转,不重复插入或改变正文;后台失败保留可用原图和恢复记录并使用应用内提示。现有已导入附件的取消恢复行为保持不变。
- 仅处理新拍照片,不批量修改已有附件。
录音附件
- Android、iOS 编辑模式支持“录音插入附件”。
- 竖屏使用相机左侧的紧凑麦克风图标;横屏收入“笔记操作”菜单,排列在拍照之前。
- 预览与差异模式不显示录音入口;录音期间阻止重复启动和笔记操作。
- 点击麦克风开始录音,应用内浮层显示状态和已录时长;点击“完成”保存并插入,点击“取消”清理临时录音;正常取消和插入不弹出 toast,大小上限、失败及待恢复等异常提示保留。
- 录音浮层支持暂停与继续;暂停会停止收音与计时,继续后仍写入同一录音文件。暂停时也可完成或取消;进入后台仍停止录音并保留恢复记录。
- 首次使用需授予麦克风权限;权限请求期间的临时失焦不会被视为录音中断。
- 仅前台录音。锁屏、切到后台或音频中断时停止并保留已录内容,回到应用后确认插入或放弃。
- 不设固定时长上限;每秒根据文件大小和配置码率估计缓冲数据,达到 19 MiB 时自动完成,为现有 20 MiB 单附件同步上限预留空间。
- 使用 AAC-LC、单声道、64 kbps 的 M4A 文件,保存到笔记同目录的
assets/voice-<日期>-<时分秒>.m4a。- 完成后先检查录音可播放且不超过 20 MiB,再导入附件,插入类似
[录音 00:12](assets/voice-20260909-170901.m4a)的普通相对 Markdown 链接。 - 新录音附件使用
voice-前缀和录音开始时的本机日期与时间命名,例如assets/voice-20260909-170901.m4a;同目录已存在该文件时依次使用voice-20260909-170901-2.m4a、voice-20260909-170901-3.m4a,不覆盖旧附件。恢复记录保留选定文件名,恢复插入不会另建重复附件;已有录音文件不自动改名。 - 插入替换开始录音时的选区,光标位于引用末尾,笔记保持未保存状态;撤销、重做只改变正文,附件保留。
- 临时录音与目标选区保存恢复记录。失败后可点击录音入口或重启应用重试;已完成的导入与正文插入不重复执行、不覆盖同名附件。
- 恢复插入按仓库 ID 与本地目录确认目标;仓库列表刷新产生的新对象不会被误判为切换笔记。正文变化时使用当前选区,插入并保存草稿后清理恢复记录。
- 异常退出后的临时文件只有通过可播放校验才能恢复。损坏、空文件或超限录音不导入同步目录;恢复失败可稍后重试或放弃。
- 完成后先检查录音可播放且不超过 20 MiB,再导入附件,插入类似
- 预览中的库内 M4A 链接显示完整且紧凑的语音条,包含播放/暂停、倍速、当前时间、总时长和可拖动进度。
- 进度拖动期间显示目标时间,松手后定位;正在播放时继续播放,暂停时保持暂停。尚未加载的录音可根据链接中的时长拖动,加载后使用播放器时长与链接时长中的较大值显示和定位,避免解码器低估时长时进度提前到头。
- 播放器更新实际总时长时同步刷新时间与进度范围;加载期间使用链接时长,避免沿用上一段录音的时长。
- 录音倍速支持 0.5、0.6、0.7、0.8、0.9、1、1.25、1.5、2 倍,默认 1 倍。
- 倍速为应用内所有录音附件的全局设置,切换笔记、仓库或账号仍使用同一倍速;保存到应用设置,重启后恢复。设置不随笔记同步,MP3 播放器保留独立的倍速设置。
- 设置读取或保存失败时显示应用内提示;无效设置恢复为默认 1 倍。
- 编辑模式通过“打开光标处链接”显示同样的应用内语音条。
- 同一时间只播放一段录音。开始录音或附件播放前暂停 MP3 播放器;录音期间系统媒体命令也不能启动 MP3 播放。
- 同一页面切换语音时,各段保留自己的进度与总时长,再次播放从暂停位置继续;已播放完的语音再次播放从头开始。进度仅在当前播放会话中保留,停止附件播放时清除。
- 切回语音时,待音频加载完成后再次定位到保存的位置,再开始播放;加载过程的初始位置重置不会覆盖续播进度。
- 语音条仍共用一个播放器。无跳转索引的分段 M4A 会生成带完整分段索引的本地播放副本,避免只识别首段时长或跳转后从头播放;原附件与同步内容不变,停止播放时清理副本。
- 加载时仅禁用当前语音条的播放与进度操作,其他语音条保持原有显示和可操作状态;加载期间点击其他语音的操作依次执行,停止播放会取消尚未执行的操作。
- 切换笔记、仓库或模式,进入后台,打开 MP3 页面或关闭附件播放浮层时停止录音附件播放。
- 附件缺失、损坏或播放失败时显示明确提示;普通笔记链接、图片与远端链接维持原有处理。
- M4A 附件沿用现有云同步、忽略规则、历史、二进制哈希和配额机制,以 base64 传输原始字节。
- 同步协议版本及消息结构保持不变;同步服务端、桌面端与移动端都必须升级,不增加旧端兼容协商。
- 先升级服务端,再升级桌面端和移动端。桌面端此次支持同步 M4A,未增加录音或语音条 UI。
- 引入原生录音插件后需要重新构建并重启应用,热重载不能完成插件注册。
录音转文字
- 在“更多操作 → 设置中心 → 语音识别设置”配置豆包录音文件识别模型 2.0 标准版的 AppID 和 Access Token。
- AppID 须为数字,Access Token 须非空且不含空白;字段校验通过后再保存。
- 无效配置保留弹窗和输入供修正;清除配置不受必填校验影响,存储层继续保留校验。
- Access Token 默认隐藏;支持修改和清除配置,使用系统安全存储,仅保存在本机,不随仓库或账号同步。
- 此接口不使用 Secret Key,凭据不预置在源码或安装包中。
- 预览语音条与编辑模式的录音附件浮层提供紧凑的“录音转文字”图标。
- 点击后将当前库内 M4A 附件以文件数据直接上传到豆包;仍使用现有 20 MiB 附件上限,原录音保留。
- 采用
volc.seedasr.auc标准版,通过提交任务与查询结果完成非实时转写,不自动转写新录音。
- 上传前保存任务编号;按仓库目录、仓库 ID、附件路径及文件摘要区分本机任务。
- 弹窗打开且应用在前台时每 5 秒查询一次;关闭或进入后台后停止定时查询,已经发出的请求可能完成。
- 关闭弹窗或重启后,再打开同一录音可继续查询;已有结果直接展示,避免重复上传。
- 上传超时或响应不确定时保留编号,优先查询原任务;网络错误后提供手动重试查询。
- “重新识别”经应用内确认后才重新上传并替换任务与结果,可能再次计费。
- AppID 改变后需恢复原 AppID 才能查询旧任务;也可显式重新识别。
- 结果弹窗支持修改、复制及“插入笔记”;修改后的结果草稿保存在应用本机目录,不参与同步。
- 确认时重新检查目标笔记、录音文件摘要和链接;仅在当前笔记有唯一对应录音链接时,插入该链接所在行下方。
- 成功后切回编辑模式,支持一次撤销、重做,并持久化编辑草稿;仍需手动保存笔记。
- 链接删除、重复出现或目标笔记变化时不自动插入,结果保留,可重新打开录音复制。
- 静音或空结果提示没有识别到文字,不插入空白正文。
- “笔记操作”菜单提供“批量语音转文字”,编辑与预览模式均可使用。
- 从当前笔记正文提取库内录音链接,按出现顺序逐段处理;重复引用同一附件只调用一次,代码示例和远端链接不参与转换。
- 转换期间禁止编辑笔记,显示总数、已处理数及各录音状态;完成后统一确认“插入全部结果”,整批插入支持一次撤销,并保存编辑草稿。
- 复用单段转写任务与已有结果;单段失败、缺失或空结果不阻止后续录音。链接重复或录音变化时跳过该段正文插入,转写结果保留,可单独打开录音处理。
- 再次批量插入时,若对应录音链接下方已存在相同转写结果,则跳过该段并提示已存在的数量;其他录音仍正常插入。撤销或删除该结果后可再次批量插入,单段手动插入保持原行为。
- 可点击“停止”结束批次;已提交的任务和已完成结果保留,可插入已完成部分。关闭、停止或进入后台后不继续定时查询;再次发起批次复用原任务。
- 接口依据:鉴权说明、任务提交、结果查询。
9. 同步
9.1 手动同步
- “立即同步”在未登录时打开登录表单;登录后同步当前仓库。
- “更多操作”中的“同步中心”可在未登录或未选择仓库时打开。
- 不显示邮箱和用户 ID;账号信息统一在个人中心查看。
- 顶部为“基础信息”模块,目前只显示配额信息,空间不足警示与升级链接也位于该模块。
- 未登录时提示登录后查看配额;可点击“立即同步”打开登录表单,退出登录位于设置中心。
- 当前仓库区显示实时进度、上次成功同步时间和冲突副本入口,并提供刷新状态和“立即同步”。未成功同步时上次时间显示“—”。
- 远端笔记库列表显示名称和版本,可在列表标题旁刷新。刷新图标与仓库行尾图标对齐,请求期间旋转。
- 行尾下载按钮仅下载尚未保存在本地的仓库,不切换当前库、不关闭列表。
- 点击整行立即返回笔记页面,已有可用本地库时直接切换,否则先下载再切换。
- 自动同步区直接提供开关和整数间隔输入;普通模式范围为 60–86400 秒,隐藏功能开启后为 1–86400 秒。
- 有效修改自动保存。
- 首页的一键同步图标继续直接同步,同步期间旋转;同步中心的“立即同步”图标也在同步期间旋转。首页不再显示进度和上次同步时间。
- 首页点击仓库名可打开左侧笔记库抽屉,按钮的点击反馈使用圆角;抽屉中的远端笔记库标题旁也可刷新远端列表。刷新图标与仓库行尾图标对齐,请求期间旋转。
- 下载按钮仅下载并保持抽屉打开;点击整行关闭抽屉并切换库,尚未下载时先下载。
- 两个入口的远端库标题和库行使用 8 像素水平边距,文字与行尾按钮间隔为 4 像素;同步中心外层水平边距为 8 像素。
- 每库操作菜单提供“查看仓库 ID”“重命名”和“删除远端仓库”;列表不常驻显示 ID。
- 点击“查看仓库 ID”后使用应用内弹窗展示完整 ID,支持选择复制;同步或下载期间仍可查看。
- 重命名沿用 PC 端规则:去除首尾空白,名称为 1–80 个有效字符,不含控制字符;仅修改远端名称。
- 删除前使用应用内确认框,说明远端文件、版本历史和同步记录会永久删除,关联设备将无法继续同步。
- 删除远端仓库保留本地文件、未同步草稿及仓库身份;操作成功后刷新远端列表和用量,失败时显示错误提示。
- 同步、排队下载、远端列表刷新或其他操作进行中时禁用重命名和删除;关闭确认框后再次检查账号及任务状态。
- 两个入口均展示账号已用空间 / 总配额,以及每个远端库的用量。
- 每库用量包括当前文件和历史版本;服务器空间统计不去重,用量以服务端返回值为准。
- 默认按名字升序排列,标题旁的排序菜单可切换为用量降序;用量相同按名字排序,刷新保留当前排序。
- 用量随列表刷新;账号总量读取失败可单独重试。
- 服务端须同步升级以返回每库
usedBytes,不兼容缺少该字段的旧服务端。
- 两个入口的远端库下载均在对应行显示当前步骤的进度条和整数百分比,全部步骤成功后才标记已下载。
- 网络下载按响应字节显示百分比;校验/写入文件、建立同步基线按已完成文件数显示百分比及数量。
- 历史下载显示已缓存版本数/总版本数和百分比,请求期间显示当前页传输百分比或已接收大小;每条历史落盘后更新缓存进度。
- 读取和保存索引、保存基线、完成落盘及刷新列表显示对应步骤和加载指示,不沿用上一阶段的 100%。
- 响应未提供可用总长度时,显示已下载大小和加载指示。
- 下载按点击顺序排队,等待中的行显示“等待下载”;重复点击同一库复用已有任务。
- 下载不禁用其他操作,已下载仓库可立即切换。
- 点击尚未下载的仓库整行关闭列表后,显示“下载中,完成后自动切换”提示;仅下载或直接切换已下载仓库时不提示。
- 下载失败保留当前库并提示错误,后续排队下载继续,可重新下载。
- 等待下载后切库期间再次选择其他仓库,以最后一次选择为准,旧下载完成后不抢回当前库。
- 笔记正文、新建、移动、删除及本机界面设置先保存到本地;这些操作不等待同步接口,网络恢复后通过手动或定时同步发送需要共享的内容。
- 同步会上传本地新增、修改、移动和删除,并拉取远端最终版本。
- 同步前会保存当前编辑稿。
- 手动与自动同步的扫描、哈希、编码、传输和历史写入在后台 isolate 执行;同账号同仓库的同步与启动历史补齐依次执行。
- 单次同步及其历史下载复用网络连接,结束或失败后释放连接。
- 同步接口、MP3 请求和语音转写的建立连接超时统一为 5 秒;上传、下载及等待服务响应的超时保持各功能原有设置。
- 同步进度不重新解析未变化的 Markdown;同步后的正文未变化时保留编辑器状态和阅读滚动位置。
- 同步进行中与文件操作只读分开表示;同步图标始终旋转,但连接服务器、上传、下载和等待响应期间允许编辑、保存及其他操作。
- 同步的所有阶段均可切换、关闭和固定标签(包括关闭全部未固定标签);未保存内容仍沿用原有关闭确认,不因同步而跳过。
- “笔记操作”菜单入口在同步和等待文件操作期间仍可打开;菜单项分别判断可用状态,保存、新建、移动、删除等写入保护继续生效。
- 搜索结果、文件列表、大纲、收藏、链接、历史前进/后退及悬浮文件/差异导航不再被文件阶段统一拦截;预览中的滚动、定位和选择仍可使用。
- 已打开标签的浏览切换立即执行;新打开的文件若正在被同步改写,则等待该次写入完成后读取,读取跨越同步阶段时重新读取,避免显示旧正文。
- 切换仓库涉及草稿保存和会话恢复,会排队等待当前文件阶段结束后执行;等待期间不把其他浏览操作锁为忙碌,账号已变化时不再执行旧的切库请求。
- 文件系统操作与编辑器只读分别保护:后台扫描、文件写入仍与用户的保存、新建、移动、删除等文件操作串行;编辑器只在当前笔记将被同步改写时短暂只读。
- 当前笔记远端正文和路径未变化时,扫描、正常上传、其他文件的更新及历史缓存都不锁定当前编辑器、不收起键盘,可持续输入、撤销和重做。
- 远端修改、删除、改名、占用当前路径,或上传冲突处理将改写当前笔记时,先锁定受影响路径并保存最新草稿,再执行合并、冲突副本或文件替换;完成并刷新受保护的笔记后恢复编辑。
- 仅增加版本号、正文及路径未变化的远端记录只更新基线,不重写本地笔记。
- 当前笔记确需只读时才释放编辑焦点并收起已有键盘;解除只读不自动重新弹出键盘。用户未主动重新编辑时,一次同步最多收起一次;未受影响的当前笔记不收起键盘。
- 网络等待期间的新编辑在下一次文件阶段开始前保存;上传队列保留已发送的正文快照,新编辑由下一轮扫描发送,最后一轮扫描之后的修改留待下次同步。
- 网络失败也会解除只读并保留用户新编辑;同步结束的本地及远端列表刷新都不覆盖此时继续输入的草稿。
- 新建/移动/删除笔记和新建/克隆仓库在网络阶段可用;确认移除或删除仓库后会等本轮同步结束再执行,避免目录被后续写入重新创建。
- 切换到正在同步的笔记库时,只等待当前本地文件阶段完成;网络等待期间可直接打开。
- 同步期间可选择退出登录;应用会等当前写入完成并跳过本轮剩余仓库,然后退出。
- 同步失败后可再次点击重试。
- 暂不提供历史版本界面。
9.2 自动定时同步
- 在“更多操作”进入同步中心后,可开启全局自动同步,并设置整数间隔;默认关闭、默认间隔为 60 秒。
- 普通模式允许 60–86400 秒,本机隐藏功能开启后允许 1–86400 秒。
- 普通模式启动或关闭本机隐藏功能时,已有的 1–59 秒间隔提升并保存为 60 秒。
- 自动同步关闭时保持关闭;重新开启隐藏功能不恢复旧短间隔,可手动重新设置。
- 开关与间隔修改后自动保存;关闭开关仍保留已设置的间隔。
- 全局开启后,当前仓库始终参与定时同步。
- 本地仓库列表中的“切换后仍自动同步”可让离开后的仓库继续参与定时同步;各仓库默认关闭,且可在全局关闭时预先设置。
- 仓库行直接显示同步图标与“后台自动同步:开/关”;全局自动同步关闭时,可同步库中已开启的仓库会显示“全局关闭”。
- 定时任务仅在应用处于前台且已登录时运行;进入后台停止计时,返回前台后重新计时。
- 登录凭据失效后停止定时请求,重新登录后恢复调度。
- 同一轮中的仓库依次同步;操作尚未完成时跳过到期任务,单个仓库失败不会阻止其他仓库。
- 尚未首次手动发布的本地仓库和旧版克隆不参与定时同步。
- 自动同步沿用手动同步的草稿保存、合并与冲突副本处理。
9.3 本地仓库发布
- 本地新建仓库在首次包含可同步文件时发布到远端。
- 空仓库继续只保存在设备上。
9.4 同步范围与忽略规则
- 同步支持:
- Markdown。
- 常见图片。
.mynoteignore。
- 忽略规则仅决定新文件是否进入同步。
- 已同步文件仍会继续同步。
.mynote和应用包目录始终排除。
9.5 合并与冲突
- Markdown 的非重叠修改会自动三方合并。
- 无法合并或发生以下冲突时,远端版本成为主文件,本地内容保存为独立冲突副本:
- 图片冲突。
- 删除冲突。
- 路径占用冲突。
- 可见冲突副本会继续上传到远端,用户可在笔记列表中整理。
- 点击同步状态可查看副本路径。
.mynoteignore的副本保存在.mynote/sync-conflicts/。- 可在应用内查看正文。
- 不会成为生效规则。
9.6 同步身份与旧版克隆
- 旧版移动端克隆缺少文件同步基线。
- 仍可本地编辑。
- 不能原地启用同步。
- 请从远端列表重新克隆。
- 同步状态按服务地址和账号隔离,不会用其他账号继续同步同一仓库。
- 同账号重新登录取得新设备身份时,会保留并换绑原有同步基线与待重试操作。
9.7 本地历史缓存
- 克隆和同步会分页下载截至当前同步游标的版本历史,并保存到账号隔离的
.mynote/mobile-history-v2/<账号命名空间>/。 - 已缓存历史可离线用于修改时间、当前文件差异和文件树差异。
- 已有同步仓库会在登录后打开仓库或下次同步时补齐历史。
- 升级后不读取或迁移旧版
mobile-history-v1缓存,也不主动删除旧文件;首次需要历史时重新下载,耗时和流量单独计算。 - 本地未发布仓库、旧版克隆和没有可靠同步身份的新文件不能进行时间差异比较。
- 历史正文按版本与内容摘要存入
versions/,轻量manifest.json只保存文件身份、版本、路径、时间和正文摘要。- 新增历史只写新增正文及轻量清单,不重写已有版本正文。
- 所有分页校验与正文写入成功后,最后原子替换清单;失败不推进已提交历史游标,重试重新补齐。
- 未提交的正文文件不参与历史查询。
- 当前文件与文件树差异先在清单中按时间选择版本,再只读取所选正文;修改时间查询只读取摘要,不加载其他笔记或版本的正文。
- 清单与选中正文会校验格式、版本连续性、身份和内容摘要;缓存损坏时差异视图尝试联网重建,完整下载成功后才发布新清单,失败保留已有清单。
- 大清单解析和选中正文的解码、校验在后台 isolate 执行;并发清单读取共享加载结果。
- 构建时可用
--dart-define=MYNOTE_STARTUP_TRACE=true开启[mynote.startup]阶段计时,记录仓库、历史基线与差异首帧耗时,不记录笔记正文。
9.8 VIP 与空间配额
- 主菜单和命令搜索提供“个人中心”(命令 ID:
personalCenter),未登录可进入并选择登录;按现有完整页面机制恢复与返回。 - 展示邮箱、账号 ID、当前有效档位、已分配 VIP 与到期状态、云空间配额、已用空间和超额状态,支持刷新及失败重试。
- 个人中心超额提示使用与同步中心一致的警示背景色和文字色,随当前主题变化。
- 普通用户初始 10 MiB,后台可调整;VIP 到期按服务端时间立即回落普通档位。
- 服务器空间统计不去重,个人中心直接展示服务端返回的用量,不再显示去重计量说明;降额不自动删除任何数据。
- 配额旁提供文字按钮“升级空间”,打开 Flutter 弹窗提示“请添加管理员微信 unicyb 升级空间”。
- 弹窗从登录用户接口读取每档 VIP 的名称、配额和价格说明(含计费周期),价格以后台配置为准;未配置时提示联系管理员询价。
- 弹窗和超额 toast 均读取并展示“已用空间 / 总配额”;用量或价格读取失败可分别重试,复制微信号和关闭仍可用。
- “复制微信号”复制
unicyb,成功或失败均在弹窗内反馈并保持打开;“关闭”退出弹窗。
- 自动、手动同步遇到空间配额不足时显示持久 toast,明确提示新增内容无法上传、下载仍可用,并提供“前往个人中心升级”链接和手动关闭按钮。
- 手动触发的同步每次遇到空间不足都会重新提示;自动同步在同一账号本次登录会话中只提示首次。
- 关闭 toast 后,自动重试不会再次弹出;后续手动同步仍重新提示。
- 同步中心顶部独立显示显著空间不足警示;关闭 toast 不隐藏警示。
- toast 和同步中心警示中的升级链接先进入个人中心,再通过配额旁的“升级空间”打开升级弹窗。
- 重复点击提示链接不叠加个人中心页面;从同步中心进入后,返回仍停留同步中心并保留页面恢复记录。
- 警示同时依据同步失败状态和最新服务端配额;同步成功并刷新到正常配额后清除。
- 多库自动同步同时失败时,空间不足优先使用持久提示,详情仍保留所有失败信息。
- 提示不自动消失、不被普通反馈或重复自动配额错误覆盖;手动同步重新提示,点击升级不关闭提示。
- 每次自动同步在读取同步目标、保存草稿或启动工作进程前复用当前会话的本地配额缓存。
- 已超额时直接跳过,不扫描文件,不上传、下载、补齐历史或刷新仓库与收藏列表。
- 本地草稿、待上传队列和上次成功时间保持不变;配额检查失败也不启动文件同步。
- 缓存为空时获取一次,自动重试不重复请求;个人中心或同步中心主动刷新后更新缓存并恢复同步。
- 浮动提示复用同一份缓存用量;提示中的“重试”仍可主动刷新。
- 缓存按服务地址和登录会话隔离,仅保留在当前运行内;获取失败不覆盖已有缓存。
- 同步工作进程的空间不足或成功结果更新主界面的缓存状态;已有提示规则保持不变。
- 即使没有待上传变更,手动同步也会查询并提示账户已经超额;查询失败保留本地状态供重试。
- 手动同步或自动同步启动后才遇到空间不足时,保留受阻上传队列,继续现有下载保护;部分完成不更新完整同步成功时间。
- 升级后下次同步自动重试待上传内容;未首次发布成功的仓库保留本地内容,不请求不存在的云端仓库。
- 先部署并重启新同步 API,再更新移动应用;原独立账号配额统一改用后台档位。
后续集中模块提取
lib/app/home_page.dart已超过建议规模,另行集中提取通知展示、账号状态及工作区构建职责。test/sync/sync_worker_test.dart后续按工作进程、自动同步配额和认证场景集中整理集成测试。- 提取时保留提示来源、账号隔离、错误诊断及现有控件行为,不为本次单项改动零散拆分。
9.9 容量限制
- 当前全量导出响应上限为 100 MB。
- 更大的笔记库需要后续改为分批下载。
MP3 播放器
入口与数据来源
- 本功能默认隐藏;在关于窗口连续点击十次启用隐藏功能后,首页“更多操作”菜单提供“MP3 播放器”,未登录、没有笔记库时也可进入独立页面。
- 固定连接
http://mp3.uninote.com.cn/,复用现有mp3.php、MP3 和同名 TXT;不修改后端,不提供本地导入。- “刷新列表”从服务器下载当前目录、排序和播放数量形成的列表中的 MP3,并缓存同名 TXT。
- 首次按网页目录顺序选择
dir=2(当前为./__mp3/002);以后恢复上次目录、曲目和进度。- 首次和进程重启后手动播放,选择目录或曲目后开始播放。
- 首次进入时刷新并缓存,之后进程重启优先恢复本地列表,不自动联网。
- 按目录保存播放参数,独立于笔记仓库和账号;曲目或目录消失时回退至首个可用项。
- 播放、切曲、循环和跨曲跳转只读取本地缓存,正文也从本地读取,不发送网络请求。
- 切换目录或调整播放数量、排序后,未缓存曲目提示“请刷新列表”,不会自动下载。
- 刷新时检查当前列表的服务器版本;下载完成后才替换已有音频,失败时提示并保留已完成的缓存。正文缺失不阻止缓存音频。
- 最多同时下载 6 个文件,每个下载任务依次处理 MP3 和同名 TXT;空闲名额立即处理下一首。
- 下载失败或刷新中止后不再分配新任务,等待已开始的任务结束后显示结果;结果列表保持原播放列表顺序。
- 记录服务器返回的 ETag 和 Last-Modified;本地存在完整文件时发送条件请求,仅在服务器实际返回 HTTP 304 时复用缓存。
- 本地文件缺失或为空、没有有效验证信息,或服务器不支持条件请求时,重新下载;不单凭目录中的修改时间判断缓存命中。
- “重新生成 MP3”成功后强制下载,跳过条件请求,保留原有播放状态和进度。
- 刷新期间显示当前文件完整路径、已处理/总曲目数、文件已下载/总大小及下载速度;没有 Content-Length 时显示不定进度。
- 下载速度按所有并发 MP3 响应正文的实际字节数合计,每 0.5 秒采样,暂停传输时归零。
- 当前文件显示最近开始或收到数据的文件及其自身进度;TXT 下载期间显示对应 TXT 文件路径。
- 首次自动刷新也显示进度,不再等待整个列表下载完才打开播放器页面。
- 刷新结束后弹出应用内结果列表,汇总下载及 HTTP 304 缓存数量;逐项显示路径、HTTP 状态、下载大小及 TXT 缓存结果。
- 失败或中止时也显示已完成、失败及未处理的曲目,保留具体错误;结果可滚动、选字和复制。
- 结果仅展示一次;离开页面后完成的刷新,在下次进入播放器时展示结果。
- 缓存与列表保存在应用本地,重启后保留;刷新及服务端维护操作仍需要网络。
播放与正文
- 目录与曲目选择、模式、倍速采用紧凑工具栏,正文占据剩余空间;横屏中将首末曲和前后五首收入菜单。
- 播放条下方显示紧凑提示“双指长按选择文本”。
- 支持播放/暂停、进度拖动、上一首/下一首、首曲/末曲、前后五首,以及指定秒数的快进/后退。
- 按秒快进/后退可以跨越曲目:当前播放到第 2 秒时后退 5 秒,定位到上一首倒数第 3 秒;前进超出当前时长时,将剩余秒数带入下一首,必要时连续跨越多首。
- 按当前排序和播放数量形成的列表跳转;列表循环可首尾相接,其他模式在列表开头或末尾截断。保持原播放/暂停状态,无法读取相邻曲目时长或加载失败时提示并停止跳转。
- 页面按钮、正文双击和系统媒体快进/后退共用跨曲规则;拖动进度条仍定位在当前曲目内。
- 播放模式包括单曲停止、单曲循环、顺序播放、列表循环;仅列表循环在手动切曲越界时循环,顺序播放到末尾停止。
- 倍速支持 0.5、0.6、0.7、0.8、0.9、1、1.25、1.5、2 倍,默认 1 倍。
- 默认列表循环、不限播放数量、文件名正序、跳转 3 秒、双击间隔 280 毫秒、单击正文控制播放关闭。
- 菜单可调整播放数量(0 为不限)、跳转秒数、双击间隔、正反排序和单击控制;目录列表包含该目录及子目录曲目。
- 正文支持滚动、选择及复制;双击可视正文上半区后退,下半区前进,单击控制启用时切换播放/暂停。滚动和长按选字不控制播放。
- 非循环模式(单曲停止、顺序播放)播放完成后,单击正文不重新播放;仍可通过播放按钮主动重播。
- 正文单指左滑上一首、右滑下一首,松手切换且保持播放/暂停状态;两个单击控制模式下均可用。
- 水平距离达到正文宽度的 20%(最小 60、最大 100 逻辑像素),且至少为纵向距离的 1.5 倍时,显示松手切曲提示并轻振动一次;滑回阈值内取消,不以滑动速度触发。
- 每次手势最多切一首;已有选区、长按、先纵向滚动、多指、曲目加载期间及取消的手势不切曲。进度条不参与正文横滑。
- 列表循环在首尾相接;其他模式在边界提示“已是第一首/最后一首”,并以短震动反馈,不重新加载当前曲目。
- 上一首/下一首按钮及系统切曲命令到达边界时同样以短震动提示,保留当前曲目的进度和播放/暂停状态。
- Android 边界提示直接触发 80 毫秒震动,独立于系统“触感反馈”开关;横滑达到阈值的轻反馈仍遵循该开关。
- 开启“单击正文控制播放”时,单指双击和长按不选择文本;双指或更多手指同时保持长按可选择首个手指所在的词,随后可通过选区手柄调整范围并复制。
- 多指短按、手指移动或长按完成前减少至单指均不触发选字,抬起多指不触发播放控制。
- 关闭“单击正文控制播放”时,保留原有单指选字;切换开关清除旧选区与待执行手势。
- 正文缺失不阻止音频播放;列表和音频错误显示应用内提示,并可刷新重试。
后台与耳机
- 顶栏“选择播放设备”可在扬声器、已连接蓝牙耳机等设备间选择输出;不改变曲目、播放/暂停状态、倍速或进度。
- Android 默认显示应用内设备列表,直接为当前 MP3 播放实例设置首选输出;不会修改语音附件播放器或断开蓝牙连接。
- 列出系统已连接的媒体输出,支持“跟随系统”和“刷新播放设备”;设备断开后选择会提示刷新,不把失败请求标为已选。
- 选中标记表示首选设备,最终实际输出仍由系统音频策略决定;暂停时也可设置首选输出,恢复播放后应用。
- 先加载一首曲目再选择设备;不扫描或配对蓝牙设备。播放实例释放后恢复默认偏好,不将设备 ID 保存到设置。
- 应用内列表保留“系统播放设备选择器”作为备用入口:Android 14 及以上使用系统公开接口,Android 11–13 使用系统提供的旧版输出选择入口。
- 备用入口在更早的 Android 或未提供输出选择入口的厂商系统打开蓝牙设置,可连接设备或关闭蓝牙设备的媒体音频以回到扬声器;有线耳机等输出仍由系统管理。
- 华为 Android 12 保留的
MediaOutputSlice入口可能启动后立即退出;跳过该无界面入口,直接打开蓝牙设置,并在应用内提示切换方式。 - 其他旧版输出入口发起请求后提供“蓝牙设置”备用操作,避免厂商系统接受请求但不显示界面时无从操作。
- 华为 Android 12 保留的
- iOS 使用系统音频路由按钮,可选择本机、蓝牙或 AirPlay 等系统可用输出;可用设备和界面由系统决定。
- 不将输出设备偏好保存到应用设置,不自动配对设备;iOS 使用系统当前输出,Android 在当前播放实例存活期间保留首选设备。
- Android 默认显示应用内设备列表,直接为当前 MP3 播放实例设置首选输出;不会修改语音附件播放器或断开蓝牙连接。
- Android 和 iOS 共用应用级音频服务;返回笔记、锁屏或切换应用后继续播放,重新进入页面显示当前播放状态。
- 蓝牙耳机、系统媒体控制支持播放/暂停、上一首/下一首和设备提供的进度操作;具体按键映射由耳机和系统决定。
- 耳机断开时暂停;临时音频中断结束后,仅恢复中断前正在播放且未被用户暂停的音频。
- 菜单和系统媒体控制提供停止操作。Android 暂停时保留媒体服务,便于后台耳机恢复播放;停止后结束媒体前台状态。
- 进度每 5 秒保存,并在暂停、跳转和退出页面时保存;进程被强制终止后不自动播放。
服务端维护操作
- 菜单“重新生成 MP3”调用现有
re-gene-mp3,传入曲目的 TXT 与 MP3 路径;成功后刷新音频版本,保留播放/暂停状态和进度。 - 选择正文后,“删除选中行缓存”按选区焦点所在完整行调用
delete-cache,不包含行尾换行符;没有有效选区时提示。单击控制开启时使用双指或多指长按选字。 - 删除缓存后不自动重新生成;两项操作均通过 Flutter 应用内弹窗展示后端结果,同一时间只执行一项。
10. 开发与安全注意事项
10.1 HTTPS 证书
- 同步与系统配置请求在隐藏功能关闭时正常验证 HTTPS 证书。
- 隐藏功能开启时按
debug.https控制;默认false,允许内部 CA 或自签名证书,true恢复证书验证。 - 策略变更后后续请求淘汰旧策略连接;正在运行的同步 isolate 保留任务启动时的策略快照。
- 仅应连接受信任的服务地址。
10.2 启动系统配置与登录默认值
- 启动恢复本机隐藏功能状态后,独立异步读取
https://192.168.0.223:8787/v1/system-configs,不阻塞界面和笔记恢复。 - 每次启动只请求一次,仅保存在内存;失败、超时、缺项或无效值使用内置默认值,不缓存、不重试。
- 后台匿名接口只返回
{ configs: { 配置键: 字符串值 } }中的四个客户端配置项。debug.https:默认false,只接受字符串true或false。debug.defaultServer:默认https://192.168.0.223:8787,沿用同步服务地址校验规则。debug.defaultEmail:默认空字符串。debug.defaultPass:默认空字符串。
- 所有
debug.*仅在隐藏功能开启时生效;普通模式使用固定默认服务地址及空邮箱、空密码。 - 登录与注册共用默认值;每次打开表单应用当时已获取的配置,晚到的配置仅在下次打开时应用。
- 已恢复的会话地址、邮箱及用户主动修改的字段优先;关闭隐藏功能撤回仍未修改的调试默认值。
- 退出表单或认证成功时清空密码,下次打开可再次使用当时的默认密码。
- 配置和默认密码不写入本地存储、日志或会话;匿名接口中的默认密码可被直接读取,只应用于测试账号。
- 配置服务地址固定,不随
debug.defaultServer更改;固定服务若使用不受信任证书,普通模式读取失败并使用默认值。
客户端输入校验
- 新建仓库名称去除首尾空白后须非空,保留 100 字符限制;按钮与键盘提交共用字段校验,无效时不写入、不关闭弹窗。
- 新建、移动和重命名笔记在弹窗内复用安全相对路径与 Markdown 扩展名规则,提交前检查目标占用。
- 空白路径、非法路径、符号链接和已占用目标显示字段提示,保留输入供修正;按钮与键盘行为一致。
- 底层路径安全与防覆盖检查继续保留;移动到当前原路径保持原有无操作语义。
- 自动同步间隔为普通模式 60–86400 秒、隐藏功能开启后 1–86400 秒整数;图片尺寸仍为 320–8192 整数。
- MP3 数量仍为非负整数,跳转秒数和双击间隔仍为正整数。
- Markdown 链接文字和地址仍必填,继续支持相对路径与锚点。
- 搜索、笔记正文与转写编辑保留允许空内容的语义,不增加统一必填或长度限制。
