From af587b1a417be99b0eb5fa67415d2dcb662b7710 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Thu, 18 Jun 2026 22:12:59 +0800 Subject: [PATCH] fix(metadata): parse FB2 series from title-info sequence (#4646) (#4649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FB2 stores series info as `` inside ``, but the foliate-js FB2 parser never read it, so `belongsTo.series` was always empty and the series name/index never surfaced in the library or book details. Refresh-metadata and re-import didn't help since they share the same parser path. Bumps the foliate-js submodule to pull in the `` parsing (readest/foliate-js#28) and adds a regression test + fixture. Co-authored-by: Claude Opus 4.8 (1M context) --- .../document/series-metadata.test.ts | 19 ++++++++++ .../fixtures/data/sample-metadata.fb2 | 38 +++++++++++++++++++ packages/foliate-js | 2 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 apps/readest-app/src/__tests__/fixtures/data/sample-metadata.fb2 diff --git a/apps/readest-app/src/__tests__/document/series-metadata.test.ts b/apps/readest-app/src/__tests__/document/series-metadata.test.ts index e0e61628..b3308d43 100644 --- a/apps/readest-app/src/__tests__/document/series-metadata.test.ts +++ b/apps/readest-app/src/__tests__/document/series-metadata.test.ts @@ -77,6 +77,25 @@ describe('Calibre series metadata', () => { }); }); + describe('FB2 (title-info sequence)', () => { + let book: BookDoc; + + beforeAll(async () => { + book = await loadFixture('sample-metadata.fb2', 'application/x-fictionbook+xml', 'FB2'); + }); + + it('extracts series name and position from the sequence element', () => { + const series = getSeries(book); + expect(series).toBeTruthy(); + expect(series!.name).toBe('Metadata Series'); + expect(series!.position).toBe('3'); + }); + + it('preserves the title', () => { + expect(book.metadata.title).toBe('FB2 Metadata'); + }); + }); + describe('CBZ (ComicInfo.xml + ComicBookInfo)', () => { let book: BookDoc; diff --git a/apps/readest-app/src/__tests__/fixtures/data/sample-metadata.fb2 b/apps/readest-app/src/__tests__/fixtures/data/sample-metadata.fb2 new file mode 100644 index 00000000..d139f8de --- /dev/null +++ b/apps/readest-app/src/__tests__/fixtures/data/sample-metadata.fb2 @@ -0,0 +1,38 @@ + + + + + sf_fantasy + + Jane + Doe + + FB2 Metadata + +

A short annotation.

+
+ en + +
+ + + + + + 18 October 2023 + 43AC9A08-92D4-432C-B908-FCE4992205CC + 1.0 + +
+ + + <p>FB2 Metadata</p> + +
+ + <p>Chapter 1</p> + +

Hello world.

+
+ +
diff --git a/packages/foliate-js b/packages/foliate-js index f5180159..d5e197c3 160000 --- a/packages/foliate-js +++ b/packages/foliate-js @@ -1 +1 @@ -Subproject commit f518015950087e07692d9a11188db308403f943b +Subproject commit d5e197c3de5f457ddc0e6b93b7932ebabdcb825b