Spaces:
Running
Running
Upload index.html
Browse files- index.html +14 -38
index.html
CHANGED
|
@@ -1492,14 +1492,14 @@ const TRAILER_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-trailer';
|
|
| 1492 |
const TRAILER_KEY = SUPABASE_ANON_KEY;
|
| 1493 |
|
| 1494 |
// movie-zilizotafsiriwa — mradi TOFAUTI (DJ movies/series), function ya umma pekee (GET)
|
| 1495 |
-
const TRANSLATED_BASE = JM_CONFIG.TRANSLATED_URL + '/functions/v1/' + JM_CONFIG.TRANSLATED_FN;
|
| 1496 |
-
const TRANSLATED_KEY = JM_CONFIG.TRANSLATED_KEY;
|
| 1497 |
// movie-zilizotafsriwa2 — filamu zenye MP4 (draft/public kutoka admin); project ile ile ya CONTENT_URL.
|
| 1498 |
// Id zake zinaanza na 'n2-' ili zisigongane na za chanzo cha zamani.
|
| 1499 |
const TRANSLATED2_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa2';
|
| 1500 |
const TR2_PREFIX = 'n2-';
|
| 1501 |
// movie-public2 — Absalom Family (Season Zilizotafsiriwa). Project ile ile ya CONTENT_URL. Id zake zinaanza na 'ab-'.
|
| 1502 |
const ABSALOM_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa3';
|
|
|
|
|
|
|
| 1503 |
const AB_PREFIX = 'ab-';
|
| 1504 |
const AB_MAX_POSTS = 1000; // posts zisizozidi 1000 kwenye orodha
|
| 1505 |
// Jina la kipindi: "EP1" / "Episode 1" / "1" -> "1" (ili ionekane kama Episode 1 na download iwe na namba); vinginevyo jina kamili
|
|
@@ -1524,7 +1524,7 @@ function loadTrModel() {
|
|
| 1524 |
return trModelP;
|
| 1525 |
}
|
| 1526 |
function logTrPlay(id) { // rekodi uchezaji bila kuzuia player; kitambulisho cha kifaa ni cha nasibu (hakuna jina/email)
|
| 1527 |
-
if (!id || String(id).startsWith(AB_PREFIX)) return;
|
| 1528 |
let dev = '';
|
| 1529 |
try { dev = localStorage.getItem('jm_dev') || ''; if (!dev) { dev = (crypto.randomUUID && crypto.randomUUID()) || (Date.now() + '-' + Math.random().toString(36).slice(2)); localStorage.setItem('jm_dev', dev); } } catch (_) {}
|
| 1530 |
fetch(TRANSLATED2_BASE + '?action=play', { method: 'POST', keepalive: true,
|
|
@@ -1562,14 +1562,11 @@ async function fetchAbsalomMovie(slug) { // -> { ok, error?, movie } ikiwa na vi
|
|
| 1562 |
(p.episodes || []).forEach(e => { if (e && e.mp4_url) eps[abEpKey(e.label, used)] = e.mp4_url; });
|
| 1563 |
return { ok: true, movie: { title: p.title, dj: p.dj, poster_url: p.poster, video_urls: { 'Season 1': eps } } };
|
| 1564 |
}
|
| 1565 |
-
async function fetchTranslatedMovie(id) { // -> { ok, error?, movie } kutoka
|
| 1566 |
-
|
| 1567 |
-
const
|
| 1568 |
-
|
| 1569 |
-
|
| 1570 |
-
const r = await fetch(url, { headers: { apikey: isNew ? SUPABASE_ANON_KEY : TRANSLATED_KEY } });
|
| 1571 |
-
const d = await r.json();
|
| 1572 |
-
return isNew ? { ok: r.ok && !d.error, error: d.error, movie: d } : d;
|
| 1573 |
}
|
| 1574 |
const PIXTVMAX_CATEGORY_SW = {
|
| 1575 |
'Sports': 'cat_sports', 'Movie Channels': 'cat_movies', 'News': 'cat_news',
|
|
@@ -3821,33 +3818,12 @@ function absalomCardsCached() {
|
|
| 3821 |
return absCardsP;
|
| 3822 |
}
|
| 3823 |
|
| 3824 |
-
async function fetchTranslatedList() {
|
| 3825 |
-
const
|
| 3826 |
-
|
| 3827 |
-
|
| 3828 |
-
|
| 3829 |
-
|
| 3830 |
-
const oldP = (async () => { // chanzo cha zamani
|
| 3831 |
-
const r = await fetch(TRANSLATED_BASE + '?limit=100', { headers: { apikey: TRANSLATED_KEY } });
|
| 3832 |
-
if (!r.ok) throw new Error(T('err_generic') + ' ' + r.status);
|
| 3833 |
-
const d = await r.json();
|
| 3834 |
-
if (!d.ok) throw new Error(d.error || 'Seva imekataa ombi.');
|
| 3835 |
-
return (d.movies || []).map(m => card(m, ''));
|
| 3836 |
-
})();
|
| 3837 |
-
const newP = (async () => { // movie-zilizotafsriwa2: public tu (seva inachuja)
|
| 3838 |
-
const r = await fetch(TRANSLATED2_BASE, { headers: { apikey: SUPABASE_ANON_KEY } });
|
| 3839 |
-
if (!r.ok) throw new Error(T('err_generic') + ' ' + r.status);
|
| 3840 |
-
const d = await r.json();
|
| 3841 |
-
return (Array.isArray(d) ? d : []).map(m => card(m, TR2_PREFIX));
|
| 3842 |
-
})();
|
| 3843 |
-
const absP = absalomCardsCached(); // movie-public2: posts zenye MP4 (jibu jepesi, cache ya dakika 10)
|
| 3844 |
-
const [a, b, c] = await Promise.allSettled([oldP, newP, absP]);
|
| 3845 |
-
if (a.status === 'rejected' && b.status === 'rejected' && c.status === 'rejected') throw a.reason;
|
| 3846 |
-
const absItems = c.status === 'fulfilled' ? c.value.map(m => card(m, AB_PREFIX)) : [];
|
| 3847 |
-
const fresh = (b.status === 'fulfilled' ? b.value : []).concat(absItems),
|
| 3848 |
-
older = a.status === 'fulfilled' ? a.value : [];
|
| 3849 |
-
const seen = new Set(fresh.map(x => String(x.title || '').trim().toLowerCase()));
|
| 3850 |
-
return fresh.concat(older.filter(x => !seen.has(String(x.title || '').trim().toLowerCase())));
|
| 3851 |
}
|
| 3852 |
|
| 3853 |
async function loadTranslated() {
|
|
|
|
| 1492 |
const TRAILER_KEY = SUPABASE_ANON_KEY;
|
| 1493 |
|
| 1494 |
// movie-zilizotafsiriwa — mradi TOFAUTI (DJ movies/series), function ya umma pekee (GET)
|
|
|
|
|
|
|
| 1495 |
// movie-zilizotafsriwa2 — filamu zenye MP4 (draft/public kutoka admin); project ile ile ya CONTENT_URL.
|
| 1496 |
// Id zake zinaanza na 'n2-' ili zisigongane na za chanzo cha zamani.
|
| 1497 |
const TRANSLATED2_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa2';
|
| 1498 |
const TR2_PREFIX = 'n2-';
|
| 1499 |
// movie-public2 — Absalom Family (Season Zilizotafsiriwa). Project ile ile ya CONTENT_URL. Id zake zinaanza na 'ab-'.
|
| 1500 |
const ABSALOM_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa3';
|
| 1501 |
+
// Chanzo kimoja cha Zilizotafsiriwa: movie-translated-all (inaunganisha old + n2 + absalom)
|
| 1502 |
+
const TRANSLATED_ALL = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-translated-all';
|
| 1503 |
const AB_PREFIX = 'ab-';
|
| 1504 |
const AB_MAX_POSTS = 1000; // posts zisizozidi 1000 kwenye orodha
|
| 1505 |
// Jina la kipindi: "EP1" / "Episode 1" / "1" -> "1" (ili ionekane kama Episode 1 na download iwe na namba); vinginevyo jina kamili
|
|
|
|
| 1524 |
return trModelP;
|
| 1525 |
}
|
| 1526 |
function logTrPlay(id) { // rekodi uchezaji bila kuzuia player; kitambulisho cha kifaa ni cha nasibu (hakuna jina/email)
|
| 1527 |
+
if (!id || String(id).startsWith(AB_PREFIX) || String(id).startsWith('abm-')) return;
|
| 1528 |
let dev = '';
|
| 1529 |
try { dev = localStorage.getItem('jm_dev') || ''; if (!dev) { dev = (crypto.randomUUID && crypto.randomUUID()) || (Date.now() + '-' + Math.random().toString(36).slice(2)); localStorage.setItem('jm_dev', dev); } } catch (_) {}
|
| 1530 |
fetch(TRANSLATED2_BASE + '?action=play', { method: 'POST', keepalive: true,
|
|
|
|
| 1562 |
(p.episodes || []).forEach(e => { if (e && e.mp4_url) eps[abEpKey(e.label, used)] = e.mp4_url; });
|
| 1563 |
return { ok: true, movie: { title: p.title, dj: p.dj, poster_url: p.poster, video_urls: { 'Season 1': eps } } };
|
| 1564 |
}
|
| 1565 |
+
async function fetchTranslatedMovie(id) { // -> { ok, error?, movie } kutoka movie-translated-all
|
| 1566 |
+
const r = await fetch(TRANSLATED_ALL + '?id=' + encodeURIComponent(id), { headers: { apikey: SUPABASE_ANON_KEY } });
|
| 1567 |
+
const d = await r.json().catch(() => ({}));
|
| 1568 |
+
if (!r.ok || !d.ok) return { ok: false, error: d.error || ('HTTP ' + r.status) };
|
| 1569 |
+
return d;
|
|
|
|
|
|
|
|
|
|
| 1570 |
}
|
| 1571 |
const PIXTVMAX_CATEGORY_SW = {
|
| 1572 |
'Sports': 'cat_sports', 'Movie Channels': 'cat_movies', 'News': 'cat_news',
|
|
|
|
| 3818 |
return absCardsP;
|
| 3819 |
}
|
| 3820 |
|
| 3821 |
+
async function fetchTranslatedList() { // movie-translated-all: orodha moja iliyounganishwa
|
| 3822 |
+
const r = await fetch(TRANSLATED_ALL, { headers: { apikey: SUPABASE_ANON_KEY } });
|
| 3823 |
+
if (!r.ok) throw new Error(T('err_generic') + ' ' + r.status);
|
| 3824 |
+
const d = await r.json();
|
| 3825 |
+
if (!d.ok) throw new Error(d.error || 'Imekataa ombi.');
|
| 3826 |
+
return (d.movies || []).map(m => card(m, ''));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3827 |
}
|
| 3828 |
|
| 3829 |
async function loadTranslated() {
|