fix(player): oswoj strone vikingfile, zeby nie wygladala na pusta

Zgloszenie 21d6f5af: galaxyporn laduje sie, a potem pusta strona, bez bledu.
Kierowanie bylo juz poprawne, problem byl wizualny. Vikingfile to STRONA PLIKU, nie
goly odtwarzacz: naglowek serwisu, nazwa pliku, rozmiar, przyciski pobierania,
progres i stopka, a wlasciwy widget Cloudflare siedzi w #captcha, czesto pod
zgieciem. W malym oknie odtwarzacza user widzial wiec pustke i nie mial pojecia,
ze ma gdzies kliknac.

Wstrzykujemy teraz dla tego jednego hosta krotki blok, ktory chowa cala oprawe
strony, wysrodkowuje #captcha-download na pelnym ekranie i dokłada jedna linijke
podpowiedzi. Gdy strona zdejmie z <video> klase hidden, chowamy widget i oddajemy
obraz na caly ekran. Dalej dziala zwykly scrape <source>, wiec gdy tylko pojawi sie
adres pliku, i tak przeskakujemy na natywny odtwarzacz.

Blok zwalidowany jako realny JavaScript (new Function na wyciagnietym fragmencie po
zamianie podwojnych backslashy na pojedyncze, tak jak robi to szablon).

Opublikowane OTA na 1.2 i 1.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
goon-foss 2026-08-22 19:24:31 +02:00
parent a62d438500
commit 1154834170
2 changed files with 51 additions and 0 deletions

View file

@ -16,6 +16,13 @@ export type ChangelogEntry = {
}; };
export const CHANGELOG: ChangelogEntry[] = [ export const CHANGELOG: ChangelogEntry[] = [
{
id: '2026-08-22b',
date: 'August 2026',
items: [
'Older galaxyporn scenes no longer open a blank page. They now live on a file host whose page is mostly site furniture, so the app strips it down to just the confirm-you-are-human box and the video, with a line telling you what to tap. Once the video appears it takes over the screen.',
],
},
{ {
id: '2026-08-22', id: '2026-08-22',
date: 'August 2026', date: 'August 2026',

View file

@ -1156,6 +1156,50 @@ const INJECTED_JS = `
if (window.__goonPatched) return; if (window.__goonPatched) return;
window.__goonPatched = true; window.__goonPatched = true;
// -- 0. vikingfile: to STRONA PLIKU, nie goly odtwarzacz. Galaxyporn przeniosl tam
// swoj katalog, a my podajemy ja do WebView, bo wideo odslania sie dopiero po
// recznym przejsciu zabezpieczenia Cloudflare. Bez tego bloku user widzi
// naglowek serwisu, nazwe pliku i stopke, a wlasciwy widget bywa pod zgieciem,
// wiec zglaszal to jako "loading, a potem pusta strona" (zgloszenie 21d6f5af).
// Zostawiamy wiec na ekranie WYLACZNIE widget i odtwarzacz, reszte chowamy.
// Gdy strona zdejmie z <video> klase hidden, chowamy tez widget i oddajemy
// obraz w calosci; dalej dziala zwykly scrape <source>, wiec i tak przeskoczymy
// na natywny odtwarzacz, gdy tylko pojawi sie adres pliku.
try {
if (/(^|\\.)vikingfile\\.com$/i.test(location.hostname)) {
var vkCss = document.createElement('style');
vkCss.textContent = [
'html,body{background:#000!important;margin:0!important;padding:0!important}',
'#logo,#toggle-theme,footer,#file-information,#progress-current,#archive,',
'#embed-code,#download-parallel,#download-parallel-progress{display:none!important}',
'.page-container,.content-wrap{max-width:100%!important;margin:0!important;padding:0!important}',
'#captcha-download{display:flex!important;flex-direction:column!important;',
'align-items:center!important;justify-content:center!important;',
'min-height:100vh!important;gap:14px!important}',
'#goon-vk-hint{color:#fff;font:600 15px system-ui,sans-serif;text-align:center;padding:0 24px}',
'video{width:100vw!important;max-height:100vh!important;background:#000!important}',
].join('');
(document.head || document.documentElement).appendChild(vkCss);
var vkReady = function() {
var box = document.getElementById('captcha-download');
if (box && !document.getElementById('goon-vk-hint')) {
var hint = document.createElement('div');
hint.id = 'goon-vk-hint';
hint.textContent = 'Tap the checkbox to start the video';
box.insertBefore(hint, box.firstChild);
}
var v = document.querySelector('video');
if (v && v.className.indexOf('hidden') === -1) {
if (box) box.style.display = 'none';
var vc = document.getElementById('video-container');
if (vc) vc.style.cssText = 'position:fixed;inset:0;z-index:99999;background:#000';
}
};
document.addEventListener('DOMContentLoaded', vkReady);
setInterval(vkReady, 600);
}
} catch (e) {}
// -- 0a. Mute autoplay until the FIRST user gesture (kills the unmuted-audio flash // -- 0a. Mute autoplay until the FIRST user gesture (kills the unmuted-audio flash
// gdy WebView otwiera stronę żeby przechwycić stream, report dccc05e4). // gdy WebView otwiera stronę żeby przechwycić stream, report dccc05e4).
// Sam override play() nie wystarczał: player hostera po starcie ustawiał // Sam override play() nie wystarczał: player hostera po starcie ustawiał