goon/app/api
jtrzupek 7895148c0f
Some checks are pending
Backend tests / test (push) Waiting to run
fix(review): player recovery deadlocks, quick-play re-fire, backfill gaps, em-dashes
Addresses the ultra-review findings on this branch:

Player (PlayerScreen.tsx): the new recoveryPending mirrored the fallback-chain guards
by hand and could deadlock into a permanent "Reconnecting" spinner with no way to Mark
broken — for gone (410) sources on IP-bound tubes (re-resolve bails before setting
reResolveDone) and for any post-load error on those tubes (re-resolve is initial-load
only). Derive one reResolveApplicable flag (IP-bound AND initial-load AND not-gone) and
use it for both the chain gate and the spinner, so gone/post-load errors fall through to
proxy/WebView or the terminal error card. Seek-recovery now falls through to the chain
when player.replace() throws instead of returning.

Quick-play (SceneDetail): the autoplay route param persisted and autoPlay={i===0} re-fired
when the source list reordered (e.g. after Mark broken drops the dead source), bouncing the
user into the player. Consume it once via onAutoPlayConsumed -> nav.setParams({autoplay:false}).

Backfill semantics: performer-driven direct-scraper "backward fill" now tags scenes
backfill=True (search-by-name pulls the whole old catalog); merge coalesces backfill
(keep AND drop) so a fresh scene merged into a dead dup keeps NEW; deep-crawl only tags
backfill on a tube's FIRST sweep (swept_once) so re-sweep catalog growth stays genuine;
pilot script tags backfill.

Perf/migration: migration 0026 is now idempotent (IF NOT EXISTS; prod got the column via
manual ALTER) and adds ix_scene_performers_performer_id (favorites count filtered
performer_id with no index); index also created on prod.

Cleanup: deleted dead FavoriteSceneRow (unused import in two screens, stale isNew without
the backfill guard); removed em-dashes from all lines this branch added (user CLAUDE.md
rule), including the user-facing changelog / Settings / player-overlay strings.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 09:20:40 +02:00
..
__init__.py Initial commit 2026-05-20 10:10:22 +02:00
admin.py Initial commit 2026-05-20 10:10:22 +02:00
admin_html.py Initial commit 2026-05-20 10:10:22 +02:00
blacklist.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00
bug_reports.py feat(bug-reports): two-way replies (device-scoped) + admin reply endpoint 2026-06-12 11:35:44 +02:00
device.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00
expo_updates.py session work: bug-report fixes + WIP cleanup 2026-05-25 22:02:52 +02:00
favorites.py fix(review): player recovery deadlocks, quick-play re-fire, backfill gaps, em-dashes 2026-07-02 09:20:40 +02:00
me.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00
movies.py fix(movies): dedup playback sources by target (cross-mirror dupes) 2026-06-21 22:26:50 +02:00
playback.py feat(playback): direct-HLS manifest passthrough + proxy stream drop handling 2026-06-11 16:14:25 +02:00
playback_events.py feat(sources): 0-5★ ranking on Sites (freshness/metadata/plays) + playback telemetry 2026-06-22 10:00:59 +02:00
saved_searches.py feat(api): per-device saved searches (keyword favorites) 2026-06-16 13:52:18 +02:00
scene_favorites.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00
scenes.py fix(favorites): exclude bulk-backfill scenes from "+N new" (tube fake dates) 2026-07-01 16:04:01 +02:00
schemas.py fix(review): player recovery deadlocks, quick-play re-fire, backfill gaps, em-dashes 2026-07-02 09:20:40 +02:00
seo.py feat(seo): public HTML SEO router + templates; add CLAUDE.md; ignore .nimbalyst 2026-05-31 16:29:59 +02:00
sources.py feat(sources): remove 0dayxx + pornditt + pornhat entirely 2026-06-22 12:23:29 +02:00
stream_proxy.py feat(playback): direct-HLS manifest passthrough + proxy stream drop handling 2026-06-11 16:14:25 +02:00
taxonomies.py feat(sources): remove 0dayxx + pornditt + pornhat entirely 2026-06-22 12:23:29 +02:00
watch.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00