Second beta for v0.14.0, cut from master. 13 PRs since beta.1.
Two additions here. One Mydia player can drive another over p2p, and duplicate files finally have an operator-reviewed cleanup path. The rest is fixes and layout work on the show and movie pages.
If you are coming from v0.13.2, read the beta.1 notes first. Its upgrade notes still apply in full and have not changed.
Remote control between players
- One player can discover, adopt and drive another over iroh. Mydia targets appear in the same picker as Chromecast and DLNA rather than in a second list. Picking a target that is already playing adopts that session instead of restarting the film, Push hands over the local position and tracks and only stops local playback once the target confirms, and Pull reads the target's exact position before stopping it. A banner shows what other paired players are playing, holding at most three live connections and dropping all of them when the app backgrounds. Answering commands is a settings toggle, on by default, re-checked per request rather than at startup (#524)
- Devices report their iroh node id to the server, and the GraphQL
devicesquery is both the picker list and the target's access-control list, so the two cannot drift apart. Registration from a revoked device is refused (#524) - Several provider disposal races found by running this through the e2e harness are fixed, covering the cast session, the connection notifier, auth state and p2p status. One was reachable on app teardown shortly after pairing (#524, #526)
- Cached session reads are refreshed after pairing instead of being served stale (#527)
- The remote-control end-to-end test is registered but quarantined. Every piece has unit coverage and the integration layer does not run yet. That is a known gap, written down in the test file (#526, #528)
Duplicate cleanup
- New admin page under Settings > Duplicates for items holding more than one active file. It is mostly a refusal engine: on a real library, 518 episodes and 39 movies hold multiple files, but most are misidentification, one file registered twice, or bonus features rather than genuine duplicates. Anything it cannot prove is the same content is surfaced as needing attention rather than acted on, with the first failing check given as the reason (#520)
- Files rank against the item's quality profile, falling back to resolution, then bitrate, then size, then codec. Codec ranks last on purpose, since a low-bitrate av1 re-encode is not an upgrade over a high-bitrate source (#520)
- Trashing goes through the normal trash path, so files move to
.mydia-trashunder the configured retention (default 30 days) rather than being deleted. The plan is rebuilt from the database at confirm time and any id that is no longer a current loser of an eligible group is dropped (#520) - Keep and Trash are one control per file, and Keep choices survive a trash run (#521, #522)
- Nothing runs on a schedule, and there is no new table (#520)
TV and movies
- Only the season orderings TVDB actually publishes for a show are offered, instead of the full list (#517)
- A movie's files sit above the discovery rails on its detail page (#518)
- Episode rows align on a fixed-track grid, season header actions collapse into one toolbar, and the status chip is back to a 16px dot with its label kept in the accessibility tree on small screens (#516, #519)
Web
- Real favicons for the Phoenix app and the marketing site, replacing a broken one and an Astro placeholder (#515)
- The in-app release notes at
/changelogcarry the real 0.14.0 entry, covering all 73 PRs since v0.13.2 rather than the one branch that happened to be in flight when the file was created. Notes for a 0.13.3 that was never cut are removed, so the upgrade banner stops offering them (#529)
Upgrade notes
One new migration since beta.1, adding the device node id column (#524). Everything in the beta.1 upgrade notes still applies if you are coming from v0.13.2 or earlier.
Docker is ghcr.io/getmydia/mydia:0.14.0-beta.2, or :beta. Add -pg for the Postgres image.
Full Changelog: v0.14.0-beta.1...v0.14.0-beta.2