16 lines
5.2 KiB
JSON
16 lines
5.2 KiB
JSON
{
|
|
"version": "0.12.0",
|
|
"notes": "\nJellyTau works against Jellyfin 12. Jellyfin 12.0 shipped on 2026-09-08 and\nturns off, by default, the two ways every earlier JellyTau build identified\nitself to a server — including on servers that were upgraded rather than freshly\ninstalled. An app that was not changed for it stops signing in the day the server\nupdates. This release is changed for it, and still works against 10.11, so the\napp can be updated first and the server whenever it suits.\n\nThere is no Jellyfin 11. The project dropped the leading `10` from its version\nscheme: what would have been 10.12.0 shipped as 12.0. Anything that compares\nJellyfin version numbers needed to learn that, and this app now has.\n\n### ✨ Changes\n\n- **Signing in survives a server upgrade to Jellyfin 12.** The server used to be\n told who was asking through a header and a URL parameter that 12.0 disables by\n default — a migration disables them on upgraded servers too, so nothing in an\n admin's hands changes the outcome. The replacement spellings are accepted by\n 10.11 and 12 alike, so this is one way of identifying the app that works\n everywhere, not a switch between two. The URL half matters more than it\n sounds: video and audio are streamed by the device's media player, which cannot\n send headers at all, so the URL parameter is the only way playback can\n authenticate. A test now refuses any request built with the old spellings,\n because the failure is silent right up until a server upgrades.\n (UR-085 → DR-287)\n\n- **Browsing a library returns the same things on both server versions.** 12.0\n changed what a filtered library listing means — asked for the films in a\n library, 10.11 returned the folder's immediate contents and 12.0 returns\n everything beneath it, and nothing in the reply says which rule applied. The\n app now says which it wants, so both servers answer the same way, and the\n answer is the one it always had. (UR-085 → DR-288)\n\n- **The app knows what server it is talking to, once, and adapts.** The server\n version was already fetched at sign-in and then thrown away. It is now\n resolved into a small set of named capabilities that every version-dependent\n decision reads from, rather than the version number being compared wherever\n somebody needed it — which is unreadable by the second occurrence and cannot\n express a backport. A server newer than this build is treated as the newest\n one it knows and keeps working; refusing it would make every release expire\n the moment the server updated. Only a server older than 10.10 is refused, and\n the sign-in screen says so and names the minimum. (UR-085 → IR-035, DR-280,\n DR-286)\n\n- **The cached library re-fetches itself after a server upgrade.** Nothing had\n recorded which server version wrote the cached catalog, so a server upgraded\n underneath the app kept serving rows read under the old rules. The generation\n is now recorded, and a change clears the cache so it fills back under the new\n one. The first launch of this version records and clears nothing — an\n existing install is not charged a full re-download to defend against an\n upgrade that has not happened. (UR-085 → DR-284)\n\n### 🛠 Development\n\n- **Every route the app speaks lives in one place.** Fifty-seven inline URL\n strings across the server adapter became one module of route functions, each\n taking the resolved capabilities. Both shapes of the item routes Jellyfin has\n deprecated are built and tested, though nothing selects the second yet — the\n family still works on 12.0, and 12.0's written policy that unlisted endpoints\n may go in any major release is why having the alternative ready costs less\n than needing it. (UR-085 → DR-279, DR-282)\n\n- **The server adapter is tested against a server.** There was no HTTP mocking\n in the Rust tree at all: every test of the adapter asserted on a URL string it\n had built, and none exercised a reply. A fake Jellyfin now answers over real\n HTTP and reports whichever version a test as",
|
|
"pub_date": "2026-09-19T16:27:52Z",
|
|
"platforms": {
|
|
"linux-x86_64": {
|
|
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSczV4N1FMRVFQaWw2VlJHWnR6Y21ZYjZRNkNqN3g3RFFQYmJPUnJEZUN0bzMySFB0YWo5b2hWY3E3aWFPY2FZOWMyQXBpcCswTzlmVDlWcFF5TCtWZ1hvZ3cvWnlWUmdZPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg5ODMwMjU0CWZpbGU6SmVsbHlUYXVfMC4xMi4wX2FtZDY0LkFwcEltYWdlCjJqVW5BVGJlZTZmKzE2MU1GSTRVbU5lYnBHbkNlNXdFUTRGMWxFcU8zZXh3aHYwQ0hXL1pQVlBUYUdPTjF4bG1NMWs2ZlUySmc0S1hEdGZCT01OUkRBPT0K",
|
|
"url": "https://gitea.tourolle.paris/dtourolle/jellytau/releases/download/v0.12.0/JellyTau_0.12.0_amd64.AppImage"
|
|
},
|
|
"windows-x86_64": {
|
|
"signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVSczV4N1FMRVFQaXQ2ZkhqbjVhR0pJVkNRdzZKSXdHOXo5bDM1TGdlRldGMG9XVkZ6cHNieXRqU2I1WDJmSTcrcWR6aXVzajFobFMzelc3SnRIeVp0K29BelFaSWxLRlEwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzg5ODMxOTc1CWZpbGU6SmVsbHlUYXVfMC4xMi4wX3g2NC1zZXR1cC5leGUKM09BVEdCSWNSNG5jcnd6MHpKNExVa2gxczJnelVFS05ROTZIU2xuSWJVWmJtV2RCcmZzUHBDaGdtd25nNWpwQVl6eE5ESkFBUnl3WFhIeWJvK3BuQVE9PQo=",
|
|
"url": "https://gitea.tourolle.paris/dtourolle/jellytau/releases/download/v0.12.0/JellyTau_0.12.0_x64-setup.exe"
|
|
}
|
|
}
|
|
}
|