Root-cause fix: the sidebar entry now actually reaches the browser
v1.5.19 and v1.5.20 were fixing the wrong layer. The injection code was fine — the script never reached the browser in the first place.
The bug: SidebarInjectionMiddleware.IsIndexHtmlRequest only matched requests whose URL contained the literal string index.html, but Jellyfin web is typically served at /web/ with no filename. Every shell-page load bypassed the middleware and no script ever got injected.
The fix: the middleware now intercepts any plausible HTML GET (anything that isn't an obvious static asset, /api/, /Plugins/, /emby/, /Videos/, etc.) and gates on Content-Type: text/html before rewriting.
While I was in there I also fixed two adjacent bugs:
- Compressed responses (gzip / br) are now passed through untouched instead of being read through a UTF-8
StreamReaderand mangled into garbage. - Content-Length is cleared instead of pre-set, which was triggering a Kestrel write race on some configurations.