Integrate MyAnimeList tracking and enhance episode reporting - #21
Merged
Conversation
Live TV already told the player what it was handing over — `type: 'live'` — and the player never read it. Whether a stream was live was guessed from its duration alone, and plenty of live HLS carries a DVR window and reports a perfectly finite one. Those channels were treated as files: a scrub bar over something unscrubbable, frame-preview extraction against an endless stream, and the live edge read as the end of the video. So the declared type decides, and it is known before the first frame rather than after it, because a channel that is down when you open it fails during initialize() and that is exactly the path that needs to know. Reconnection is the other half. A film either plays or is broken, so four retries a session is generous; a channel drops because a segment was late or a CDN failed over, and the only right answer is to open it again. Four in a two-hour evening meant the player gave up for good on something that was working seconds later. A broadcast now reconnects with a backoff, on errors a file would call fatal — a 403 on a live edge is usually a rotated token, and the next playlist fetch has the current one. Seeking is refused outright. The double-tap gesture reached the same seek as the scrub bar, and a tap landing outside the DVR window stalls the stream with no way back but leaving the channel. Channels also carry the headers their origin insists on, all the way to the player and into the pinned-card cache — a header-gated channel used to work once and 403 forever after being favourited.
It was reachable only through Profile, seven rows down a settings list. That is a fine place for a preference and the wrong place for a thousand channels: Live TV is content, and it belongs where the content is. Home grows a rail of channel logos above the catalogue sections. A rail rather than a link, because a channel is picked in a second and watched immediately — tapping a logo plays it, and the header still opens the full page for folders and search. Logo-forward and square, since a channel is recognised by its mark long before its name is read. It loads itself and renders nothing until it has channels, so a backend with no line-up — or no network — leaves Home exactly as it was rather than showing an empty shelf. Live TV also remains available as a bottom-bar tab; it has been in the registry all along, just not on by default.
AppColors.primary is a getter — the accent is a user setting — so it cannot appear in a constant expression, which is exactly what app_colors.dart says at the top. The LIVE dot's decoration claimed const and failed to compile.
The screen was a search box, a folder grid and a paged wall of logos. It told you a thousand channels exist and nothing about any of them, and the guide the backend had started returning was not read at all. Channels now carry their listing. A card shows what is on now, how far through it is, and what follows; a long press opens the channel with its schedule for the day. About 38% of the line-up has no guide, so every one of those paths is written to look deliberate without one rather than to show a gap where a title should be. Around that: categories and countries are one index rather than two competing navigations, pinned and recent channels lead, and the states that were bare — first load, loading more, no results, offline — are all drawn. Country names are in English, like the channel names beside them; a strip reading "O'zbekiston" over a grid of "Pluto TV Comedy" was two languages doing one job. The clock is the part worth being careful about. Times arrive as UTC and are converted on the way in, so an hour rendered is the viewer's own; progress is clamped at both ends so a stale payload reads as finished rather than as 140%; and a bar is only drawn for a slot between five minutes and six hours, because a feed padding a thin guide with a nine-hour block would otherwise show a bar that has not moved since breakfast.
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.
No description provided.