Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

功能说明

本文档按使用场景整理 MyNote Mobile 当前已经支持的功能。

界面显示

  • Android 和 iOS 默认竖屏,显示系统栏。
  • 所有页面和弹层避让底部系统安全区域,底部至少保留 8 像素空间,避免内容被导航栏或手势区域遮挡;键盘弹出时仍保留最小间距。
  • 在“更多操作”中可切换横屏全屏,支持左右两个横屏方向;再次选择可返回竖屏。
  • 横屏全屏使用沉浸式显示;系统手势可暂时显示系统栏。
  • 打开笔记后,横屏将仓库入口、标签导航和编辑工具合并为顶部一行;左边只留少量边距,仓库名称按实际宽度占位,过长时省略。
  • 横屏时,收藏夹、立即同步、搜索笔记、文件筛选与差异、查看大纲和收藏大纲保留为行内按钮;标签与编辑工具空间不足时可左右滑动。新建笔记收入仓库“更多操作”菜单,打开光标处链接收入“笔记操作”菜单。
  • “笔记操作”⋮按钮左侧的工具栏还有被裁切的操作时,按钮固定在滚动工具栏上方,仅在按钮自身的 40 像素范围内使用半透明渐变背景,透出下方的收藏等按钮,提示可以左右拖动,不向左扩展遮挡区域;⋮图标保持清晰且仍可打开菜单,末尾操作可完整滑到菜单左侧;拖到末端或全部操作可见时隐藏渐变,窗口尺寸和操作数量变化时同步更新。
  • 横屏最多同时显示五个固定标签,超过五个可在固定标签区域左右滑动。竖屏保持分行布局,收藏大纲也显示在工具栏。
  • 文件收藏与各处大纲收藏按钮以实心/轮廓星形表示当前状态,两种状态均使用普通背景;提示显示“收藏文件:开/关”或“收藏大纲:开/关”,预览标题保留标题名称。
  • 仅使用一种图标表示两种状态的开关,在启用时使用主题 tertiary 背景和 onTertiary 图标色;使用两种图标区分状态的按钮,两种状态均使用普通背景,尺寸与间距保持紧凑;点击行为、默认状态和持久化方式不变。
  • Android API 36 及以上不支持隐藏系统栏;宽度至少 600 dp 的设备也可能忽略方向切换。
  • Android 启动时使用清单中的竖屏配置;进入应用后仍可切换横屏全屏。

启动与加载

  • 启动时恢复本地仓库和标签;修改时间与远端数据不阻塞主界面。
    • 优先打开上次选择的仓库;没有记录或该仓库已移除时,打开名称排序后的第一个可用仓库。
  • 恢复登录会话后,收藏同步和历史补齐在后台进行;登录后的远端仓库列表也异步加载。
  • 历史尚未缓存或网络不可用时,修改时间筛选使用磁盘时间。

1. 仓库管理

1.1 本地仓库

  • 无需登录即可新建和查看本地仓库。
  • 新建仓库只保存本地元数据,不初始化同步身份。
  • 此版本免登录主界面只显示新本地目录中的仓库。
    • 旧版账号目录下的仓库暂不迁移。

1.2 仓库信息

  • 在“更多操作”中可查看当前仓库:
    • 名称。
    • 本地路径。
    • ID。
    • Markdown 文件数。
    • 同步身份状态。

1.3 移除仓库

  • 在“更多操作”中确认后可移除当前仓库。
    • 删除仓库的 .mynote 元数据。
    • 从本地列表隐藏仓库。
    • 保留仓库目录及 Markdown 等笔记文件。
  • 元数据删除失败时,仓库仍留在列表中。

2. 账号与远端仓库

2.1 登录与会话

  • 登录使用服务地址、邮箱和密码。
  • 登录须从主界面手动进入。
  • 会话和按服务、账号隔离的设备身份保存在系统安全存储中。
  • 退出后重新登录会继续使用原同步身份。

2.2 克隆远端仓库

  • 从远端仓库列表克隆时下载当前完整快照。
    • 包含 Markdown 和图片附件。
    • 保存后续同步所需的文件基线。
  • 已有本地库不会被克隆覆盖。
  • 如果同 ID 的旧克隆已存在,新克隆会使用独立目录,旧数据仍可打开。

2.3 错误反馈

  • 登录、远端列表、同步和本地操作失败时,底部使用短暂的 toast 提示错误。
  • 错误提示不占用页面内容区。

3. 文档与标签

3.1 打开与切换

  • 文件选择、搜索结果和库内链接会打开或复用标签。
  • 每个标签独立保留:
    • 正文和未保存状态。
    • 光标与选择区。
    • 编辑或预览模式。
    • 滚动位置:编辑和预览分别保存,切回标签时恢复最近的位置,不回退到标签创建时的初始位置。
    • 大纲状态。
  • 切换标签不会自动保存;选中的固定标签会滚动到可见区域。
  • 标签栏左侧保留最近选中的非固定标签及其关闭按钮,名称超出固定宽度时省略,内边距与固定标签一致;单击立即打开列表,连续点击第二次会关闭列表并固定。
  • 右侧按原有顺序展示固定标签,每个按钮只显示文件名首字符,统一采用“测”按钮约 24 像素的宽度,按钮间距为宽度的一半,并使用不透明背景;单击立即切换标签,连续点击第二次会取消固定。
  • 长按标签通过底部 toast 显示文件名和完整路径。
  • 选中固定标签时,左侧仍保留最近选中的非固定标签,不重复展示固定标签;若全部标签都已固定,左侧显示“选择标签”入口。
  • 在列表中关闭左侧显示的标签后,选择列表中的下一个非固定标签;若没有非固定标签,则切换到第一个固定标签。
  • 当前标签仅使用背景高亮,不显示额外勾选图标。

已打开标签列表

  • 单击左侧标签或“选择标签”入口,可从标签栏附近打开已打开标签列表。
  • 列表自适应应用宽度。
  • 固定标签置顶;每项可固定或取消固定。固定按钮以实心/轮廓图钉表示当前状态,两种状态均使用普通背景,提示显示“固定 文件路径:开/关”。
  • 每项显示“文件名(路径)”。
  • 当前项使用背景高亮。
  • 右侧的 × 可连续关闭标签。
  • 选择标签、全部关闭或点击列表外时退出列表。
  • 切换到其他标签后,底部短暂显示文件名和路径。
  • 标签列表使用与文件树和大纲一致的 34 像素行距。

3.2 导航历史

  • 标签栏提供紧凑间距的前进和后退按钮;相邻导航图标以及前进图标与普通标签的可见间距均约为 12 像素。
  • 系统返回操作也会执行后退。
    • 没有可返回位置时保持主界面,不隐藏应用。
  • 以下跳转共用当前仓库的运行期导航历史:
    • 文件选择。
    • 标签切换。
    • 搜索结果。
    • 大纲。
    • 库内链接。
  • 返回已关闭的标签时会重新打开文件,并恢复:
    • 编辑或预览模式。
    • 选区。
    • 滚动位置。
  • 后退后进行新跳转会清除原前进分支。
  • 切换笔记库会清空历史。

3.3 编辑、预览与保存

  • Markdown 编辑区默认启用语法高亮,不增加额外工具栏或设置项。

    • 预览、当前文件差异和文件树差异的 h1–h6 标题使用与编辑区相同的分级颜色,并随明暗主题切换;保留预览标题尺寸和差异背景、行内增删标记。
    • 标题按六级区分颜色,支持链接与图片、粗体、斜体、删除线、行内代码、列表、引用和分隔线等语法。
    • 有语言标识的围栏代码按语言及别名高亮;无标识或未知语言保持代码样式,未闭合围栏持续到文末。
    • 高亮保留原始文字、选区、输入法组合区下划线和编辑差异行背景,不改变撤销重做与标签历史。
    • 浅色主题采用高对比度深色调,深色主题沿用 PC 版配色;字体尺寸与行距保持原有设置。
    • 文档超过 524,288 个 UTF-16 单元时暂停源码语法高亮,缩小后自动恢复;编辑、差异背景和保存仍可用。
  • 编辑、预览和只读差异模式使用图标按钮,通过背景高亮表示当前模式;点击时以提示显示名称。

  • 新打开的已有笔记默认使用预览模式。

  • 编辑和预览正文支持双指缩放,范围为 40%–200%,初始为 100%;不增加工具栏控件。

    • 同一仓库的编辑和预览共用比例,切换笔记或模式后保留;不同仓库独立,在应用运行期间记忆,重启后恢复 100%,不写入会话文件。
    • 正文缩放与当前差异、文件树差异的缩放比例独立。
    • 字号叠加系统文字缩放设置;正文、标题、列表和表格随缩放重排,代码文字随缩放改变字号,代码块保留源码换行并支持横向滚动。图片、工具栏、标题收藏按钮及代码复制控件不随正文缩放。
    • 双指缩放或一起移动时,在绘制前补偿滚动,使两指中心对应的正文尽量跟随手势,松手后保持位置;换行重排和滚动边界允许必要偏差。
    • 双指期间抑制文本选择、预览双击定位和链接误触,保留编辑内容、选区、焦点和撤销历史;松手或取消后恢复单指操作。
  • 双击预览正文切换到编辑模式,并将光标定位到对应段落、标题、列表项或代码块的源码起点,自动滚动到可见区域。

    • 嵌套列表定位被双击的具体列表项;单击链接、收藏标题、复制代码和滚动操作保持原有行为。
    • 正在执行操作或同步时暂不响应双击进入编辑。
  • 新建的空白笔记默认使用编辑模式。

  • 恢复的标签保留上次的模式。

  • 只读差异视图按标签保留模式和历史基准;切换到其他标签后再返回,仍显示该标签的差异视图。

    • 模式、精简/完整差异、自动换行、当前差异块与横纵向浏览位置按仓库持久化,重启后恢复。
    • 历史基准按保存的差异时间重新读取;历史暂不可用时保留模式,历史补齐后重试。
    • 恢复期间直接显示差异加载状态,不临时渲染预览正文;仍可切换标签和模式。
    • 启动时并行恢复本地仓库和登录状态;本地差异基线优先读取,不等待设备身份缓存写入、上次仓库记录或同步状态摘要。
    • 修改差异时间后清除各标签的旧基准,再次激活差异标签时按新时间加载;关闭差异时间会退出所有标签的差异模式。
  • 模式按钮和保存按钮的内边距均为 0.5em(8 像素)。保存按钮仅显示图标,点击时提示“保存”。

    • 左侧放编辑与浏览工具。
    • 右侧放笔记操作与保存。
  • 点击“保存”后只写入当前标签。

  • 编辑模式下,“笔记操作”菜单提供带图标的“撤销”和“重做”;无对应历史或正在忙碌、同步时禁用。

    • Windows/Linux 使用 Ctrl+Z 撤销,Ctrl+Shift+Z 或 Ctrl+Y 重做;macOS 使用 Cmd+Z 撤销,Cmd+Shift+Z 重做。菜单显示当前平台的快捷键名称。
    • 每个标签独立记录正文和光标选区,支持输入、删除、剪切和粘贴;连续输入在 500 毫秒内合并,输入法组合期间保持为一步。仅移动光标不产生历史。
    • 撤销、重做恢复光标选区并清除输入法组合状态;撤销后再次编辑会清空重做分支。
    • 切换标签、进入预览和保存后保留历史;关闭标签或重启应用后清空,不写入会话文件。
    • 同步改变笔记正文后清空历史,以同步后的正文为新起点;正文未变化时保留历史。
  • 以下操作前会自动保存全部未保存标签:

    • 切换笔记库。
    • 退出登录。
    • 开始同步。
  • 关闭未保存标签前会确认是否丢弃修改。

3.4 会话与草稿恢复

  • 以下状态按仓库保存在 .mynote/mobile-tabs-v1.json:
    • 打开的标签。
    • 活动标签。
    • 标签顺序。
    • 固定状态及左侧显示的非固定标签。
    • 未保存草稿。
    • 每篇笔记的“显示编辑差异”开关;切换标签或重启后恢复。
    • 只读差异模式与显示选项、差异浏览位置,以及文件树差异浏览状态和仓库共享缩放值。
  • 应用重启后恢复标签,包括以空行开头的笔记。
  • 若恢复期间磁盘正文也已变化:
    • 先尝试三方合并。
    • 无法合并时,将草稿保存为同目录的可见“恢复冲突”副本,避免覆盖任一版本。

4. 笔记管理

4.1 新建笔记

  • 可在当前仓库中新建 Markdown 笔记。
  • 输入相对路径即可创建子文件夹。

4.2 移动、重命名与删除

  • 当前笔记菜单支持:
    • 移动到其他文件夹。
    • 重命名。
    • 确认后永久删除。
  • 移动会让对应标签及其未保存草稿跟随新路径。
  • 删除会同时关闭对应标签。

移动限制

  • 跨文件夹移动笔记不会重写正文中的相对图片路径。
  • 移动后可能需要手动调整图片引用。

5. 文件选择器

  • 横屏全屏模式下,文件选择弹窗占满屏幕高度;竖屏模式统一为屏幕高度的 70%。

5.1 目录显示

  • 默认以 34 像素紧凑行距树形展示目录。
  • 树形/列表切换按钮展示当前模式图标:树形为目录树图标,列表为列表图标,两种模式均使用普通背景;提示显示“文件视图:树形/列表”。
  • 同层级文件与目录保持对齐。
  • 每行保持单行,名称过长时可横向滑动。
  • 可切换为列表模式。

5.2 折叠、过滤与定位

  • 支持单目录折叠和全部折叠或展开。
  • 支持以下过滤方式:
    • 中文。
    • 无声调全拼。
    • 拼音首字母。
  • 点击“定位当前文件”会:
    • 清除过滤。
    • 展开文件所在文件夹。
    • 滚动到当前文件。

5.3 状态保留

  • 关闭后重新打开文件选择器时,保留当前仓库的:
    • 树形或列表模式。
    • 折叠状态。
    • 过滤内容。
    • 各模式的滚动位置。
  • 切换仓库时,文件选择器恢复默认状态。

5.4 最近打开

  • 文件选择器显示最近打开的文件。
  • 每个仓库最多保存 20 条。
  • 移动或删除笔记后同步更新最近记录。

5.5 收藏夹

  • 横屏全屏模式下,收藏夹弹窗占满屏幕高度;竖屏模式统一为屏幕高度的 70%。
  • 文件选择器的文件行和当前笔记菜单可收藏或取消收藏文件。
  • 大纲标题右侧的星标可收藏或取消收藏标题;同名同级标题按出现顺序区分。
  • 预览正文的每个标题后也提供与标题居中对齐的星标,可直接切换该标题的收藏状态。
  • “笔记操作”菜单在文件收藏项下提供大纲收藏切换项,作用于当前光标或阅读位置所属标题;首个标题之前不可用。
  • 顶部“收藏夹”入口显示当前仓库的文件与大纲收藏,最多 100 项。
  • 默认按文件组织;排序按钮依次切换为收藏时间降序、升序,再回到按文件组织。排序方式按仓库保留。
  • 点击大纲收藏时按最新正文精确查找标题;标题身份失效时跳到收藏时记录的源码行。
  • 收藏跳转保持当前编辑、预览或差异视图,并在该视图内定位;目标文件没有差异基线时保留原文件的差异视图。
  • 预览中失效的大纲收藏若保存行不再是标题,则按源码位置估算预览滚动位置。
  • 移动或删除笔记会更新对应收藏,并保留取消收藏记录供多设备同步。
  • 收藏可离线使用,登录后与 PC 端按仓库 ID 独立同步;旧服务端缺少收藏接口时会提示升级。
  • 收藏或取消收藏先写入本机,不因网络请求阻塞操作;登录恢复、切换仓库及手动或定时同步时在后台合并远端收藏。断网期间的变更保留在本机,后续同步时上传。

5.6 条件与时间筛选

  • 编辑工具栏在“查看大纲”左侧提供“文件筛选与差异”按钮,横竖屏均可直接打开设置;文件选择器保留原入口,两个入口共用设置,并在筛选生效时显示标记。

  • 文件选择器保留中文、全拼和拼音首字母即时搜索,并可叠加以下条件:

    • 文件名包含。
    • 仓库相对目录。
    • 以逗号或空格分隔的扩展名。
    • 支持注释、反选和父目录排除约束的忽略规则。
    • 修改时间。
  • 修改时间支持:

    • 最近一天、七天、一个月、两个月、三个月和半年。
    • 数值天数、ms、s、m、h、d、w 固定时长。
    • ISO 8601 周、日和时间时长。
    • 本地日期、日期时间及日历选择。
  • 修改时间优先使用磁盘时间与可靠同步历史时间中较早的一个。

    • 尚无同步历史时使用磁盘修改时间。
  • 修改时间在打开时间筛选时按需读取;读取期间文件选择器显示加载状态,失败后可重试。

  • 内置“全部文件”和“最近七天”预设。

  • 每个仓库可保存、更新、重命名或删除最多 100 个自定义预设。

  • 筛选条件、预设和差异选项按仓库保存在 .mynote/mobile-ui-state-v1.json。

  • 筛选只影响文件选择器显示,不会修改 .mynoteignore、正文或同步范围。

5.7 当前文件差异

  • 编辑和预览旁提供只读“差异”模式,默认关闭。
  • 点击编辑图标恢复上次的编辑状态;旁边的“显示编辑差异”图标按钮切换开、关,开启时使用主题强调色实心背景和对应的高对比图标,与模式按钮的浅色背景区分,点击和长按提示状态。默认关闭,在编辑和预览模式下均可切换,保持当前模式;只读差异模式下不可切换。
    • 开关绑定当前笔记,收藏跳转不会将来源笔记的开关复制给目标笔记。
    • 重启后按保存的差异时间重新读取历史基线,保留原来的编辑或预览模式;历史暂不可用时保留开关,待历史补齐或重新切换标签后恢复高亮。
  • 启用编辑差异时,当前正文中相对时间基线新增或修改的行会以绿色高亮。
  • 从编辑差异切换到预览时,沿用同一历史基线高亮包含新增或修改行的预览块;普通预览不高亮,纯删除不在当前预览中标记。
  • 连续源码行属于同一个 Markdown 段落时,将其映射为同一个预览块,避免其他块的高亮失效。
  • 列表项的续行归入同一个预览列表块;不同项目符号形成的独立列表保持各自的源码位置。
  • 原始 HTML 块不显示为预览正文,也不会影响其他预览块的差异高亮。
  • 差异时间可跟随文件筛选,也可单独选择时间范围。
  • 应用文件筛选设置后,当前只读差异与已开启的编辑、预览差异重新读取历史基线并计算;关闭差异时间会退出差异模式并清除高亮,历史不可用时不保留旧差异结果。
  • 当前未保存正文会与指定时间或更早的最近同步历史版本比较。
  • 差异视图支持:
    • 带新旧行号的新增、删除及上下文行,删除为红色背景,新增为绿色背景,行首不显示加减号。
    • 成对显示相似的修改行,并在行内高亮具体删除和新增内容。
    • 没有可配对行的整段替换,依次显示旧文本的删除行与新文本的新增行。
    • 完全空行的相等匹配优先级低于相同或相似的正文行;对齐冲突时按删除和新增显示空行,纯空格行不视为完全空行。
    • 相似的删除行与新增行无论先后顺序,即使被未变化的空行隔开,也会进行行内对比,同时保持空行与行号的原有顺序。
    • 默认显示精简差异,可切换为完整差异。精简时使用短文本图标,完整时使用全文图标,两种状态均使用普通背景;提示显示“精简差异:开/关”。
    • 整个差异区域共享水平滚动,也可切换自动换行。换行开启时使用换行图标,关闭时使用直线文本图标,两种状态均使用普通背景;提示显示“自动换行:开/关”。
    • 差异行支持双指缩放,并与同一仓库的文件树差异共享缩放值。
      • 缩放仍通过调整正文、行号字号及相关间距实现;同步补偿横向、纵向滚动,使两指下的内容尽量跟随拇指,松手后保持最终位置。
      • 字号变化与滚动补偿在同一帧绘制前完成,避免先缩放再归位的晃动;差异区域关闭系统边缘拉伸效果,保留单指滚动。
      • 双指一起移动时可平移内容;自动换行重排或到达滚动边界时允许必要偏差,优先保持两指中心对应的正文位置。
    • 上一处和下一处差异基于当前视图位置导航,仅调整垂直位置并保留水平滚动位置;当前块整段显示定位条,首尾会显示到头提示。
      • 连续点击时按当前选中的差异块依次导航;上下文留白或滚动到首尾导致多个块共用滚动位置时,也不会跳回前面的块。手动滚动后按新的视图位置导航。
    • 单击差异行保持差异视图,双击返回编辑模式并定位正文。
  • 换行符和文件末尾换行统一处理,避免相同正文被误报。
  • 大型 Markdown 超过差异内存保护阈值时,会按中间未变化的唯一行分段对齐,不会把首尾变化之间的相同内容误显示为整段删除和新增。
    • 较大笔记的只读差异计算和较大历史缓存的首次解析、校验在后台执行,避免阻塞界面。
    • 只读差异结果按当前正文与历史基准缓存;切换精简显示、换行或导航时复用结果。
  • 移动端不提供 Git HEAD 比较。

5.8 文件树差异

  • 文件选择器顶部可打开全屏文件树差异。
  • 笔记工具栏在“查看大纲”右侧也提供“文件树差异”图标入口,横竖屏均可直接打开;与文件选择器入口共用比较时间、结果和浏览状态,忙碌时禁用。
  • 比较范围为仓库内全部 Markdown 文件,不受当前显示筛选影响。
  • 页面只列出正文实际变化的文件,并显示扫描数与历史不可用跳过数。
  • 比较时复用进程内的本地历史缓存,一次读取并索引历史;历史版本时间统一使用该版本的 createdAt,与 PC 端文件历史一致;当前同步历史时间未变化的正文直接跳过磁盘读取,其他文件跳过差异矩阵计算,并以最多 8 个并发读取当前正文。
  • 已打开且未保存的文件直接使用内存草稿参与比较,不再读取磁盘正文。
  • 首次比较、重新比较或变更比较时间时,加载页面显示准备阶段、已比较文件数、变化数、历史不可用数和当前文件。
  • 诊断日志以 [mynote.tree_diff] 前缀输出到 Flutter/Android 控制台,记录历史加载、逐文件读取与差异计算耗时,以及最终汇总耗时,不记录正文内容。
  • 比较结果按滚动位置懒构建文件差异,避免变化文件较多时一次性创建全部行组件。
  • 支持修改比较时间、重新比较、全部折叠或展开、精简差异、整体水平滚动和自动换行。精简差异与自动换行按钮的当前状态图标、普通背景和提示与当前文件差异视图一致。
  • 在任一文件的差异行区域双指缩放时,所有文件的差异行(正文和行号)同步缩放,并与当前文件差异共享缩放值;缩放值按仓库持久化,重启后恢复,范围为 40%–200%。
    • 以两指中心对应的正文位置补偿列表纵向滚动及当前触摸文件的横向滚动,使内容尽量跟随拇指;文件标题不参与缩放。
    • 字号变化与横向、纵向滚动补偿在同一帧绘制前完成;差异区域关闭系统边缘拉伸效果,避免与缩放叠加造成晃动。
    • 松手后保持最终位置;自动换行重排或到达滚动边界时允许必要偏差。
  • 可从文件标题直接打开对应笔记。
  • 单击差异正文保持文件树差异页面;双击正文打开对应笔记并定位,省略提示行不跳转。
    • 新增行和未变化行定位当前正文对应行;删除行定位之后第一条当前正文,末尾删除定位文件末尾,空文件定位起点。
    • 已打开的笔记保留原有编辑、预览或差异模式及未保存草稿;未打开的笔记沿用进入文件树差异前的模式,没有来源笔记时默认预览。
    • 编辑模式定位光标并滚动到可见区域;预览模式精确定位对应段落、列表项或代码块,空白或隐藏内容定位后续可见块,末尾定位前一块,无法映射时使用应用内提示。
      • 标题、代码块或引用后紧接空列表项(如 - )时仍保持独立的正文映射,不将列表标记误当作 Setext 标题下划线。
    • 差异模式定位当前正文对应行,必要时展开完整差异;历史基线不可用时提示并保留文件树页面。
    • 跳转记录导航位置并保存标签状态,可通过前进、后退恢复正文位置。
  • 应用运行期间会按仓库保留最近比较结果、时间、展开状态、精简/换行设置、纵向滚动位置和各文件的横向滚动位置。
    • 返回关闭、从标题打开文件或双击正文跳转后,再次打开文件树差异恢复上次浏览位置,直接使用已缓存的比较结果。
    • 比较时间、精简/完整差异、自动换行、文件折叠状态、横纵向浏览位置及共享缩放值保存在 .mynote/mobile-tabs-v1.json;重启后重新比较并恢复浏览状态。
    • 重新比较或修改比较时间仍清除折叠与浏览位置。
    • 不同仓库分别保留浏览状态;重新比较或修改比较时间时重置展开与滚动位置,应用重启后不恢复这次浏览位置。

6. 搜索

  • 横屏全屏模式下,搜索弹窗占满屏幕高度;竖屏模式统一为屏幕高度的 70%。键盘弹出时搜索内容保持在可用区域内。

6.1 搜索范围

  • 可按当前仓库的相对路径和 Markdown 正文查找。
  • 搜索不区分大小写。
  • 所有打开标签的搜索均使用各自尚未保存的草稿。

6.2 搜索结果

  • 结果显示命中行与片段。
  • 点击结果后打开或复用标签并定位。

6.3 搜索限制

  • 正文超过 2 MB 的文件会跳过正文搜索。
  • 最多显示 100 条结果。
  • 界面会提示文件被跳过或结果被截断。

7. 文档大纲

  • 横屏全屏模式下,大纲弹窗占满屏幕高度;竖屏模式统一为屏幕高度的 70%。

7.1 标题浏览

  • 可从当前文件栏打开大纲,编辑状态下入口保持在可见的工具栏前部。
  • 大纲以 34 像素紧凑行距按 Markdown 标题层级显示。
  • 同层级标题保持对齐。
  • 每行保持单行,标题过长时可横向滑动。
  • 点击标题可跳转到当前编辑、预览或差异页面中的对应位置。差异精简视图隐藏目标标题时会展开完整差异,并将标题置于差异区域顶部。

7.2 折叠、过滤与定位

  • 支持单个标题折叠及全部折叠或展开。
  • 支持以下过滤方式:
    • 中文。
    • 无声调全拼。
    • 拼音首字母。
  • 过滤结果保留上级标题。
  • 点击“定位当前标题”会清除过滤、展开上级标题并定位:
    • 编辑模式定位到光标所在标题。
    • 预览模式按滚动进度估算对应标题。
    • 差异模式按滚动进度估算对应标题。

7.3 状态保留

  • 关闭后重新打开大纲时,保留当前笔记的:
    • 过滤内容。
    • 标题折叠状态。
    • 滚动位置。
  • 切换笔记时,大纲恢复默认状态。

8. Markdown 预览与链接

8.1 Markdown 预览

  • 支持常用 Markdown 和库内相对路径图片。
  • 标题保持左对齐。
  • 每个标题后显示可直接切换大纲收藏的星标。

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 编辑模式支持“录音插入附件”。
    • 竖屏使用相机左侧的紧凑麦克风图标;横屏收入“笔记操作”菜单,排列在拍照之前。
    • 预览与差异模式不显示录音入口;录音期间阻止重复启动和笔记操作。
  • 点击麦克风开始录音,应用内浮层显示状态和已录时长;点击“完成”保存并插入,点击“取消”清理临时录音。
    • 录音浮层支持暂停与继续;暂停会停止收音与计时,继续后仍写入同一录音文件。暂停时也可完成或取消;进入后台仍停止录音并保留恢复记录。
    • 首次使用需授予麦克风权限;权限请求期间的临时失焦不会被视为录音中断。
    • 仅前台录音。锁屏、切到后台或音频中断时停止并保留已录内容,回到应用后确认插入或放弃。
    • 不设固定时长上限;每秒根据文件大小和配置码率估计缓冲数据,达到 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,不覆盖旧附件。恢复记录保留选定文件名,恢复插入不会另建重复附件;已有录音文件不自动改名。
    • 插入替换开始录音时的选区,光标位于引用末尾,笔记保持未保存状态;撤销、重做只改变正文,附件保留。
    • 临时录音与目标选区保存恢复记录。失败后可点击录音入口或重启应用重试;已完成的导入与正文插入不重复执行、不覆盖同名附件。
    • 异常退出后的临时文件只有通过可播放校验才能恢复。损坏、空文件或超限录音不导入同步目录;恢复失败可稍后重试或放弃。
  • 预览中的库内 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。
    • Access Token 默认隐藏;支持修改和清除配置,使用系统安全存储,仅保存在本机,不随仓库或账号同步。
    • 此接口不使用 Secret Key,凭据不预置在源码或安装包中。
  • 预览语音条与编辑模式的录音附件浮层提供紧凑的“录音转文字”图标。
    • 点击后将当前库内 M4A 附件以文件数据直接上传到豆包;仍使用现有 20 MiB 附件上限,原录音保留。
    • 采用 volc.seedasr.auc 标准版,通过提交任务与查询结果完成非实时转写,不自动转写新录音。
  • 上传前保存任务编号;按仓库目录、仓库 ID、附件路径及文件摘要区分本机任务。
    • 弹窗打开且应用在前台时每 5 秒查询一次;关闭或进入后台后停止定时查询,已经发出的请求可能完成。
    • 关闭弹窗或重启后,再打开同一录音可继续查询;已有结果直接展示,避免重复上传。
    • 上传超时或响应不确定时保留编号,优先查询原任务;网络错误后提供手动重试查询。
    • “重新识别”经应用内确认后才重新上传并替换任务与结果,可能再次计费。
    • AppID 改变后需恢复原 AppID 才能查询旧任务;也可显式重新识别。
  • 结果弹窗支持修改、复制及“插入笔记”;修改后的结果草稿保存在应用本机目录,不参与同步。
    • 确认时重新检查目标笔记、录音文件摘要和链接;仅在当前笔记有唯一对应录音链接时,插入该链接所在行下方。
    • 成功后切回编辑模式,支持一次撤销、重做,并持久化编辑草稿;仍需手动保存笔记。
    • 链接删除、重复出现或目标笔记变化时不自动插入,结果保留,可重新打开录音复制。
    • 静音或空结果提示没有识别到文字,不插入空白正文。
  • “笔记操作”菜单提供“批量语音转文字”,编辑与预览模式均可使用。
    • 从当前笔记正文提取库内录音链接,按出现顺序逐段处理;重复引用同一附件只调用一次,代码示例和远端链接不参与转换。
    • 转换期间禁止编辑笔记,显示总数、已处理数及各录音状态;完成后统一确认“插入全部结果”,整批插入支持一次撤销,并保存编辑草稿。
    • 复用单段转写任务与已有结果;单段失败、缺失或空结果不阻止后续录音。链接重复或录音变化时跳过该段正文插入,转写结果保留,可单独打开录音处理。
    • 再次批量插入时,若对应录音链接下方已存在相同转写结果,则跳过该段并提示已存在的数量;其他录音仍正常插入。撤销或删除该结果后可再次批量插入,单段手动插入保持原行为。
    • 可点击“停止”结束批次;已提交的任务和已完成结果保留,可插入已完成部分。关闭、停止或进入后台后不继续定时查询;再次发起批次复用原任务。
  • 接口依据:鉴权说明、任务提交、结果查询。

9. 同步

9.1 手动同步

  • 登录后可点击当前仓库的“立即同步”。
  • “更多操作”中的“同步中心”可在未登录或未选择仓库时打开。
    • 账号区显示登录状态、邮箱和用户 ID;登录与退出仍由“更多操作”完成。
    • 当前仓库区显示实时进度、上次成功同步时间和冲突副本入口,并提供刷新状态和“立即同步”。未成功同步时上次时间显示“—”。
    • 远端笔记库列表显示名称和版本,可在列表标题旁刷新,也可克隆尚未保存在本地的仓库;克隆后返回笔记页面。刷新图标与仓库行尾图标对齐,请求期间旋转。
    • 自动同步区直接提供开关和 1–86400 秒的间隔输入;有效修改自动保存。
  • 首页的一键同步图标继续直接同步,同步期间旋转;同步中心的“立即同步”图标也在同步期间旋转。首页不再显示进度和上次同步时间。
  • 首页点击仓库名可打开左侧笔记库抽屉,按钮的点击反馈使用圆角;抽屉中的远端笔记库标题旁也可刷新远端列表。刷新图标与仓库行尾图标对齐,请求期间旋转。
  • 笔记正文、新建、移动、删除及本机界面设置先保存到本地;这些操作不等待同步接口,网络恢复后通过手动或定时同步发送需要共享的内容。
  • 同步会上传本地新增、修改、移动和删除,并拉取远端最终版本。
  • 同步前会保存当前编辑稿。
  • 同步期间暂不可编辑、保存、新建/移动/删除笔记,或新建/移除/克隆仓库;搜索、预览、差异、切换标签与笔记库、查看设置等浏览操作仍可使用。
  • 切换到正在同步的笔记库时,会等该库写入完成后再打开。
  • 同步期间可选择退出登录;应用会等当前写入完成并跳过本轮剩余仓库,然后退出。
  • 同步失败后可再次点击重试。
  • 暂不提供历史版本界面。

9.2 自动定时同步

  • 在“更多操作”进入同步中心后,可开启全局自动同步,并设置 1–86400 秒的整数间隔;默认关闭、默认间隔为 60 秒。
  • 开关与间隔修改后自动保存;关闭开关仍保留已设置的间隔。
  • 全局开启后,当前仓库始终参与定时同步。
  • 本地仓库列表中的“切换后仍自动同步”可让离开后的仓库继续参与定时同步;各仓库默认关闭,且可在全局关闭时预先设置。
  • 仓库行直接显示同步图标与“后台自动同步:开/关”;全局自动同步关闭时,可同步库中已开启的仓库会显示“全局关闭”。
  • 定时任务仅在应用处于前台且已登录时运行;进入后台停止计时,返回前台后重新计时。
  • 登录凭据失效后停止定时请求,重新登录后恢复调度。
  • 同一轮中的仓库依次同步;操作尚未完成时跳过到期任务,单个仓库失败不会阻止其他仓库。
  • 尚未首次手动发布的本地仓库和旧版克隆不参与定时同步。
  • 自动同步沿用手动同步的草稿保存、合并与冲突副本处理。

9.3 本地仓库发布

  • 本地新建仓库在首次包含可同步文件时发布到远端。
  • 空仓库继续只保存在设备上。

9.4 同步范围与忽略规则

  • 同步支持:
    • Markdown。
    • 常见图片。
    • .mynoteignore。
  • 忽略规则仅决定新文件是否进入同步。
  • 已同步文件仍会继续同步。
  • .mynote 和应用包目录始终排除。

9.5 合并与冲突

  • Markdown 的非重叠修改会自动三方合并。
  • 无法合并或发生以下冲突时,远端版本成为主文件,本地内容保存为独立冲突副本:
    • 图片冲突。
    • 删除冲突。
    • 路径占用冲突。
  • 可见冲突副本会继续上传到远端,用户可在笔记列表中整理。
  • 点击同步状态可查看副本路径。
  • .mynoteignore 的副本保存在 .mynote/sync-conflicts/。
    • 可在应用内查看正文。
    • 不会成为生效规则。

9.6 同步身份与旧版克隆

  • 旧版移动端克隆缺少文件同步基线。
    • 仍可本地编辑。
    • 不能原地启用同步。
    • 请从远端列表重新克隆。
  • 同步状态按服务地址和账号隔离,不会用其他账号继续同步同一仓库。
  • 同账号重新登录取得新设备身份时,会保留并换绑原有同步基线与待重试操作。

9.7 本地历史缓存

  • 克隆和同步会分页下载截至当前同步游标的版本历史,并保存到账号隔离的 .mynote/mobile-history-v1/。
  • 已缓存历史可离线用于修改时间、当前文件差异和文件树差异。
  • 已有同步仓库会在登录后打开仓库或下次同步时补齐历史。
  • 本地未发布仓库、旧版克隆和没有可靠同步身份的新文件不能进行时间差异比较。
  • 历史缓存失败时不会发布不完整缓存;再次同步会重新补齐。
  • 本地历史缓存的 JSON 损坏时,差异视图会尝试联网重新下载;完整下载成功后才替换损坏文件,失败时保留原文件。
  • 当前笔记的历史按文件生成持久化索引,重启后只读取该笔记的版本;修改时间和同步游标使用不含正文的摘要。
    • 索引位于历史清单旁的 .json.files/ 目录,是可重建的缓存;历史清单仍是完整历史的来源。
    • 按历史清单大小、修改时间、账号与仓库身份校验索引,并检查索引内容摘要;索引损坏或清单变化时回退读取完整历史。
    • 首次生成索引需要一次完整历史读取;后续冷启动复用索引,同步后刷新已查询文件的索引。
    • 同时发生的完整历史加载共享一次读取和解析,避免启动恢复与后台历史补齐重复加载。
  • 构建时可用 --dart-define=MYNOTE_STARTUP_TRACE=true 开启 [mynote.startup] 阶段计时,记录仓库、历史基线与差异首帧耗时,不记录笔记正文。

9.8 容量限制

  • 当前全量导出响应上限为 100 MB。
  • 更大的笔记库需要后续改为分批下载。

MP3 播放器

入口与数据来源

  • 首页“更多操作”菜单提供“MP3 播放器”,未登录、没有笔记库时也可进入独立页面。
  • 固定连接 http://mp3.uninote.com.cn/,复用现有 mp3.php、MP3 和同名 TXT;不修改后端,不提供本地导入或下载。
  • 首次按网页目录顺序选择 dir=2(当前为 ./__mp3/002);以后恢复上次目录、曲目和进度。首次和进程重启后手动播放,选择目录或曲目后开始播放。
  • 按目录保存播放参数,独立于笔记仓库和账号;曲目或目录消失时回退至首个可用项。

播放与正文

  • 目录与曲目选择、模式、倍速采用紧凑工具栏,正文占据剩余空间;横屏中将首末曲和前后五首收入菜单。
  • 播放条下方显示紧凑提示“双指长按选择文本”。
  • 支持播放/暂停、进度拖动、上一首/下一首、首曲/末曲、前后五首,以及指定秒数的快进/后退。
    • 按秒快进/后退可以跨越曲目:当前播放到第 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 和 iOS 共用应用级音频服务;返回笔记、锁屏或切换应用后继续播放,重新进入页面显示当前播放状态。
  • 蓝牙耳机、系统媒体控制支持播放/暂停、上一首/下一首和设备提供的进度操作;具体按键映射由耳机和系统决定。
  • 耳机断开时暂停;临时音频中断结束后,仅恢复中断前正在播放且未被用户暂停的音频。
  • 菜单和系统媒体控制提供停止操作。Android 暂停时保留媒体服务,便于后台耳机恢复播放;停止后结束媒体前台状态。
  • 进度每 5 秒保存,并在暂停、跳转和退出页面时保存;进程被强制终止后不自动播放。

服务端维护操作

  • 菜单“重新生成 MP3”调用现有 re-gene-mp3,传入曲目的 TXT 与 MP3 路径;成功后刷新音频版本,保留播放/暂停状态和进度。
  • 选择正文后,“删除选中行缓存”按选区焦点所在完整行调用 delete-cache,不包含行尾换行符;没有有效选区时提示。单击控制开启时使用双指或多指长按选字。
  • 删除缓存后不自动重新生成;两项操作均通过 Flutter 应用内弹窗展示后端结果,同一时间只执行一项。

10. 开发与安全注意事项

10.1 HTTPS 证书

  • HTTPS 请求当前会忽略证书校验,以支持使用内部 CA 或自签名证书的服务。
  • 仅应连接受信任的服务地址。

10.2 测试登录信息

  • 当前开发版本预填测试登录信息。
  • 测试信息包含密码,发布或共享构建前必须删除。

AGENTS

README

点赞(0) 阅读(23) 举报
目录
标题