Repository navigation
Feature: Up Next widget for Sonarr, Radarr and Lidarr - #554
Merged
Merged
Conversation
Lists the next episodes, films and albums from up to six apps, soonest first, with deep links to each item. Sonarr series records are fetched per series and cached, so the calendar reply stays small. Include Unmonitored is cosmetic, so changing it keeps every app key.
Up Next shows three agenda rows, each a day block, a kind bar and a title. Downloads shows an arrow dropping into a box.
4 of 5 tasks
One highlight moves between rows on a fine pointer, reusing the shared fluid hover. Pressing a row deepens it, and on touch the press alone shows. The moving pill now measures in the page's own units, so it stays on its row inside a zoomed widget page. initFluidHover takes an optional list of containers and items.
Keep date-only films and albums until their day ends at UTC-12 and sort rows in the reader's local time. Keep only short strings and bounded values in the Sonarr series cache. Skip rows whose runtime or date is out of range instead of failing every app. Name a 'Timed out' error a timeout. Report 90 days only when every longer read succeeded. Keep daily-show episode names that are not dates. Show the failure caption in the empty state, use a neutral line when apps fail differently and read each app's problem aloud. Redraw rows only when their content changes and return focus to the same row. Pass the page zoom to placePill instead of measuring it, so unzoomed lists with fractional widths place the pill exactly.
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.
Summary
upnextwidget (small, medium, large): the next episodes, films and albums from up to six Sonarr, Radarr and Lidarr apps, soonest first. Each row has a day and time column, a kind bar and the title over its detail line. Small and medium show 3 rows, large 7; medium and large add the episode name./api/v3/calendar(Sonarr, Radarr) and/api/v1/calendar?includeArtist=true(Lidarr) withX-Api-Key, 14 days ahead, then 90 days when fewer than 8 items come back. A failed longer read keeps the shorter one and its 14 days.includeSeriesand fetch/api/v3/series/{id}only for the series that can reach the list, cached per server for 6 hours, bounded to 500 entries of strings capped at 300 characters and validated runtime and series type.upnext-items.jswith no I/O: daily shows drop the season and date-like names, runtimes past 24 hours fall back, rows past the Date range are skipped, consecutive episodes at one time merge into a range, premieres and finales are marked, Radarr gives one row per chosen release type, items listed by two apps show once.Timed outerror is a timeout. The widget fails only when every app fails. Empty state names the window and opens the app's calendar./series/{slug},/movie/{slug}and/album/{id}throughserviceLink; each row carries its spoken text in a visually hidden span.unmonitored,releasesandhrefas cosmetic, so changing them keeps every app's API key.CanvasTextand Today inHighlight. The shared loading placeholders now paint in forced colors.initFluidHovertakes an optional list with an optionalzoomfunction, andplacePilltakes the page zoom so the pill stays on its row in a zoomed widget page.calendarglyph with a newupnexticon, and redraw thedownloadsicon as an arrow into a box.Testing
All green, including the Docker build, image scan and e2e. Added 34 tests for the readers, series cache bounds, time zones, out-of-range rows, timeouts, partial failure, local sort, API key retention and the pill.
Changelog
Added
Fixed
Checklist