jaynesmax commited on
Commit
d8e0658
·
verified ·
1 Parent(s): c3a9c93

Upload index.html

Browse files
Files changed (1) hide show
  1. 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 chanzo sahihi
1566
- if (String(id).startsWith(AB_PREFIX)) return fetchAbsalomMovie(String(id).slice(AB_PREFIX.length));
1567
- const isNew = String(id).startsWith(TR2_PREFIX);
1568
- const url = isNew ? TRANSLATED2_BASE + '?id=' + encodeURIComponent(String(id).slice(TR2_PREFIX.length))
1569
- : TRANSLATED_BASE + '?id=' + encodeURIComponent(id);
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 card = (m, idPrefix) => ({
3826
- id: idPrefix + m.id, kind: 'translated', title: m.title,
3827
- poster: m.thumb_url || m.poster_url || null, imgFallbackOn: true,
3828
- subtitle: normDj(m.dj) || (m.category === 'series' ? 'Series' : 'Movie'), isSeries: m.category === 'series',
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() {