Skip to content

fix(ui): surface download failures, close platform gaps, clean up code layer - #1200

Merged
everpcpc merged 2 commits into
mainfrom
fix/ui-review-batch-4
Oct 4, 2026
Merged

everpcpc merged 2 commits into
mainfrom
fix/ui-review-batch-4

Conversation

@everpcpc

@everpcpc everpcpc commented Oct 4, 2026

Copy link
Copy Markdown
Member

Stacked on #1199 (on #1198, on #1197) — review those first; this diff shrinks to batch-4 only once they merge.

Problem

Final batch from the UI review:

  • Download failures were indistinguishable from in-progress states: the failure icon rendered in the same secondary gray everywhere, and series/read-list aggregates had no failed state at all, so a partially failed download looked like business as usual.
  • Assorted reader/detail/settings rough edges: the DIVINA page-jump preview card didn't respond to taps (the PDF one did), alternate-title labels wrapped at a hardcoded 60pt column, the tap-zone preview read the deprecated UIScreen.main (wrong aspect in split view), EPUB theme settings used a lazy grid inside a self-sizing Form row (a known UIKit recursive-layout crash pattern), slider rows came in two layouts, the in-reader EPUB settings sheet showed full description text against the compact-sheet convention, the login form ignored Return on macOS, and several badges/overlays had adaptivity or clipping issues.
  • tvOS gaps: network timeouts and retry counts were read-only, the cache page silently discarded invalid input, logs couldn't be searched or cleared, the Settings tab carried a redundant section level, the API-key copy button did nothing, and the delete-library confirmation (type-the-name alert) could never confirm because tvOS alerts can't host text input.
  • macOS gaps: the two EPUB settings pages ignored the shared form width, the Settings window forced its sidebar back open half a second after the user hid it, and the Protected toggle was disabled without explanation when device authentication is unavailable.
  • Code layer: ~8 inline Binding(get:set:) sites, dead code (an unreachable ServerView branch, unused properties), five copies of the same deep-link handler each racing a 0.1s delayed append, and hardcoded server-row gradient colors.

Fix

  • DownloadStatus/SeriesDownloadStatus gained a displayColor (failed = red) and the aggregates a failed case — any failure with nothing in flight surfaces as red at book, series, and read-list level; the count delta path falls back to a full recount when a failure is involved. Download All on a failed aggregate retries the failures.
  • Reader/detail polish: shared PageJumpPreviewCard with tap-to-select on DIVINA, baseline-grid alternate titles, container-geometry tap-zone preview, eager EPUB theme grid, unified slider rows, description text trimmed from the in-reader EPUB settings sheet, merged duplicated reader transitions and next/previous-book navigation.
  • Settings/login/feedback: icon-preview app-icon picker, adaptive browse-preview placeholder, Return-key focus chain and submit on the login form (plus a 44pt scheme toggle), stable update-password button width, komf failures via the standard alert channel with a distinguishable image-error placeholder, formatted directory-browser errors, semantic title type sizes, a pulsing live-task dot, wrapping detail timestamps, adaptive 18+ age-rating badge colors, and a 2-line toast cap.
  • tvOS: editable network page, invalid cache input flagged red, log search/clear, flattened Settings tab, hidden copy button, and a plain delete-library confirmation (type-to-confirm stays on iOS/macOS).
  • macOS: .settingsFormWidth() on both EPUB pages, the sidebar toggle is user-controlled again (the detail column already expands), and a footer explains the disabled Protected toggle.
  • Code layer: inline bindings lifted to computed properties (network side effects moved to onChange), dead code removed, one deepLinkRouting modifier shared by all five shells — reset and push now land in a single atomic NavigationPath assignment instead of a deferred append that could race the stack rebuild — and the server-green gradient moved into asset colors.

Validation

  • make format
  • make build — iOS, macOS, tvOS all pass
  • make localize + misc/translate.py list — no missing keys (12 new keys translated for all 10 languages; 7 stale slider keys removed)
  • repo-conventions skill updated (download aggregate failed rule, shared deep-link modifier)
  • tvOS/macOS behavior changes are build-verified only; recommend a manual pass on device

@everpcpc
everpcpc force-pushed the fix/ui-review-batch-4 branch from 6690c02 to f56dd18 Compare October 4, 2026 10:22
@everpcpc
everpcpc merged commit 3d8fd35 into main Oct 4, 2026
3 checks passed
@everpcpc
everpcpc deleted the fix/ui-review-batch-4 branch October 4, 2026 10:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant