Add Arr Coming Soon app - #678
Draft
nsluke wants to merge 4 commits into
Draft
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueComment |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What your self-hosted media stack drops next: tonight's episodes from Sonarr, or this week's releases from Radarr.
The tronbyt crowd overlaps heavily with the *arr crowd — Jellyfin, Plex and Immich apps are among the most active recent additions — but there are no Sonarr or Radarr apps in the catalog at all.
Screenshots
Data
Your own instance, your own API key, over your LAN —
/api/v3/calendaron either service with theX-Api-Keyheader. Nothing leaves your network.The v3 contract was verified against both projects' published OpenAPI specs, fetched live from GitHub rather than recalled. What that turned up:
title,series.titleandairDateUtc, and Radarr'stitle,inCinemas,digitalReleaseandphysicalReleaseare all nullable. Every one is handled.includeSeriesdefaults to false on Sonarr — without passing it explicitly there is no series title to show at all.yyyy-mm-ddprefix unconverted. Sonarr'sairDateUtcis a real instant and is converted through your timezone — a01:00Zair time is tonight in the US, and that boundary is exercised by a fixture with a 21:00 ET episode.Empirical pixlet probing also found that
time.parse_timeaborts on regex-passing but out-of-range values (hour 99, month 13, Feb 30, second 61) whiletime.time()quietly normalises them. That exposed two latent crash paths, both fixed: every timestamp is range-checked before caching, and the JSON decode uses a default so an array-shaped non-JSON body can't abort.Verification
17 states: tonight, this week, both Radarr variants, all-caught-up, the
days=1clamp, a 401 auth card, HTTP 500, an HTML body, and five hostile-payload shapes including out-of-range timestamps and null titles.pixlet checkpasses under the repo's pinned v0.50.1. Default render 10 ms, zero network — the unconfigured demo card uses fictional titles and is labelled DEMO.Adversarial review caught three real display bugs, all reproduced first: the
hasFilegreen pip was drawn on top of the air time (12:00AMrendered as2:00AM); the TONIGHT panel filled with episodes that had already aired that morning, pushing tonight's actual episode behind the "+N more" counter; and an unreachable server with an aged-out cache rendered a confident "ALL CAUGHT UP" instead of "can't connect".Caveats
urlbasesub-paths (the base is rstrip'd and the path appended, but unproven), and self-signed HTTPS (pixlet will refuse it).Arr Coming Soon—pixlet checkenforces title case and a 17-character limit, so "Coming Soon for Sonarr/Radarr" doesn't fit. The full name lives in the description.🤖 Generated with Claude Code
64x64 square panel support
The square holds twice the list rather than the wide layout with room underneath: under the same header and rule, its 56 body rows divide into four 14px slots, so
8 + 4x14 = 64fills the panel to its last pixel row and four items show instead of two. Header, rule, row design, fonts, service accent colours and the hasFile pip are pixel-identical to wide; what changes is the row count and the "+N" chip now counting from the fourth row. Status cards (CAN'T CONNECT / CHECK API KEY / ALL CAUGHT UP) get the whole body box so they centre instead of hugging the top edge.The wide layout is untouched. An additive
is_square()branch oncanvas.size()(h * 2 > w + 16, matching the convention in #655/#666 — shape, never size, so a 2x wide panel is never mistaken for a square one). Wide output was rendered before and after the port and compared byte for byte: 264 comparisons across configs at both 64x32 and 128x64, zero differences, with a deliberately broken copy used as a negative control to prove the comparison actually discriminates.pixlet checkgreen on the pinned v0.50.1. No manifest change — upstream has nosupports64x64field.