Skip to content

Bookdock v0.6.2

Choose a tag to compare

@github-actions github-actions released this 21 Oct 16:53
· 47 commits to main since this release

[0.6.2] - 2026-10-22

Highlights

  • Reflowable EPUB clean reading mode with isolated resource styling, clean typography, and reading position preservation.
  • Streamlined reader settings "Display" panel with semantic grouping, collapsible secondary controls, and compact button styles.
  • Hardened reader selection toolbar, deselect cleanup, and in-flight annotation mutation safeguards.
  • Independent personal-library categories, two-level category tree navigation, and personal archive retention with explicit cleanup choice on removal.

Added

  • Reflowable EPUBs offer clean reading with basic typography and hidden images and media. It supports reading presets and per-book overrides, and keeps your reading position when switched on or off.
  • Personal-library categories are now independent of shelves, with two-level paths and optional recommendations created only when you save a selection.
  • The reading-data API provides category breakdowns, including uncategorized reading history.
  • Personal highlights, bookmarks, ideas and private reviews now stay in your archive after the original book file is deleted.
  • Retained books keep their title, author, format and cover in the archive, shown as source unavailable instead of failing to open.
  • Removing a book from your library, or deleting it, now offers to clear your personal data for that book: reading records, notes and more.

Changed

  • Reorganized the reader settings "Display" panel into three semantic groups: Reading Method, Text Display, and Reading Aids. Secondary options for headers, footers, and peer idea styling collapse cleanly when their toggles are off without occupying layout space or entering keyboard tab order, and secondary option buttons use a more compact style.
  • Jumping to an annotation in the reader always aligns the passage near the top of the page, instead of leaving it where it happens to be.
  • The personal-library sidebar separates shelves, categories and tags. Books without a shelf appear under Not on a shelf, independently of Uncategorized books.
  • Book details display and edit categories and tags; shelf organization remains available from the library and batch organizer.
  • Redesigned book detail category and tag pickers into compact popover attributes: category picker supports two-level hierarchy with viewport-aware auto-flip, inline category creation, and collapsible template suggestions; tag picker uses removable selected pills paired with a searchable multi-select popover and inline creation.
  • Batch organization uses consistent shelf, category and tag choices, explicit keep-unchanged options, compact category trees, and fixed dialog actions.
  • Collecting a shared book copies its category path and merges tags by name into your library, without copying hidden or pinned settings or following later source changes.
  • Archived notes, reviews and reading statistics leave out a book as soon as you choose personal-data cleanup, and come back when you restore it from the trash.
  • Permanent deletion, emptying the trash and automatic cleanup honor that choice and remove only your own data for the book.
  • Batch deletion applies the personal-data choice to owned books as well as collected ones.
  • Enhanced backend performance and response aggregation across core modules: BookDetailRes now includes shelf name, tags, and reading position directly in book details to eliminate sequential request waterfalls and layout shifting; session validation is cached in-memory with write-invalidation; SQLite connections use busy_timeout, synchronous = NORMAL, and a 20MB cache size; unread notification counts are cached with event-driven invalidation; and book search and list queries push JSON extraction inside the subquery to minimize payload evaluation overhead.
  • Modal dialogs remove non-passive wheel blockers and full-screen backdrop blurs to restore native compositor-thread smooth scrolling; broad scrollbar hover pseudo-selectors are confined to dedicated scroll containers to reduce style recalculation churn.
  • Manual timing confirms that the reading record was saved only after the server accepts it, and reading times below one minute are shown in seconds.

Fixed

  • Clicking actions on the reader selection toolbar (such as highlighting, restyling, or note creation) no longer misidentifies clicks as outside events that unintentionally close open popovers or dismiss the top header.
  • Clearing reader selection or dismissing selection menus synchronously clears native browser text selection, highlights, and note editor ranges.
  • Annotation mutations add in-flight deduplication, guard against stale response race conditions overwriting current selection state, and roll back optimistic cache updates if the request fails.
  • Opening a book keeps the reader theme, font size and spacing applied even when external fonts load slowly or time out, preventing a temporary white page with the book's original formatting.
  • Reader immediately clears and suppresses header and footer summon states while any fullscreen modal or overlay is active, preventing accidental toolbar reveal when moving the mouse near top or bottom edges.
  • Opening replacement rules from reader settings no longer leaves the reader header stuck open.
  • Switching between shelf, category and tag navigation clears the previous dimension and pagination while retaining additional filters and existing link meanings.
  • Category and tag reading totals use one authorized library entry per version, respect private-library metadata and visibility, and avoid counting duplicate links. Retained history without a current library entry remains included.
  • Empty shelf, category and tag views use consistent hints; empty shared tags are labeled correctly, and failed category loads show retry instead of appearing empty.
  • The archive no longer labels a note's position as unavailable when the book itself is gone; only the jump back to the original text is disabled.
  • Unread notification counts refresh immediately when source access or target visibility changes, including when access is restored.
  • Fixed page transition delay and two-phase loading waterfalls by setting TanStack Router's pending threshold to zero, enabling intent preloading on hover, adding matching pending skeletons for the reading archive and notification center, and hooking sidebar and account navigation into router preloading.

Upgrade notes

  • Back up the complete DATA_DIR before upgrading. Migration 0053 keeps your notes, reviews, comments and likes, and stops deleting them when a book is removed. Downgrading requires the pre-upgrade data with the matching previous release.
  • Migration 0054 preserves existing personal shelf IDs, settings and book assignments in a separate shelf table, and copies category paths and tags from valid shared sources for previously collected books. Recommended categories are not pre-created.

中文

[0.6.2] - 2026-10-22

亮点

  • 可重排 EPUB 支持“纯净阅读”模式,提供纯粹排版与资源隔离,切换时无缝保持阅读进度。
  • 重构阅读设置中的“显示”菜单结构,语义化分组,附属选项折叠收起且不占布局空间,采用紧凑选项样式。
  • 加固划线选区工具栏交互、原生选区同步清除机制与在途标注保存保护。
  • 私库分类与书架独立,支持两级分类导航树与紧凑属性选择弹层,删书留档与个人数据清理机制完善。

新增

  • 可重排 EPUB 新增“纯净阅读”,使用基础文字排版并隐藏图片和音视频;支持阅读预设与仅本书设置,开关切换时保留阅读位置。
  • 私库分类与书架独立,支持两级分类路径;推荐分类仅在选用并保存后按需创建。
  • 阅读数据 API 新增分类分布,包含未分类的历史阅读数据。
  • 个人划线、书签、想法与私密书评在原书文件被删除后仍保留在归档中心。
  • 保留的书籍在归档中心继续显示书名、作者、格式与封面,并标注原书不可用,而不是直接打开失败。
  • 从个人书库移出或删除书籍时,可以同时选择清理这本书的个人数据,包括阅读记录、笔记等。

变更

  • 重构阅读设置中的“显示”菜单结构,按语义拆分为“阅读方式”、“正文显示”与“阅读辅助”三组;页眉、页脚与书友想法关闭时收起附属选项且不占用布局空间与键盘焦点顺序,简繁转换及展示方式等选项采用更紧凑的样式。
  • 阅读器内跳转标注时始终把目标位置对齐到页面上方,不再因为目标恰好在可视区域而原地不动。
  • 私库侧栏分为书架、分类与标签;未分配书架的书籍显示在“未入架”,与“未分类”独立。
  • 书籍详情展示和编辑分类与标签;书架整理继续从书库首页和批量整理入口操作。
  • 书籍详情中的分类与标签编辑交互重构为紧凑属性弹层:分类选择器支持两级层级树与视口自适应翻转、行内新建分类以及折叠式推荐分类;标签选择器支持已选标签直接快捷移除,结合支持即时过滤和行内新建的多选弹层。
  • 批量整理统一书架、分类与标签的选择样式,明确提供保持不变的选项,分类树更紧凑,弹窗底部操作保持固定。
  • 收藏共享书籍时,按分类路径映射到私库、按名称合并标签,不复制隐藏或置顶状态,也不自动跟随来源更新。
  • 选择清理个人数据后,归档笔记、书评与阅读统计会先隐藏该书;从回收站恢复后重新出现。
  • 彻底删除、清空回收站与自动清理都会遵循该选择,并且只清除你本人在这本书上的数据。
  • 批量删除同样应用个人数据清理选择,个人书籍与收藏书籍一视同仁。
  • 全项目核心后端性能审计与响应聚合优化:书籍详情接口直接携带书架名称、标签与阅读定位进度,消除多阶段请求瀑布与弹窗内容跳动;认证守卫引入会话 Token 内存缓存与精准失效机制,消除并发接口重复查询会话表;SQLite 数据库连接配置 busy_timeout、WAL synchronous = NORMAL 与 20MB 页面缓存提升高并发写入稳定性;通知未读数轮询引入带事件失效的轻量缓存,避免全量实体扫描;列表与搜索查询将 JSON 提取下推至子查询内部,降低元数据传输与解析开销。
  • 优化模态弹窗滚动与渲染性能:移除阻塞主线程平滑滚动的非被动 onWheel 拦截与全屏背景模糊,收敛全局通配符高频伪类以消除滚动时的样式重算掉帧。
  • 手动计时在服务端确认保存后才提示阅读记录已保存,不足一分钟的阅读时长改为按秒显示。

修复

  • 点击选区划线工具栏(包括划线、样式切换与笔记入口)时不再误触发外部点击判定,避免意外关闭设置弹层或收起阅读器顶栏。
  • 关闭选区或清除选中文本时,同步清理浏览器原生选区高亮与相关气泡弹层。
  • 划线与标注操作增加防重复提交限制、旧请求竞态保护以及保存失败时的乐观缓存回滚机制。
  • 打开书籍时,即使外部字体加载缓慢或超时,正文仍保持阅读主题、字号与间距,不再短暂显示白底和书籍原始排版。
  • 阅读器在打开任意全屏弹窗或遮罩时,立即清除并静默顶栏/底栏召唤状态,避免鼠标滑动到页面边缘时误触发栏位显隐。
  • 从阅读设置打开替换规则弹窗时,顶栏不再因设置态残留而保持常显。
  • 切换书架、分类与标签导航时清除前一维度条件及分页,保留附加筛选与旧链接语义。
  • 分类与标签阅读统计为每个版本选定唯一合法馆藏,遵循私库元数据和可见性规则,避免重复关联造成重复计时;没有当前馆藏的保留历史仍会计入。
  • 书架、分类与标签空状态统一;共享库空标签文案恢复正确,分类加载失败时提供重试,不再误显示为空。
  • 原书已不存在时,归档笔记不再标注历史位置不可用,仅禁用跳转到原文的入口。
  • 来源访问权限或想法、书评可见性变化后,通知未读数立即刷新;恢复访问时也会重新计入保留的未读通知。
  • 修复子页面跳转卡顿与二次加载瀑布流:将 TanStack Router 挂起等待阈值设为零以消除点击无响应延迟,开启悬浮预加载,为“阅读档案”与“通知中心”补齐专属框架骨架屏,并将侧栏与账号菜单升级至标准路由预加载。

升级说明

  • 升级前完整备份 DATA_DIR。迁移 0053 会保留你的笔记、书评、评论与点赞,并停止在书籍删除时一并清除;降级需要恢复升级前的数据并使用对应旧版本。
  • 迁移 0054 将已有私库书架平移到独立表,保留书架 ID、属性及成员关系,并从合法共享来源为此前收藏的书籍映射分类路径、合并标签;不会预先创建推荐分类。