Repository navigation
Conversation
- Added a `selection` option to `LanguagesModal` that hands the picked languages to the caller instead of saving a settings preference, with `multiple: false` for a single pick and `noneLabel` for an explicit "no language" choice - Added an `exclude` option to leave pseudo-languages out of the list - Kept every existing call site unchanged
…ion to `BackgroundImagePlaceholderDiv` - Added a `compact` option to `MultiStateButton` for narrower, lower buttons sized to their labels, for a toolbar - Added a `position` option to `BackgroundImagePlaceholderDiv` that sets where the image sits in its frame
- Added the Airing Schedule utility, with month, week and agenda views of `GET AiringSchedule/Calendar`, under the utilities menu - Put the refresh, scope and channel toggles in a toolbar, the view switcher and the period navigation beside it, and the period in the title, sliding in the direction of travel - Moved the channel filter, airing kind and provider behind a settings gear, kept with the last view for the session - Kept the month and week grids while they load, with skeletons in each day, and drew only the agenda rows in view - Refetched the airings on the `airing` feed's sweeps, marked what is on air now and which episodes have local files, and let debug builds shift the schedule's clock
- Added a season view, now the default, listing a season's anime in the server's sections with their next new episode and a countdown, as cards in one to three columns drawn only while in view - Picked the season from a slider kept in view while scrolling, and browsed every season by year from it, in place of a separate archive view - Returned to the slider, or to where you were, after picking a season or closing the browser, and kept the slider pinned while the browser opens - Showed skeleton cards while a season or the browser loads, and refetched the season's anime every few minutes and on the `airing` feed's sweeps - Added the season view's oldest year to the airing schedule's settings modal, saved to the user's WebUI settings once typing pauses
- Added an `Airing Schedule` settings page with general options, the "Refresh Anime Airing Soon" window, airing preferences, channel visibility, "Studio & Genre Sources", the provider priority and a section per provider - Kept the page's changes in a draft sent by the settings page's Save with the core settings, the service's own options as a JSON patch on its configuration - Set each provider's kinds, sweep interval and plugin configuration, and showed its icon and, when it differs, its plugin's name - Added channel search, aliases, merges and a duplicate check, the preferred channels and tracks, and the season detail sources with `OrderList` and `TextSourcesModal`
- Switched the upcoming anime widget from `Dashboard/AniDBCalendar` to `GET /api/v3/AiringSchedule/Calendar`, without reruns, and removed the unused `useDashboardCalendarQuery` - Laid the widget out as a timeline from 12 hours ago with a "You Are Here" mark, one card per episode and day with its channel and provider icon - Added a link from the widget's header to the airing schedule - Added dashboard options for the widget's days ahead and air times, kept in the WebUI settings
- Added `SequenceNumber` and `IsResolved` to the airing, and `includeUnresolved` to the airing reads - Labelled an unresolved airing `Ep N` from its `Number`, with a muted "Not on AniDB yet" hint in the entries, cards and the dashboard widget - Linked an unresolved airing to its series rather than an episode, and showed no local files for it
- Added a "Show Recently Aired" switch and its hours, 1 to 24, to the airing schedule settings modal, saved in `WebUI_Settings.airingSchedule.recentlyAired` - Read the current and previous seasons' sections with `at` that many hours back, rounded down to 15 minutes, so a card keeps an episode that aired since - Kept a season's cards while the next 15 minute step is read, which moves them on - Showed how long ago a card's episode aired, by the clock, in place of "Just aired"
- Split the settings modal into General and Sections tabs - Added a draggable section list with an inline editor for the title, anime types, continuing and half length, saved as you edit to `airingSchedule.sections` - The season view always reads its sections by `POST`, with the saved layout or `null` for the server default, and hides the empty ones - Dropped the section `ID`; sections are keyed by their place in the layout
- Added an "Episode Types" multi-select to the General tab, saved to `airingSchedule.episodeTypes`, `null` for every type - Sent the types as `episodeType` on the season sections read and as `type` on the calendar read
- Read `Season` and `Season/ByYear` by POST with the stored layout, which joined their query keys - Showed the left-out hint only for a custom layout without a rest group
- Added a "Move to season…" button to the season cards for admins, opening a modal with season and year pickers, the season the anime's dates give when it was moved by hand, and "Reset to Computed", through `PUT`/`DELETE /api/v3/Series/AniDB/{anidbID}/StartSeason`
- Marked the cards whose start season was set by hand (`IsStartSeasonOverridden`)
- Added an admin-only "Start Season Overrides" section to the airing schedule settings: the count, CSV export and import (with the import's report and rejected lines), and the overrides with their titles and a remove button
- Refetched the season sections and the season lists after every change
This branch has not been deployed
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.
Why
The season view places each anime in the season its first regular episode aired in. That season comes from AniDB's dates, and sometimes it is wrong for a chart: a late-night premiere that falls a day before a season boundary, a show whose first episode went out at an event months early, or an anime with no dates yet. The core can now store a start season set by hand per AniDB anime. This PR lets admins set it from the season view and manage the overrides in the settings.
Where this sits
feat/start-season-overrides, againstmaster. It only adds to the season view and the airing schedule settings page that feat: add the Airing Schedule utility, read the dashboard's upcoming anime from it, and add its settings #1497 introduces, which is why it carries that PR's twelve commits for now.feat(airing-schedule): let admins override an anime's start season.GET Series/AniDB/{anidbID}/StartSeason:{ Year, Season, IsOverridden, Computed: { Year, Season } | null }PUTon the same path (admin) with{ Year, Season }(year 1900 to 9999), andDELETE(admin), which clears the overrideGET Series/AniDB/StartSeason/Overrides:[{ AnidbAnimeID, Title, Year, Season, CreatedAt, UpdatedAt, UserID }], whereTitleis the anime's preferred title, ornullwhen the server has no data for it or the user may not see itGET Series/AniDB/StartSeason/Overrides.csv(headerAnidbAnimeID,Year,Season), andPOSTto it (admin) with a multipartfile, answering{ Added, Updated, Unchanged, Rejected: [{ Line, Text, Reason }] }IsStartSeasonOverriddenon each anime ofGET AiringSchedule/Season/{year}/{season}/SectionsWhat
Season cards:
GET …/StartSeason), or on the viewed season when the anime has none.DELETE).PUT) is enabled only for a different season with a valid year. Both actions toast, close the modal, and refetch the season sections, the season lists (the slider's and the season browser's counts) and the override list, so a moved anime leaves the view right away.SeasonView), not one per card.Settings > Airing Schedule, a new admin-only Start Season Overrides section above Provider Priority:
start_season_overrides.csvfrom the server's export.DELETE).Titles come with the override list itself, so the list makes no request per row. An anime the server has no data for shows "Unknown anime".
Look first at:
src/components/Dialogs/StartSeasonModal.tsx,src/components/Settings/AiringScheduleSettings/StartSeasonOverrides.tsx,src/components/Utilities/AiringSchedule/SeasonCard.tsx, and the new queries and mutations at the end ofsrc/core/react-query/airing-schedule/queries.tsandmutations.ts. Types are insrc/core/types/api/airing-season.ts, pure helpers insrc/core/utilities/startSeason.ts.Feedback wanted
Testing
pnpm lint,pnpm tscheck,pnpm test(262 passed; new:tests/core/utilities/startSeason.test.tsfor the year range, the picker's starting season and the import summary line) andpnpm buildall pass. No dependency changes.master:GET …/Overrides), and Fall 2026 refetched from 34 to 33 anime. In Winter 2027 the card showed the marker, and its modal showed "Moved by hand. Its dates put it in Fall 2026." with Reset to Computed.start_season_overrides.csvwith the header and the two rows.Title("Unknown anime" fornull) was checked by reading the code.useCurrentUserQuery().data?.IsAdminlike the channel merges; the marker shows for everyone.