Goon — self-hosted aggregator for adult-content scene metadata. Indexes scenes from TPDB, StashDB, and 30+ public adult tube sites. Cross-source deduplication via perceptual hash + Levenshtein distance. FastAPI backend + APScheduler worker + React Native (Expo) mobile client. FOSS, ad-free, donation-funded. See README for details.
54 lines
2 KiB
PowerShell
54 lines
2 KiB
PowerShell
$adb = "$env:LOCALAPPDATA\Android\Sdk\platform-tools\adb.exe"
|
|
$outDir = "$env:TEMP\aio_dumps"
|
|
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
|
|
|
|
$allSites = New-Object 'System.Collections.Generic.HashSet[string]'
|
|
$prevSig = ""
|
|
$stableCount = 0
|
|
$maxIters = 50
|
|
|
|
for ($i = 1; $i -le $maxIters; $i++) {
|
|
# Dump UI hierarchy
|
|
& $adb shell uiautomator dump /sdcard/ui.xml 2>&1 | Out-Null
|
|
& $adb pull /sdcard/ui.xml "$outDir\ui_$i.xml" 2>&1 | Out-Null
|
|
|
|
[xml]$x = Get-Content "$outDir\ui_$i.xml" -Raw
|
|
# Collect text nodes that look like tube names (non-empty, not generic UI labels)
|
|
$nodes = $x.SelectNodes("//node[@text!='']")
|
|
$skip = @("All Sites","Search site","Top Porn Sites (HD + 4K)","Gay Porn","Trans Porn","VR Porn",
|
|
"Promo Offer","Paysites","Search","NSFWSwipe.com")
|
|
$newOnPage = @()
|
|
foreach ($n in $nodes) {
|
|
$t = $n.text.Trim()
|
|
if ($t.Length -lt 2 -or $t.Length -gt 40) { continue }
|
|
if ($skip -contains $t) { continue }
|
|
if ($t -match '^[\d\W]+$') { continue } # numeric / punctuation only
|
|
if ($allSites.Add($t)) { $newOnPage += $t }
|
|
}
|
|
|
|
# Compute signature for "page didn't change"
|
|
$sig = ($nodes | ForEach-Object { $_.text }) -join '|'
|
|
if ($sig -eq $prevSig) {
|
|
$stableCount++
|
|
if ($stableCount -ge 2) {
|
|
Write-Output "iter $i — page stable, stop"
|
|
break
|
|
}
|
|
} else {
|
|
$stableCount = 0
|
|
$prevSig = $sig
|
|
}
|
|
|
|
Write-Output ("iter " + $i + ": +" + $newOnPage.Count + " new, total=" + $allSites.Count)
|
|
|
|
# Scroll down (drag top of list toward bottom = content scrolls up = next page)
|
|
& $adb shell input swipe 540 2000 540 400 250
|
|
Start-Sleep -Milliseconds 600
|
|
}
|
|
|
|
Write-Output ""
|
|
Write-Output "=== TOTAL UNIQUE TUBES: $($allSites.Count) ==="
|
|
$allSites | Sort-Object | ForEach-Object { Write-Output $_ }
|
|
$allSites | Sort-Object | Out-File -Encoding utf8 "$outDir\all_tubes.txt"
|
|
Write-Output ""
|
|
Write-Output "saved to: $outDir\all_tubes.txt"
|