persist credits; new audio tags; sanitize tags; docker dev#140
Closed
sevenrats wants to merge 2 commits intopennydreadful:developfrom
Closed
persist credits; new audio tags; sanitize tags; docker dev#140sevenrats wants to merge 2 commits intopennydreadful:developfrom
sevenrats wants to merge 2 commits intopennydreadful:developfrom
Conversation
Author
|
closing in favor of upstream |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Persist Credits
Before: Editions only stored author info. Non-author contributors like narrators and illustrators from the BookInfo API were discarded.
Now: Editions have a
Creditslist that captures non-author contributors (narrator, illustrator, editor, etc.) from the BookInfo API. These are stored as JSON in the database and exposed through the API.Audio tag writing — narrator/illustrator
Before: Audio files had no narrator or illustrator tags.
Now: Narrator and illustrator are read from edition credits and written to all 5 tag formats (ID3v2 TXXX frames, Xiph fields, APE items, ASF descriptors, Apple dash boxes). The Diff method also tracks changes to these fields.
Audio tag writing — cover art atom ordering fix
Before: Cover art was written in the middle of tag assignment, before format-specific tags. In M4B files this put the large
covratom beforeaART,trkn,©day, and all----dash boxes. Some parsers (ATL) stop reading ilst children after a large covr atom and miss everything after it.Now: Cover art is written last, after all format-specific tags. The
covratom lands at the end of the ilst container so all metadata atoms precede it.Audio tag writing — null byte sanitization
Before: String values from the database were written to tags as-is. If a field contained null bytes or other control characters (e.g. Dungeon Crawler Carl's description), they were embedded into the file, corrupting the tag.
Now: All string fields are stripped of null bytes and C0 control characters (except tab/newline/CR) before writing. Empty results become null so nothing is written.
Docker dev build
Before: No way to build a Docker image without host tools. The existing Dockerfile expected pre-built artifacts.
Now:
docker/Dockerfile.devis a multi-stage build (dotnet SDK → node → alpine runtime) that compiles everything inside Docker. Copies.editorconfigandLogo/which are required for the build but live outsidesrc/.