From ae3c4ac9bb2187c522ddfd40f517939d6ddbfffb Mon Sep 17 00:00:00 2001 From: goon-foss Date: Thu, 20 Aug 2026 10:07:58 +0200 Subject: [PATCH] fix(listy): prog dlugosci nie ukrywa juz scen o NIEZNANEJ dlugosci w drill-downach Zgloszenia 2026-08-20 ("hentaimama dalej 0 scen", "porndish zaprzestal ingestu", "czemu sexu ma tylko 38 scen"). Trzy razy ten sam pierwotny powod, i to NIE ingest. `api.ts` doklejal `min_duration_sec=60` do KAZDEGO listScenes bez wlasnej wartosci. W SQL `duration_sec >= 60` jest nieprawda takze dla NULL, wiec prog wycinal nie tylko krotkie sceny, ale wszystkie o NIEZNANEJ dlugosci. Zmierzone na produkcji: supjav, hentaigasm, hentaimama, hentaiplay, javflix, xanimeporn 100% NULL xhamster 90,3% (360 709) porndish 88,9% (37 736) porntrex 76,8% (616 345) latestpornvideo 68,4% xnxx 65,2% (226 217) xvideos 63,8% (258 711) Czyli wejscie w konkretny serwis ukrywalo ponad 1,5 mln scen i wygladalo jak martwy albo zatrzymany tube. Ekrany drill-down (SiteScenes, PerformerScenes, StudioScenes, TagScenes) przekazuja teraz 0: user wszedl JAWNIE w te pozycje, wiec ma zobaczyc jej zawartosc. Glowny feed zostaje z progiem 60s, bo tam chroni przed teaserami. Zweryfikowane na produkcji: hentaimama / supjav / xanimeporn 0 -> 50 pozycji. Pulapka NULL opisana w api.ts, zeby ktos nie "uproscil" tego z powrotem. Co-Authored-By: Claude Opus 5 --- mobile/src/api.ts | 8 ++++++++ mobile/src/changelog.ts | 7 +++++++ mobile/src/screens/PerformerScenesScreen.tsx | 4 ++++ mobile/src/screens/SiteScenesScreen.tsx | 4 ++++ mobile/src/screens/StudioScenesScreen.tsx | 4 ++++ mobile/src/screens/TagScenesScreen.tsx | 4 ++++ 6 files changed, 31 insertions(+) diff --git a/mobile/src/api.ts b/mobile/src/api.ts index 012c92f..7f69f2b 100644 --- a/mobile/src/api.ts +++ b/mobile/src/api.ts @@ -134,6 +134,14 @@ export class GoonClient { // "Takie sceny po 1 min to można wywalić". Pornapp/freshporno czasem // zassuje teasery/trailery 30-50s, które są bezużyteczne na listach. // Caller może override przez explicit 0 (lub null), np. admin browse. + // + // UWAGA, drugie dno: w SQL `duration_sec >= 60` jest NIEPRAWDĄ dla NULL, więc ten + // próg wycina też sceny o NIEZNANEJ długości, a nie tylko krótkie. Dla głównego + // feedu to akceptowalne, ale przy wejściu w KONKRETNY serwis/performera/tag ukrywał + // ogromne części katalogu i wyglądał jak zatrzymany ingest (zgłoszenia 2026-08-20: + // hentaimama 0 scen, porndish "zaprzestał ingestu"). Pomiar: 100% scen supjav, + // hentaigasm, hentaimama, hentaiplay, javflix i xanimeporn ma duration NULL, do tego + // xhamster 90%, porndish 89%, porntrex 77%. Ekrany drill-down przekazują więc 0. const minDur = params.min_duration_sec ?? 60; if (minDur > 0) qs.set('min_duration_sec', String(minDur)); if (params.max_duration_sec !== undefined) diff --git a/mobile/src/changelog.ts b/mobile/src/changelog.ts index 65b55cd..bde74ad 100644 --- a/mobile/src/changelog.ts +++ b/mobile/src/changelog.ts @@ -16,6 +16,13 @@ export type ChangelogEntry = { }; export const CHANGELOG: ChangelogEntry[] = [ + { + id: '2026-08-20', + date: 'August 2026', + items: [ + 'Sites, performers, studios and tags were hiding a large part of the catalogue. The "minimum length" rule was also dropping every scene whose length we simply do not know, which is most of them on some sites: hentaimama, supjav, hentaigasm, hentaiplay, javflix and xanimeporn showed nothing at all, and xhamster, porndish and porntrex showed a fraction. Opening one of those now shows everything it has.', + ], + }, { id: '2026-08-18i', date: 'August 2026', diff --git a/mobile/src/screens/PerformerScenesScreen.tsx b/mobile/src/screens/PerformerScenesScreen.tsx index 06db505..d933898 100644 --- a/mobile/src/screens/PerformerScenesScreen.tsx +++ b/mobile/src/screens/PerformerScenesScreen.tsx @@ -148,6 +148,10 @@ export function PerformerScenesScreen() { client.listScenes({ performer_ids: [id], vertical: vertical ?? undefined, + // 0 = nie nakładaj progu długości. User wszedł JAWNIE w tę pozycję, więc + // ukrywanie scen o nieznanej długości (w SQL NULL nie przechodzi `>= 60`) + // wyglądało jak pusty albo zatrzymany serwis. Patrz komentarz w api.ts. + min_duration_sec: 0, tags: selectedTag ? [selectedTag.slug] : undefined, sort: 'release_date', per_page: 200, diff --git a/mobile/src/screens/SiteScenesScreen.tsx b/mobile/src/screens/SiteScenesScreen.tsx index 5dac05d..e343636 100644 --- a/mobile/src/screens/SiteScenesScreen.tsx +++ b/mobile/src/screens/SiteScenesScreen.tsx @@ -64,6 +64,10 @@ export function SiteScenesScreen() { origin, tags: selectedTags.length > 0 ? selectedTags : undefined, sort: 'release_date', + // 0 = nie nakładaj progu długości. User wszedł JAWNIE w tę pozycję, więc + // ukrywanie scen o nieznanej długości (w SQL NULL nie przechodzi `>= 60`) + // wyglądało jak pusty albo zatrzymany serwis. Patrz komentarz w api.ts. + min_duration_sec: 0, page: pageParam, per_page: PER_PAGE, }), diff --git a/mobile/src/screens/StudioScenesScreen.tsx b/mobile/src/screens/StudioScenesScreen.tsx index 866857c..92e545d 100644 --- a/mobile/src/screens/StudioScenesScreen.tsx +++ b/mobile/src/screens/StudioScenesScreen.tsx @@ -125,6 +125,10 @@ export function StudioScenesScreen() { client.listScenes({ studio_slugs: [slug], vertical: vertical ?? undefined, + // 0 = nie nakładaj progu długości. User wszedł JAWNIE w tę pozycję, więc + // ukrywanie scen o nieznanej długości (w SQL NULL nie przechodzi `>= 60`) + // wyglądało jak pusty albo zatrzymany serwis. Patrz komentarz w api.ts. + min_duration_sec: 0, sort: 'release_date', per_page: 200, has_playback: true, diff --git a/mobile/src/screens/TagScenesScreen.tsx b/mobile/src/screens/TagScenesScreen.tsx index 20a842b..21257a7 100644 --- a/mobile/src/screens/TagScenesScreen.tsx +++ b/mobile/src/screens/TagScenesScreen.tsx @@ -35,6 +35,10 @@ export function TagScenesScreen() { queryFn: () => client.listScenes({ tags: [slug], + // 0 = nie nakładaj progu długości. User wszedł JAWNIE w tę pozycję, więc + // ukrywanie scen o nieznanej długości (w SQL NULL nie przechodzi `>= 60`) + // wyglądało jak pusty albo zatrzymany serwis. Patrz komentarz w api.ts. + min_duration_sec: 0, // Wertykał przyniesiony ze sceny. Bez niego backend wycina wszystkie sekcje // poboczne, więc tag kliknięty w anime pokazywał sceny spoza anime (e9de414c). vertical: vertical ?? undefined,