Skip to content

Releases: cshdotcom/readest-lite

Release v8.23.2

Choose a tag to compare

@cshdotcom cshdotcom released this 12 Sep 10:19

v8.23.2

Changed

  • 隐藏自定义分组管理:移除 ViewMenu 中的 GroupManagementModal 菜单项、import、state
  • 恢复原生分组:Bookshelf.tsx 移除 dbGroups 拉取 + merge 逻辑,恢复用 generateBookshelfItems 按 book.groupName 原生分组
  • BookGroup DB 模型和 /api/book-groups API 保留但前端不再调用

Updated

  • 宣传网站 ITERATION_PROMPT.md 从 v8.8.0 更新到 v8.23.0
  • aph.html 自动加载最新提示词

镜像

  • ghcr.io/cshdotcom/readest-lite:8.23.2
  • ghcr.io/cshdotcom/readest-lite:latest

Release v8.23.1

Choose a tag to compare

@cshdotcom cshdotcom released this 12 Sep 09:20

v8.23.1

Fixed

  • 用户文件查看显示仅管理员:storage/list.ts 增加 SUPER_ADMIN_EMAIL env fallback,即使用户 DB role 没更新也能通过校验
  • README 快速开始命令加 -e SUPER_ADMIN_EMAIL=admin@example.com
  • 环境变量表加 SUPER_ADMIN_EMAIL 行

Updated

  • 宣传网站已更新:https://cshdotcom.github.io/readestl/
    • index.html: NodeByte 社区置顶横幅 + 12 功能卡片 + TODO + 快速开始(含 SUPER_ADMIN_EMAIL)
    • deploy.html: 部署教程 + 环境变量表(含 SUPER_ADMIN_EMAIL)+ Nginx 反向代理 + 备份指南

镜像

  • ghcr.io/cshdotcom/readest-lite:8.23.1
  • ghcr.io/cshdotcom/readest-lite:latest

升级

docker pull ghcr.io/cshdotcom/readest-lite:8.23.1
docker compose down && docker compose up -d

Release v8.23.0

Choose a tag to compare

@cshdotcom cshdotcom released this 12 Sep 08:47

v8.23.0 — 删除有声书 + 删除 RSS favicon + 修复超级管理员 + 分组融合 + 宣传网站

Removed

  • 有声书内置播放器:移除 AudiobookPlayer 组件、/api/audiobook/* 端点、bookService 音频短路、BookFormat MP3/M4A/M4B。加到 TODO 待办列表
  • RSS 自动 favicon 识别:删除 favicon.ts,feedBook.ts 不再抓取 favicon

Fixed — 超级管理员 ENV 识别(彻底修复)

  • 根因:init-admin.mjs(容器启动实际运行的脚本)硬编码 role = 'admin',在 Phase 1 会把已有的 super_admin 降级回 admin
  • 修复:计算 targetRole = (SUPER_ADMIN_EMAIL == ADMIN_EMAIL) ? 'super_admin' : 'admin',不再降级

Added

  • 分组管理与书库 GroupBy 融合(v8.22.5 已实现)
  • RSS 防重复检查
  • docs/website/index.html 宣传网站(NodeByte 置顶 + TODO + 功能列表)
  • README TODO 待办列表
  • README NodeByte 社区置顶

镜像

  • ghcr.io/cshdotcom/readest-lite:8.23.0
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

升级

docker pull ghcr.io/cshdotcom/readest-lite:8.23.0
docker compose down && docker compose up -d

Release v8.22.5

Choose a tag to compare

@cshdotcom cshdotcom released this 12 Sep 07:24

v8.22.5 — 分组管理融合 + RSS 防重复

✨ 分组管理融合到书库 GroupBy=Groups

  • 当书库选择「Group by → Groups」时,从 /api/book-groups 拉取 BookGroup DB 条目
  • 将 DB 中的空分组注入书架列表 — 用户在 GroupManagementModal 创建的分组现在会出现在书库中,即使没有书籍分配
  • 已有书籍的分组不会被重复注入

🔧 修复 RSS 书籍重复(变成 2 本)

  • handleAddFeedSubmit 增加防重复检查:如果书库已有相同 hash 的书,提示「已订阅」并跳过
  • 新增翻译:「Already subscribed to "{{title}}"」→「已订阅「{{title}}」」

📦 镜像

  • ghcr.io/cshdotcom/readest-lite:8.22.5
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

⬆️ 升级

docker pull ghcr.io/cshdotcom/readest-lite:8.22.5
docker compose down && docker compose up -d

Release v8.22.4

Choose a tag to compare

@cshdotcom cshdotcom released this 12 Sep 03:56

v8.22.4 — 关键修复:超级管理员 + 文件复制 + RSS + 有声书

🔧 修复

1. env 配置的超级管理员不被识别

  • 根因:ensureAdminUser 硬编码 role: 'admin',从未读 SUPER_ADMIN_EMAIL 环境变量
  • 修复:若 SUPER_ADMIN_EMAIL == ADMIN_EMAIL,则 role = 'super_admin'
  • 已有用户也会自动升级 role(重启容器即生效)

2. 管理员文件管理器无法复制文件给自己

  • 根因:v8.22.2 加了 "Cannot copy file to its owner" 检查阻止了这种情况
  • 修复:移除该检查;目标已有文件时改为跳过(不报错)

3. 有声书点击无反应

  • 根因:player/page.tsx 第 41 行被损坏(const etadata 缺 [M)
  • 修复:恢复为 const [metadata, setMetadata]

4. RSS 书籍无法打开

  • 根因:loadBookContent 对 feed:// 书籍抛 BookFileNotFoundError(静默崩溃)
  • 修复:改为抛出清晰的中文错误提示,引导用户用书库视图浏览

5. 查看用户文件显示"仅管理员"

  • 根因:超级管理员角色未被正确写入 DB → validateAdmin 拒绝
  • 修复:通过上述 #1 的 super_admin role 修复间接解决

✨ 增强

批量复制到多个用户

  • /api/storage/copy 支持 targetUserIds 数组(多目标)
  • AdminFileTransfer 目标用户改为可搜索+可多选下拉面板
    • max-h-60 滚动不溢出
    • 全选/清空/Done 按钮
    • 搜索框实时过滤
  • 复制时弹 toast:Copied N file(s) to M user(s)

目标用户下拉面板

  • 改为下拉面板(不是 datalist)
  • 可搜索、可多选、可滚动、不溢出
  • 移动仅支持单目标(多目标用复制)

🌐 翻译

  • 新增 8 个简体中文键(目标用户下拉 + RSS 提示)

📦 镜像

  • ghcr.io/cshdotcom/readest-lite:8.22.4
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

⬆️ 升级

docker pull ghcr.io/cshdotcom/readest-lite:8.22.4
docker compose down && docker compose up -d

升级后浏览器硬刷新(Ctrl+Shift+R)清掉旧 SW 缓存。

Release v8.22.3

Choose a tag to compare

@cshdotcom cshdotcom released this 10 Sep 15:33

v8.22.3 — 内置 HTML5 有声书播放器 + NodeByte 社区置顶

🎵 内置有声书播放器(无需外部服务)

Readest Lite 现在自带内置有声书播放器,不再依赖 Audiobookshelf。直接上传 .mp3/.m4a/.m4b 即可播放。

新增 API:

  • GET /api/audiobook/metadata/[bookHash] — 返回该书的音频章节列表(自动按 fileKey 排序,提取章节标题)
  • GET /api/audiobook/stream/[bookHash]?fileKey=...&token=... — 流式返回音频文件,支持 HTTP Range(拖动进度条),token 通过 URL 传递,24 小时 TTL

AudiobookPlayer 组件功能:

  • ▶️ 播放/暂停/上一章/下一章
  • 🔍 拖动进度条跳转
  • 🎚️ 音量调节 + 静音
  • ⚡ 播放速度(0.75× / 1× / 1.25× / 1.5× / 1.75× / 2×)
  • 💾 自动保存播放进度(每 5 秒),下次打开继续播放
  • 🔁 自动连续播放下一章
  • 📚 章节列表(点击切换)

bookService 改造:

  • 上传 .mp3/.m4a/.m4b 自动识别为有声书,跳过 foliate-js 解析
  • BookFormat 类型扩展:'MP3' | 'M4A' | 'M4B'
  • useOpenBook.ts:本地音频书也走 /player 路由

📌 NodeByte 社区置顶

README 顶部加入 for-the-badge 风格的社区入口徽章,NodeByte 社区链接放到最显眼位置:

  • NodeByte

📖 文档

  • README 新增「🔊 有声书播放」详细章节,包括 3 种播放方式 + 播放器功能列表 + 鉴权说明
  • ITERATION_PROMPT.md 更新到 v8.22.3

🌐 翻译

  • 新增 14 个简体中文键(有声书播放器 UI)

📦 镜像

  • ghcr.io/cshdotcom/readest-lite:8.22.3
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

⬆️ 升级

docker pull ghcr.io/cshdotcom/readest-lite:8.22.3
docker compose down && docker compose up -d

升级后浏览器硬刷新(Ctrl+Shift+R)清掉旧 SW 缓存。

Release v8.22.2

Choose a tag to compare

@cshdotcom cshdotcom released this 10 Sep 13:30

v8.22.2 — 关键 CORS 修复 + 有声书教程页 + 体验改进

🔧 关键修复

根因:reader 页面 CORS 错误(download.readest.com / storage.readest.com)

之前打开书籍会闪现 CORS 错误并阻塞阅读体验。根因是客户端去 fetch 上游官方 CDN 的 release-notes.json 和 CJK 字体。修复:

  • helpers/updater.ts:checkForAppUpdates 与 checkAppReleaseNotes 在 web 平台(非 Tauri)直接 short-circuit,不再 fetch 远程
  • services/constants.ts:READEST_CHANGELOG_FILE / READEST_UPDATER_FILE 改为本地相对路径 /releases/...,READEST_PUBLIC_STORAGE_BASE_URL 改为空字符串
  • styles/fonts.ts:hostedCJKFonts 改为空数组,不再引用 storage.readest.com 上的 CJK 字体(加载会 404 但不会 CORS 报错)
  • 新增 public/releases/latest.json 与 public/releases/release-notes.json(Lite 自有的本地更新日志)

📚 有声书点击改为应用内教程页

之前点击有声书只显示「Lite 不支持」冷冰冰提示。现在改为详细的「3 种播放方式」教程:

  1. 上传本地音频文件:支持 .mp3 / .m4a / .m4b
    • 单文件有声书(.m4b 或单个 .mp3):直接上传
    • 多文件有声书(多个 .mp3 章节):创建一个与书同名的文件夹上传
    • 封面:可选 cover.jpg
  2. 从 Audiobookshelf(ABS)流式播放:在 设置 → 集成 → Audiobookshelf 配置服务器
  3. 导入带朗读的 EPUB:自动识别内嵌 audio narration

🎨 用户体验改进

  • 用户中心布局:阅读统计卡片(最核心功能)移到第一位
  • 管理员文件管理:AdminFileTransfer 默认折叠(与回收站一致),点击展开
  • 移动/复制到自身:增加边界检查,错误信息友好

🌐 翻译

  • 新增 15 个简体中文键(有声书教程 + 折叠 UI)

📦 镜像

  • ghcr.io/cshdotcom/readest-lite:8.22.2
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

⬆️ 升级

docker pull ghcr.io/cshdotcom/readest-lite:8.22.2
docker compose down && docker compose up -d

升级后浏览器需要硬刷新(Ctrl+Shift+R)清掉旧的 service worker 缓存。

Release v8.22.1

Choose a tag to compare

@cshdotcom cshdotcom released this 10 Sep 11:41

v8.22.1 — 修复 CI 构建失败

Fixed

  • 移除 readera-import 的未用变量 author 与 NotionForm 的未用 useEffect/useCallback import(触发 noUnusedLocals TS6133)

镜像

  • ghcr.io/cshdotcom/readest-lite:8.22.1
  • ghcr.io/cshdotcom/readest-lite:8.22
  • ghcr.io/cshdotcom/readest-lite:latest

v8.22.0 主要功能

上游 v0.12.7 / v0.12.8 适配移植

  • ReadEra 注释导入(上游 #6032):新增 POST /api/readera-import + ImportAnnotationsDialog 入口
  • Notion 笔记同步(上游 #5949):新增 NotionSettings + 代理路由 /api/notion/[...path] + /api/notion/sync-all + NotionForm 组件
  • 带登录的网页小说导入(上游 #6119):新增 POST /api/novel/proxy + ImportNovelDialog 高级选项(Cookie + 自定义请求头)

修复 v8.21 用户反馈

  • 分组管理点击没反应:GroupManagementModal 改用 createPortal 渲染到 document.body,避免 Dropdown 关闭时 unmount
  • 有声书点击闪退:/player page 加 <Suspense> 包裹 useSearchParams(Next.js 16 要求)
  • 创建用户无所属用户组选项:role select 永远显示;普通 admin 时 disabled;加提示文本
  • AdminFileTransfer 用户列表可搜索:改用 <input list="..."> + <datalist>,源/目标用户都可搜索

翻译

  • 新增 32 个简体中文键 + 48 个 en 键
  • 覆盖:有声书 / 角色 / 文件管理 / 分组 / ReadEra / Notion / 网页小说

升级方法

docker pull ghcr.io/cshdotcom/readest-lite:8.22.1
docker compose down && docker compose up -d

Release v8.21.1

Choose a tag to compare

@cshdotcom cshdotcom released this 10 Sep 10:17

v8.21.1 — 修复版

Fixed

  • ViewMenu.tsx 使用了 react-icons/md 中不存在的 MdFolderManage 图标,CI 构建失败。改为 MdCreateNewFolder。

v8.21.0 包含的功能(在 v8.21.1 中可用)

回收站批量选择

  • 每行 checkbox + selectedIds state
  • 工具栏:恢复选中 / 删除选中 / 取消选择
  • Modal 顶部:全选 + 批量恢复 + 批量删除(带选中数)
  • 批量删除前 confirm() 二次确认

管理员跨用户文件管理

  • /api/storage/list 支持 ?userId=<id> 与 ?allUsers=1
  • 新增 POST /api/storage/move 与 POST /api/storage/copy 批量移动/复制到目标用户
  • /api/storage/delete 支持 ?userId=<id> + ?purge=true
  • AdminFileTransfer 组件,集成到用户中心(仅 admin/super_admin 可见):
    • 用户下拉(默认「所有用户」)+ 文件名搜索 + 刷新
    • 表格列表(粘性表头 + max 400px 滚动)
    • 全选/反选 + 目标用户 + 移动/复制/回收/彻底删除 + 二次确认

分组管理(书库三点菜单底部)

  • 新增 Prisma 模型 BookGroup(唯一约束 userId+name + sortOrder)
  • 新增 GET/POST /api/book-groups 与 PUT/DELETE /api/book-groups/[id]
  • 删除分组同步清空 Book.groupName,重命名时同步更新
  • GroupManagementModal 组件:
    • 顶部「新分组名称」+「添加」按钮(回车提交)
    • 中部搜索框(按名称实时过滤)
    • 每行:上下移排序 + 编辑按钮 + 删除按钮
    • 行内编辑(回车保存 / Esc 取消)+ 删除前确认
    • 列表可垂直滚动(max 360px),分组多时不溢出

中文翻译补全

  • 新增 49 个简体中文键 + 75 个 en 键
  • 覆盖:分组管理 / 回收站批量 / 跨用户文件管理 / 权限错误

镜像

  • ghcr.io/cshdotcom/readest-lite:8.21.1
  • ghcr.io/cshdotcom/readest-lite:8.21
  • ghcr.io/cshdotcom/readest-lite:latest
  • ghcr.io/cshdotcom/readest-lite:sha-ccaf36b

升级方法

docker pull ghcr.io/cshdotcom/readest-lite:8.21.1
docker compose down && docker compose up -d

Readest Lite v8.19.8 — 角色选择 + SVG 头像

Choose a tag to compare

@cshdotcom cshdotcom released this 07 Sep 10:15

Readest Lite v8.19.8 — 角色选择修复 + SVG 头像修复

🐛 修复

1. 管理员无法选择角色创建用户

根因:canChangeRole 要求 user !== null,但创建用户时 user === null。
修复:允许创建和编辑时都能选择角色。

2. SVG 头像仍被拒绝

根因:isValidAvatarUrl 已移除 SVG 限制,但服务端错误消息仍说 "cannot be SVG"。
修复:更新所有错误消息和前端提示,明确接受 SVG。

3. 前端功能未生效的说明

用户运行的 Docker 镜像是旧版。升级到 v8.19.8 后所有功能生效:

  • ✅ 头像显示(UserAvatar 组件)
  • ✅ 超级管理员金色标识 + 管理员蓝色标识
  • ✅ 用户详情查看(仅管理员可见 chevron 按钮)
  • ✅ 分组管理(SelectModeActions「更多」下拉菜单)
  • ✅ 每本书上传按钮(BookItem 云按钮)
  • ✅ 操作日志 + 回滚(3 个 API 端点)
  • ✅ 阅读统计同步(statsSync.ts)
  • ✅ 有声书页面(/player/page.tsx)

📦 升级方式

docker compose pull && docker compose up -d

必须硬刷新(Ctrl+Shift+R)清除旧缓存。