github Kyonew/DVinyl v3.2.1
v3.2.1 - TMDB Scoping, Open Library Editions & Navigation Fixes

3 hours ago

Important

⚠️ As always, export your database before upgrading. Safety first!

Hi everyone! Here is DVinyl v3.2.1, a focused patch release following up on 3.2.0 to resolve a few edge cases reported by the community and ensure seamless imports and navigation.

A big thank you to @teaboyteaboy and @guillaumegay13 for their contributions to this release!


🎬 Movies & TV Shows: TMDB ID Scoping

TMDB reuses numeric IDs across media types (e.g. movie 155 is The Dark Knight, while TV show 155 is 3rd Rock from the Sun). Previously, the duplicate checks and season holder lookup matched on tmdb_id alone, which could cause a newly added TV show to be flagged as a duplicate of an owned movie, with its seasons filed under that movie.

  • Scoped duplicate checks: tmdb_id is now always checked alongside media_type.
  • Automatic legacy backfill: When starting up, a database migration automatically backfills any existing DVD/movie items missing a media_type field with 'movie', ensuring historical items deduplicate properly without conflicts.
  • Season holder safety: Adding seasons is strictly scoped to media_type: 'tv'.

Reported and fixed by @teaboyteaboy, with legacy backfill on boot.


📚 Books: Open Library Editions on Goodreads Import

The Goodreads RSS import looks up ISBNs on Open Library to automatically populate the publisher, language and format guessing (manga/comics). Open Library recently deprecated and removed its legacy /api/books?jscmd=data endpoint (returning 404s without language data).

  • Editions API: DVinyl now queries the modern /isbn/{isbn}.json endpoint, correctly retrieving edition publishers and MARC language codes (eng, fre, spa, etc.).
  • Resilient parsing: Handles both string and structured publisher entries, direct language codes, and cleanly treats unknown ISBNs as "no data" rather than logged network errors.

Identified and fixed by @guillaumegay13.


🧭 Navigation & Shortcuts Fix

Under specific circumstances (such as disabled modules, manual password resets, or fresh collections), evaluating navbar shortcuts could throw a TypeError: Cannot read properties of undefined (reading 'music') in the header template.

  • header.ejs and settingsMiddleware now safely guard against missing or uninitialized module dictionaries (whether stored as Mongoose Maps or plain JavaScript objects), preventing header render crashes.

Reported by @oliverjunker.


🧊 ZimaOS / CasaOS App Store

DVinyl is now officially installable on ZimaOS and CasaOS through the community TwoBytes Store! Check out the updated Getting started guide or README for one-click installation instructions.


🛠️ Verification & Test Suite

This release adds comprehensive automated tests covering Open Library edition parsing, TMDB media scoping, settings fallbacks, and instance backup guardrails.


Thank you so much for contributing to the app, whether with your ideas, bug reports, or pull requests. Thanks <3

Don't miss a new DVinyl release

NewReleases is sending notifications on new releases.