Mobile / OTA: - Enable Expo Updates (app.json + AndroidManifest) → api.goon-foss.org - Bump 0.1.6 → 0.1.9 (build.gradle, app.json, appVersion.ts, main.py /version) - backend.ts: default public backend auto-connect (no manual login) WebView fallback fix (PlayerScreen INJECTED_JS): - Auto-dismiss cookie/consent gates (hqporner et al. blocked kt_player init) - Context-scoped: only clicks consent buttons inside cookie/gdpr containers - Retry window for <source>.src polling raised 5→15 ticks (post-dismiss init) Resolver: - Series-position + modifier mismatch detector (Episode 2≠4, BTS/unedited) → composite_score hard-reject / cap; wired into scene_score + bulk_dedup - aggregator-mode candidate query: LIMIT 500 + title-match ordering Connectors: - porndoe.com browse scraper (JSON-LD VideoObject) — theporndude audit pilot landing: APK links → goon-v0.1.9.apk Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
"""Coverage check: ile tube'ów z theporndude.com mamy już w bazie."""
|
|
from app.db import SessionLocal
|
|
from sqlalchemy import text
|
|
|
|
|
|
def main():
|
|
with SessionLocal() as s:
|
|
# Wszystkie distinct origins (canonical + tube: + pornapp:)
|
|
rows = s.execute(text("""
|
|
SELECT origin, COUNT(*) AS n,
|
|
COUNT(*) FILTER (WHERE dead_at IS NULL) AS live,
|
|
COUNT(*) FILTER (WHERE dead_at IS NOT NULL) AS dead
|
|
FROM playback_sources
|
|
GROUP BY origin
|
|
ORDER BY origin
|
|
""")).all()
|
|
print(f"distinct origins: {len(rows)}")
|
|
by_kind = {}
|
|
for r in rows:
|
|
kind = r.origin.split(":")[0] if ":" in r.origin else "other"
|
|
by_kind.setdefault(kind, []).append((r.origin, r.n, r.live, r.dead))
|
|
for kind, items in by_kind.items():
|
|
print(f"\n=== {kind} ({len(items)} origins) ===")
|
|
for origin, n, live, dead in sorted(items, key=lambda x: -x[2]):
|
|
print(f" {origin:<35} n={n:>7,} live={live:>7,} dead={dead:>5,}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|