Chuck and Claude Opus 5.5
3f8edf5113
fix(logos): one hardened logo download path; shared, real HTTP headers ( #612 )
...
* fix(logos): harden the plugin logo download and share core HTTP headers
download_missing_logo / LogoDownloader.download_logo, the path the
scoreboard plugins use, read response.content with no size cap and wrote
straight to the final path, so a failed or corrupt download could be left
in place and cached as the logo. It now goes through fetch_logo: streamed
with a 10 MB cap, image/* only, decoded by Pillow, converted to RGBA once,
and moved into place atomically. A failure leaves no partial or temp file
and keeps any logo already on disk. LogoHelper._download_logo delegates to
the same code. Public signatures and return values are unchanged; saved
files are pixel-identical to before (RGBA, palette+tRNS, L+tRNS, LA, JPEG).
download_missing_logo reuses one downloader per thread instead of a new
Session per logo. Per thread rather than behind a lock: Session is not
documented thread-safe, and a lock would serialise every plugin's
downloads behind the slowest one.
Placeholders are written atomically, without the test_write.tmp probe.
The logo downloader and background data service now send the real
ChuckBuilds User-Agent from src.common.api_helper (USER_AGENT,
DEFAULT_HTTP_HEADERS) instead of a yourusername/contact@example.com
placeholder, and no longer hand-set Accept-Encoding: br (brotli is not
installed).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
* fix(http): drop APIHelper's hand-set brotli encoding; LogoHelper sends the real UA
APIHelper advertised `br` though brotli isn't installed, so a server that
honoured it would send a body requests can't decode. LogoHelper sent a bare
`LEDMatrix-Common/1.0`, the kind of User-Agent ESPN has been rejecting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-23 12:58:11 -04:00
..
2026-09-23 12:36:53 -04:00
2026-09-23 10:29:16 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 12:54:29 -04:00
2026-03-20 15:06:58 -04:00
2026-08-21 11:16:52 -04:00
2026-09-23 12:36:26 -04:00
2026-07-12 10:38:52 -04:00
2026-07-12 10:38:52 -04:00
2026-05-24 09:38:15 -04:00
2026-09-16 17:12:28 -04:00
2026-08-21 11:16:52 -04:00
2026-09-17 16:37:29 -04:00
2026-09-08 08:34:52 -04:00
2026-09-11 10:07:38 -04:00
2026-09-23 12:36:53 -04:00
2026-08-23 11:44:23 -04:00
2026-09-23 12:36:53 -04:00
2026-09-23 12:36:53 -04:00
2026-09-23 10:29:16 -04:00
2026-08-21 11:16:52 -04:00
2026-09-23 10:29:16 -04:00
2026-08-21 11:16:52 -04:00
2026-09-11 10:07:38 -04:00
2026-09-11 10:07:38 -04:00
2026-09-14 12:40:41 -04:00
2026-07-14 08:08:51 -04:00
2026-09-15 10:58:57 -04:00
2026-09-17 16:37:29 -04:00
2026-09-17 16:37:29 -04:00
2026-09-18 09:56:50 -04:00
2026-09-23 12:54:07 -04:00
2026-08-26 10:03:43 -04:00
2026-09-01 09:54:04 -04:00
2026-09-17 09:26:21 -04:00
2026-08-11 16:10:56 -04:00
2026-08-07 16:17:11 -04:00
2026-09-13 11:53:50 -04:00
2026-08-12 08:42:56 -04:00
2026-09-23 12:54:07 -04:00
2026-08-19 12:28:22 -04:00
2026-09-07 13:37:54 -04:00
2026-08-12 08:40:07 -04:00
2026-09-17 12:38:39 -04:00
2026-09-23 12:54:07 -04:00
2026-08-11 14:14:25 -04:00
2026-08-19 17:40:52 -04:00
2026-09-14 09:42:24 -04:00
2026-09-15 15:32:21 -04:00
2026-08-07 10:17:30 -04:00
2026-09-23 12:52:50 -04:00
2026-07-14 08:49:43 -04:00
2026-09-11 10:07:38 -04:00
2026-09-16 17:12:18 -04:00
2026-08-06 14:04:23 -04:00
2026-09-23 12:36:26 -04:00
2026-05-15 10:19:55 -04:00
2026-09-17 16:37:29 -04:00
2026-09-15 18:19:39 -04:00
2026-08-04 13:46:28 -04:00
2026-09-03 16:06:40 -04:00
2026-09-21 16:07:51 -04:00
2026-09-23 12:44:55 -04:00
2026-09-07 15:55:46 -04:00
2026-09-23 10:29:16 -04:00
2026-08-23 11:43:39 -04:00
2026-08-07 16:17:11 -04:00
2026-09-23 10:29:16 -04:00
2026-08-07 10:17:30 -04:00
2026-09-23 12:36:26 -04:00
2026-09-12 16:13:38 -04:00
2026-09-07 13:37:54 -04:00
2026-09-17 16:37:29 -04:00
2026-09-23 12:36:26 -04:00
2026-08-06 14:04:23 -04:00
2026-08-07 16:17:11 -04:00
2026-09-14 13:27:10 -04:00
2026-09-13 11:53:50 -04:00
2026-08-07 13:27:20 -04:00
2026-09-23 10:29:16 -04:00
2026-09-23 12:36:26 -04:00
2026-09-18 09:56:50 -04:00
2026-09-23 10:29:16 -04:00
2026-09-13 10:47:01 -04:00
2026-08-21 14:30:29 -04:00
2026-09-07 13:37:38 -04:00
2026-07-12 10:38:52 -04:00
2026-08-21 15:50:55 -04:00
2026-09-23 12:58:11 -04:00
2026-09-23 12:36:26 -04:00
2026-08-12 14:58:05 -04:00
2026-08-23 11:42:51 -04:00
2026-08-03 16:52:42 -04:00
2026-09-14 17:38:17 -04:00
2026-08-21 15:50:55 -04:00
2026-09-23 10:29:16 -04:00
2026-09-18 11:09:25 -04:00
2026-09-11 08:42:30 -04:00
2026-09-11 08:41:58 -04:00
2026-09-23 12:36:26 -04:00
2026-08-23 11:44:00 -04:00
2026-09-23 12:58:11 -04:00
2026-09-23 12:58:11 -04:00
2026-09-17 16:37:29 -04:00
2026-08-21 15:50:55 -04:00
2026-09-11 11:32:12 -04:00
2026-09-08 08:34:52 -04:00
2026-08-11 16:10:56 -04:00
2026-09-07 13:37:38 -04:00
2026-09-08 08:34:52 -04:00
2026-08-19 12:49:46 -04:00
2026-09-23 10:34:20 -04:00
2026-09-11 15:32:03 -04:00
2026-09-23 12:36:53 -04:00
2026-09-16 17:12:18 -04:00
2026-09-15 19:17:48 -04:00
2026-08-17 15:35:02 -04:00
2026-09-08 08:34:52 -04:00
2026-09-02 09:51:27 -04:00
2026-09-17 16:37:29 -04:00
2026-08-21 16:19:33 -04:00
2026-09-11 08:41:58 -04:00
2026-08-19 12:28:22 -04:00
2026-07-11 08:55:50 -04:00
2026-05-15 10:19:55 -04:00
2026-08-23 11:43:39 -04:00
2026-07-09 07:54:18 -04:00
2026-09-23 12:36:26 -04:00
2026-09-17 16:37:29 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 12:36:26 -04:00
2026-09-15 18:19:39 -04:00
2026-09-15 18:19:39 -04:00
2026-08-07 13:02:59 -04:00
2026-08-21 15:50:55 -04:00
2026-09-17 16:37:29 -04:00
2026-08-07 16:17:11 -04:00
2026-08-21 16:22:48 -04:00
2026-08-07 10:17:30 -04:00
2026-05-15 10:19:55 -04:00
2026-09-07 13:37:54 -04:00
2026-07-31 09:40:38 -04:00
2026-09-17 16:37:29 -04:00
2026-09-17 16:37:29 -04:00
2026-08-07 16:17:11 -04:00
2026-08-07 10:17:30 -04:00
2026-07-13 09:28:30 -04:00
2026-08-02 12:39:33 -04:00
2026-08-07 16:17:11 -04:00
2026-09-14 12:48:36 -04:00
2026-08-02 12:39:33 -04:00
2026-09-13 11:53:50 -04:00
2026-09-15 15:32:21 -04:00
2026-09-11 08:42:18 -04:00
2026-08-02 12:39:33 -04:00
2026-08-21 16:24:15 -04:00
2026-09-17 16:37:29 -04:00
2026-09-20 18:25:33 -04:00
2026-08-26 11:25:10 -04:00
2026-09-11 10:07:38 -04:00
2026-08-07 16:17:11 -04:00
2026-09-23 12:36:26 -04:00
2026-07-13 09:32:37 -04:00
2026-08-21 14:29:45 -04:00
2026-09-21 16:08:29 -04:00
2026-08-21 14:28:23 -04:00
2026-08-21 11:16:52 -04:00
2026-09-11 08:45:40 -04:00
2026-08-25 08:40:28 -04:00
2026-08-21 14:29:45 -04:00
2026-09-11 08:41:19 -04:00
2026-08-06 14:04:23 -04:00
2026-07-14 08:33:08 -04:00
2026-05-15 10:19:55 -04:00
2026-04-08 12:33:54 -04:00
2026-09-23 12:36:26 -04:00
2026-08-21 14:30:29 -04:00
2026-08-21 14:30:29 -04:00
2026-09-23 12:36:26 -04:00
2026-07-31 09:40:38 -04:00
2026-09-23 10:29:16 -04:00
2026-09-23 12:36:26 -04:00
2026-08-23 11:42:33 -04:00
2026-08-12 14:06:32 -04:00
2026-07-31 09:40:38 -04:00
2026-08-13 17:02:36 -04:00
2026-08-21 15:50:55 -04:00
2026-07-08 09:43:13 -04:00
2026-07-12 10:40:34 -04:00
2026-08-07 10:17:30 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 12:36:53 -04:00
2026-09-10 17:42:00 -04:00
2026-09-23 12:36:53 -04:00
2026-09-11 10:07:38 -04:00
2026-07-09 09:22:24 -04:00
2026-09-23 10:29:16 -04:00
2026-09-14 09:42:24 -04:00
2026-09-23 10:34:20 -04:00
2026-09-09 16:25:45 -04:00
2026-09-14 09:42:24 -04:00
2026-09-14 12:40:41 -04:00
2026-09-14 12:40:41 -04:00
2026-09-23 12:36:26 -04:00