4.6 KiB
Changelog / 更新日志
All notable non-WebUI user-visible changes should be documented in this file, newest version on top. 本文件记录所有非 WebUI 的重要用户可见变更,最新版本在最上方。
The format loosely follows Keep a Changelog and can be adapted to the team's habits. 本文档参考了 Keep a Changelog 的思路,也可以根据团队习惯调整。
[Unreleased]
Added / 新增
-
API: per-user bookmarks —
GET/POST /api/books/:id/bookmarks(locator+percent snapshot with optional ≤500-char note; list ordered by percent) andPATCH/DELETE /api/bookmarks/:id; not-yours uniformly 404. Newbookmarkstable keyed like progress, cleaned up with the user (no cascade on book delete, same precedent). -
API:新增按用户隔离的书签——
GET/POST /api/books/:id/bookmarks(存当前 locator+percent,备注可选、≤500 字,列表按进度升序)与PATCH/DELETE /api/bookmarks/:id;不属于自己的一律 404。新bookmarks表与进度同款定位键,随用户删除而清(删书不级联,沿用既有先例)。 -
API: CBZ page indexing now skips macOS packaging junk (
__MACOSX/…and._*AppleDouble files), which used to land in the page list as ~163-byte black "pages";GET /api/books/:id/pagesadditionally returnschapters:[{title,start}]derived from the archive's folder structure (e.g. 第1話…), so per-folder comics expose their real organization. -
API:CBZ 页索引现会跳过 macOS 打包垃圾(
__MACOSX/…与._*资源叉文件),此前它们以 ~163 字节黑页混入页列表;GET /api/books/:id/pages新增chapters:[{title,start}],按压缩包内目录结构(如 第1話…)给出真实章节。 -
API: resumable chunked upload protocol for large files —
POST /api/libraries/:id/upload/init(fingerprint-derived deterministicuploadId, rejects totals overUPLOAD_MAX_MBwith413 too_large),PUT /api/uploads/:uid/parts/:index(parts ≤ 32MB),GET /api/uploads/:uid(received parts, for resume),POST /api/uploads/:uid/complete(assemble + atomic land, same path contract as single-POST upload). Sessions persist underBOOKS_DIR/.uploads/with 24h opportunistic sweep.UPLOAD_MAX_MBis now wired through both compose stacks/.env;.env.examplesets 2048 and dropsNGINX_CLIENT_MAX_BODY_SIZEto 32m (nginx only ever sees one chunk). -
API: 新增大文件可续传分片上传协议——
POST /api/libraries/:id/upload/init(按指纹派生确定性uploadId,总量超UPLOAD_MAX_MB返回413 too_large)、PUT /api/uploads/:uid/parts/:index(单片 ≤32MB)、GET /api/uploads/:uid(查询已传分片以续传)、POST /api/uploads/:uid/complete(拼接后原子落盘,返回与单发上传一致的path)。会话存于BOOKS_DIR/.uploads/,超 24h 顺手清理。UPLOAD_MAX_MB已接入两份 compose/.env;.env.example调至 2048 并将NGINX_CLIENT_MAX_BODY_SIZE降为 32m(nginx 只见单个分片)。
Changed / 变更
-
Scanner: an image-list-less archive (
.zip/.cbzwith no page images — video packs, document dumps) is now recorded asstate=error("no images in archive") instead of registering as an empty CBZ with a blank reader. -
扫描器:不含任何图片条目的
.zip/.cbz(视频包、文档包)现记录为state=error("no images in archive"),不再注册成空 CBZ 留下一个白板阅读器。 -
API: upload over
UPLOAD_MAX_MBnow returns413 too_largewith the limit in the message; previously the size abort was misreported as400 bad_request "multipart field 'file' required". -
API:超过
UPLOAD_MAX_MB的上传现在返回413 too_large并在消息中带上限额;此前体积超限被误报为400 bad_request "multipart field 'file' required"。 -
API:
POST /api/librariesnow takes only{name};root_pathis generated server-side asBOOKS_DIR/<sanitized name>(no client-supplied paths, validated at creation). -
API:
POST /api/libraries只需{name};root_path由服务端生成为BOOKS_DIR/<清洗后的库名>(不再接受客户端指定路径,创建时即校验)。 -
Repo structure conformed to
AGENTS.md:web/renamed tofrontend/; backend HTTP layer moved frominternal/apitocmd/webui/{api,handlers}(cmd/server→cmd/webui); README/CHANGELOGs relocated underdocs/(README_zh.mdadded as Chinese mirror); module-level.gitignores added (backend/,deploy/); stray rootlibrary/removed (book files live indeploy/api/storage/); debug binaries untracked. -
Docs:
docs/README.mdis now the English primary; previous Chinese README mirrored todocs/README_zh.md.