Spaces:
Running
Running
Upload index.html
Browse files- index.html +25 -7
index.html
CHANGED
|
@@ -1583,7 +1583,8 @@ async function authSignOutEverywhere(){
|
|
| 1583 |
// Omba barua pepe ya kuweka upya nenosiri (Supabase GoTrue "recover").
|
| 1584 |
// Haihitaji password ya sasa — Supabase inatuma kiungo (link) kwa barua pepe husika.
|
| 1585 |
async function authRecoverPassword(email){
|
| 1586 |
-
|
|
|
|
| 1587 |
return authRequest('/recover?redirect_to=' + redirect, { email });
|
| 1588 |
}
|
| 1589 |
// fetch yenye Authorization ya mtumiaji, hujaribu ku-refresh token ikiisha muda (401)
|
|
@@ -3296,9 +3297,14 @@ function jmxSocialBar(){
|
|
| 3296 |
// Pre-roll: kila filamu/series/Live TV/mechi inapoanza (pamoja na kipindi kinachofuata).
|
| 3297 |
// Mid-roll: kila dakika 10 za kutazama (kama YouTube). Download: tangazo kabla ya kuanza (juu 2 kwa download nyingi).
|
| 3298 |
// HAZIONEKANI: offline (zilizopakuliwa), trailer, Hali ya Mtoto. Tangazo likishindikana kwa sababu yoyote, video inaendelea moja kwa moja.
|
| 3299 |
-
// Zima kabisa: JM_CONFIG.ADS_ENABLED = false, au JMX_VAST.
|
| 3300 |
const JMX_VAST = {
|
| 3301 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3302 |
fetchMs: 6000, // muda wa juu wa kupata VAST XML
|
| 3303 |
startMs: 9000, // muda wa juu wa video ya tangazo kuanza kucheza
|
| 3304 |
skipAfter: 5, // sekunde ya kuruhusu "Ruka" kama VAST haijaweka skipoffset
|
|
@@ -3307,6 +3313,18 @@ const JMX_VAST = {
|
|
| 3307 |
downloadAds: 2, // idadi ya juu ya matangazo kwa download moja au nyingi kwa pamoja
|
| 3308 |
};
|
| 3309 |
let __jmxPre = null; // tangazo linaloendelea sasa: { end(reason) }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3310 |
let __jmxPrePromise = null; // tangazo la kuanza-kucheza linalosubiriwa na player
|
| 3311 |
function jmxPrerollAbort(){ try { if (__jmxPre) __jmxPre.end('aborted'); } catch (_) {} }
|
| 3312 |
// Player huita hii kabla ya kuanza kucheza: inasubiri tangazo likiisha. false = mtumiaji alibadilisha/alifunga.
|
|
@@ -3373,7 +3391,7 @@ async function jmxVastLoad(url, depth, acc){
|
|
| 3373 |
// opts: { fixed: skrini nzima juu ya app (download), mid: katikati ya video, onReady: ikaitwa tangazo linapokuwa tayari kuonyeshwa }
|
| 3374 |
function jmxPreroll(opts){
|
| 3375 |
opts = opts || {};
|
| 3376 |
-
if (!
|
| 3377 |
if (!opts.fixed && playerEl.classList.contains('mini')) return Promise.resolve('skipped');
|
| 3378 |
jmxPrerollAbort();
|
| 3379 |
return new Promise(resolve => {
|
|
@@ -3393,7 +3411,7 @@ function jmxPreroll(opts){
|
|
| 3393 |
__jmxPre = { end };
|
| 3394 |
(async () => {
|
| 3395 |
try {
|
| 3396 |
-
vast = await
|
| 3397 |
} catch (e) { return end('failed'); }
|
| 3398 |
if (done) return;
|
| 3399 |
if (opts.fixed) host = document.body;
|
|
@@ -3465,7 +3483,7 @@ function jmxPreroll(opts){
|
|
| 3465 |
}
|
| 3466 |
// Tangazo katikati ya video (kama YouTube): kila JMX_VAST.midrollEverySec za kutazama kweli (si wakati imesimama).
|
| 3467 |
function jmxMidroll(v){
|
| 3468 |
-
if (!
|
| 3469 |
v.__jmxMid = 1;
|
| 3470 |
let acc = 0, busy = false, adOn = false;
|
| 3471 |
v.addEventListener('play', () => { if (adOn) { try { v.pause(); } catch (_) {} } });
|
|
@@ -3490,7 +3508,7 @@ function jmxMidroll(v){
|
|
| 3490 |
}
|
| 3491 |
// Download: tangazo 1 kwa download moja; kwa nyingi kwa pamoja (mf. 5) matangazo yasizidi JMX_VAST.downloadAds (2).
|
| 3492 |
async function jmxDownloadAds(n){
|
| 3493 |
-
if (!
|
| 3494 |
const times = Math.max(1, Math.min(JMX_VAST.downloadAds, n || 1));
|
| 3495 |
for (let i = 0; i < times; i++) {
|
| 3496 |
const r = await jmxPreroll({ fixed: true });
|
|
|
|
| 1583 |
// Omba barua pepe ya kuweka upya nenosiri (Supabase GoTrue "recover").
|
| 1584 |
// Haihitaji password ya sasa — Supabase inatuma kiungo (link) kwa barua pepe husika.
|
| 1585 |
async function authRecoverPassword(email){
|
| 1586 |
+
// Anwani ya reset inachukuliwa kutoka kwenye domain ambayo app inafunguliwa (haitegemei jina la Space tena)
|
| 1587 |
+
const redirect = encodeURIComponent(location.origin + location.pathname.replace(/index\.html$/i, '') + 'reset.html');
|
| 1588 |
return authRequest('/recover?redirect_to=' + redirect, { email });
|
| 1589 |
}
|
| 1590 |
// fetch yenye Authorization ya mtumiaji, hujaribu ku-refresh token ikiisha muda (401)
|
|
|
|
| 3297 |
// Pre-roll: kila filamu/series/Live TV/mechi inapoanza (pamoja na kipindi kinachofuata).
|
| 3298 |
// Mid-roll: kila dakika 10 za kutazama (kama YouTube). Download: tangazo kabla ya kuanza (juu 2 kwa download nyingi).
|
| 3299 |
// HAZIONEKANI: offline (zilizopakuliwa), trailer, Hali ya Mtoto. Tangazo likishindikana kwa sababu yoyote, video inaendelea moja kwa moja.
|
| 3300 |
+
// Zima kabisa: JM_CONFIG.ADS_ENABLED = false, au acha orodha ya JMX_VAST.urls tupu.
|
| 3301 |
const JMX_VAST = {
|
| 3302 |
+
// Kampuni za matangazo ya video (VAST). Ongeza kiungo kipya kwenye orodha hii. Zinabadilishana kila tangazo (round-robin);
|
| 3303 |
+
// kampuni moja ikikosa tangazo (hakuna fill/hitilafu), inayofuata inajaribiwa mara moja.
|
| 3304 |
+
urls: [
|
| 3305 |
+
'https://sadpicture.com/dMmlFsz.dhGcNovMZkGwUp/teFmT9hugZPUjl/kUPMT-c/1IM/TQAmxdN/j_kYt/NqzCUsxNM/DREX3AMdwv', // HilltopAds
|
| 3306 |
+
// 'PAKA_VAST_URL_YA_KAMPUNI_YA_PILI_HAPA', // mf. ExoClick / RichAds
|
| 3307 |
+
],
|
| 3308 |
fetchMs: 6000, // muda wa juu wa kupata VAST XML
|
| 3309 |
startMs: 9000, // muda wa juu wa video ya tangazo kuanza kucheza
|
| 3310 |
skipAfter: 5, // sekunde ya kuruhusu "Ruka" kama VAST haijaweka skipoffset
|
|
|
|
| 3313 |
downloadAds: 2, // idadi ya juu ya matangazo kwa download moja au nyingi kwa pamoja
|
| 3314 |
};
|
| 3315 |
let __jmxPre = null; // tangazo linaloendelea sasa: { end(reason) }
|
| 3316 |
+
let __jmxRR = 0; // round-robin: kampuni ipi inaanza tangazo linalofuata
|
| 3317 |
+
function jmxVastUrls(){ return (JMX_VAST.urls || []).filter(u => u && /^https?:\/\//i.test(u)); }
|
| 3318 |
+
// Hupata VAST kwa kuzunguka kampuni zote; ya kwanza yenye tangazo halisi inashinda.
|
| 3319 |
+
async function jmxVastPick(){
|
| 3320 |
+
const L = jmxVastUrls(); if (!L.length) throw new Error('no_urls');
|
| 3321 |
+
const start = __jmxRR++ % L.length; let lastErr = null;
|
| 3322 |
+
for (let k = 0; k < L.length; k++) {
|
| 3323 |
+
try { return await jmxVastLoad(L[(start + k) % L.length], 0, { imps: [], errs: [], clickTr: [], track: {}, media: '', click: '', dur: null, skipoff: '' }); }
|
| 3324 |
+
catch (e) { lastErr = e; }
|
| 3325 |
+
}
|
| 3326 |
+
throw lastErr || new Error('no_fill');
|
| 3327 |
+
}
|
| 3328 |
let __jmxPrePromise = null; // tangazo la kuanza-kucheza linalosubiriwa na player
|
| 3329 |
function jmxPrerollAbort(){ try { if (__jmxPre) __jmxPre.end('aborted'); } catch (_) {} }
|
| 3330 |
// Player huita hii kabla ya kuanza kucheza: inasubiri tangazo likiisha. false = mtumiaji alibadilisha/alifunga.
|
|
|
|
| 3391 |
// opts: { fixed: skrini nzima juu ya app (download), mid: katikati ya video, onReady: ikaitwa tangazo linapokuwa tayari kuonyeshwa }
|
| 3392 |
function jmxPreroll(opts){
|
| 3393 |
opts = opts || {};
|
| 3394 |
+
if (!jmxVastUrls().length || !jmxAdsOn()) return Promise.resolve('skipped');
|
| 3395 |
if (!opts.fixed && playerEl.classList.contains('mini')) return Promise.resolve('skipped');
|
| 3396 |
jmxPrerollAbort();
|
| 3397 |
return new Promise(resolve => {
|
|
|
|
| 3411 |
__jmxPre = { end };
|
| 3412 |
(async () => {
|
| 3413 |
try {
|
| 3414 |
+
vast = await jmxVastPick();
|
| 3415 |
} catch (e) { return end('failed'); }
|
| 3416 |
if (done) return;
|
| 3417 |
if (opts.fixed) host = document.body;
|
|
|
|
| 3483 |
}
|
| 3484 |
// Tangazo katikati ya video (kama YouTube): kila JMX_VAST.midrollEverySec za kutazama kweli (si wakati imesimama).
|
| 3485 |
function jmxMidroll(v){
|
| 3486 |
+
if (!jmxVastUrls().length || !v || v.__jmxMid) return;
|
| 3487 |
v.__jmxMid = 1;
|
| 3488 |
let acc = 0, busy = false, adOn = false;
|
| 3489 |
v.addEventListener('play', () => { if (adOn) { try { v.pause(); } catch (_) {} } });
|
|
|
|
| 3508 |
}
|
| 3509 |
// Download: tangazo 1 kwa download moja; kwa nyingi kwa pamoja (mf. 5) matangazo yasizidi JMX_VAST.downloadAds (2).
|
| 3510 |
async function jmxDownloadAds(n){
|
| 3511 |
+
if (!jmxVastUrls().length || !jmxAdsOn()) return;
|
| 3512 |
const times = Math.max(1, Math.min(JMX_VAST.downloadAds, n || 1));
|
| 3513 |
for (let i = 0; i < times; i++) {
|
| 3514 |
const r = await jmxPreroll({ fixed: true });
|