jaynesmax commited on
Commit
e08df40
·
verified ·
1 Parent(s): 6a88eb7

Upload index.html

Browse files
Files changed (1) hide show
  1. index.html +39 -7
index.html CHANGED
@@ -1481,6 +1481,42 @@ const TRANSLATED_KEY = JM_CONFIG.TRANSLATED_KEY;
1481
  // Id zake zinaanza na 'n2-' ili zisigongane na za chanzo cha zamani.
1482
  const TRANSLATED2_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa2';
1483
  const TR2_PREFIX = 'n2-';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1484
  async function fetchTranslatedMovie(id) { // -> { ok, error?, movie } kutoka chanzo sahihi
1485
  const isNew = String(id).startsWith(TR2_PREFIX);
1486
  const url = isNew ? TRANSLATED2_BASE + '?id=' + encodeURIComponent(String(id).slice(TR2_PREFIX.length))
@@ -3619,13 +3655,8 @@ async function loadTranslated() {
3619
  heroWrap.innerHTML = ''; tabsEl.style.display = 'none';
3620
  renderSkeletonRails(2);
3621
  try {
3622
- const items = await fetchTranslatedList();
3623
- const series = items.filter(it => (it.subtitle === 'Series'));
3624
- const movies = items.filter(it => !(it.subtitle === 'Series'));
3625
- const sections = [];
3626
- if (movies.length) sections.push({ title: t('tr_movies'), items: movies });
3627
- if (series.length) sections.push({ title: t('tr_series'), items: series });
3628
- renderRails(sections, true);
3629
  } catch (e) {
3630
  railsEl.innerHTML = '';
3631
  railsEl.appendChild(stateBox(t('err_failed', { e: esc(e.message || t('err_generic')) }), true, loadTranslated));
@@ -3857,6 +3888,7 @@ function playTranslatedUrl(url, title, playlist, meta) {
3857
  v.addEventListener('ended', () => { const c = window.__pcPlaylist; if (c && typeof c.next === 'function') c.next(); });
3858
  // Tangazo la video kwanza (likishindikana/likiruka, filamu inaanza mara moja)
3859
  v.src = url;
 
3860
  // Route ya player: #/translated/ID/play?se=..&ep=..
3861
  try {
3862
  const id = currentTranslatedDetail && currentTranslatedDetail.id;
 
1481
  // Id zake zinaanza na 'n2-' ili zisigongane na za chanzo cha zamani.
1482
  const TRANSLATED2_BASE = JM_CONFIG.CONTENT_URL + '/functions/v1/movie-zilizotafsriwa2';
1483
  const TR2_PREFIX = 'n2-';
1484
+ // Model iliyofunzwa (train.py -> HF Model). Ikikosekana, app inafanya kazi kama kawaida (Trending = mpya zaidi).
1485
+ const TR_MODEL_URL = 'https://huggingface.co/jaynesmaxtv/translated-recommender/resolve/main/model.json';
1486
+ let trModelP = null;
1487
+ function loadTrModel() {
1488
+ if (!trModelP) trModelP = fetch(TR_MODEL_URL, { cache: 'no-cache' }).then(r => r.ok ? r.json() : null).catch(() => null);
1489
+ return trModelP;
1490
+ }
1491
+ function logTrPlay(id) { // rekodi uchezaji bila kuzuia player; kitambulisho cha kifaa ni cha nasibu (hakuna jina/email)
1492
+ if (!id) return;
1493
+ let dev = '';
1494
+ 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 (_) {}
1495
+ fetch(TRANSLATED2_BASE + '?action=play', { method: 'POST', keepalive: true,
1496
+ headers: { apikey: SUPABASE_ANON_KEY, 'Content-Type': 'application/json' },
1497
+ body: JSON.stringify({ movie_id: String(id), device_id: dev }) }).catch(() => {});
1498
+ }
1499
+ // Safu: 🔥 Trending (kwa model, au mpya zaidi kama data haitoshi) -> kila DJ (Dj Mack kwanza) -> Movie -> Series
1500
+ function buildTranslatedSections(items, model) {
1501
+ const pop = (model && model.popularity) || {}, sections = [];
1502
+ const hot = items.filter(it => pop[it.id] > 0).sort((a, b) => pop[b.id] - pop[a.id]);
1503
+ const trending = (hot.length >= 3 ? hot : items).slice(0, 12); // orodha tayari ni mpya -> zamani
1504
+ if (trending.length) sections.push({ title: '🔥 Trending', items: trending });
1505
+ const byDj = {};
1506
+ items.forEach(it => {
1507
+ const dj = String(it.subtitle || '').trim();
1508
+ if (!dj || dj === 'Series' || dj === 'Movie') return;
1509
+ const k = dj.toLowerCase();
1510
+ (byDj[k] = byDj[k] || { name: dj, list: [] }).list.push(it);
1511
+ });
1512
+ Object.values(byDj).filter(g => g.list.length >= 2)
1513
+ .sort((a, b) => (/mack/i.test(b.name) - /mack/i.test(a.name)) || b.list.length - a.list.length)
1514
+ .forEach(g => sections.push({ title: '🎙 ' + g.name, items: g.list }));
1515
+ const series = items.filter(it => it.subtitle === 'Series'), movies = items.filter(it => it.subtitle !== 'Series');
1516
+ if (movies.length) sections.push({ title: t('tr_movies'), items: movies });
1517
+ if (series.length) sections.push({ title: t('tr_series'), items: series });
1518
+ return sections;
1519
+ }
1520
  async function fetchTranslatedMovie(id) { // -> { ok, error?, movie } kutoka chanzo sahihi
1521
  const isNew = String(id).startsWith(TR2_PREFIX);
1522
  const url = isNew ? TRANSLATED2_BASE + '?id=' + encodeURIComponent(String(id).slice(TR2_PREFIX.length))
 
3655
  heroWrap.innerHTML = ''; tabsEl.style.display = 'none';
3656
  renderSkeletonRails(2);
3657
  try {
3658
+ const [items, model] = await Promise.all([fetchTranslatedList(), loadTrModel()]);
3659
+ renderRails(buildTranslatedSections(items, model), true);
 
 
 
 
 
3660
  } catch (e) {
3661
  railsEl.innerHTML = '';
3662
  railsEl.appendChild(stateBox(t('err_failed', { e: esc(e.message || t('err_generic')) }), true, loadTranslated));
 
3888
  v.addEventListener('ended', () => { const c = window.__pcPlaylist; if (c && typeof c.next === 'function') c.next(); });
3889
  // Tangazo la video kwanza (likishindikana/likiruka, filamu inaanza mara moja)
3890
  v.src = url;
3891
+ try { logTrPlay(currentTranslatedDetail && currentTranslatedDetail.id); } catch (_) {}
3892
  // Route ya player: #/translated/ID/play?se=..&ep=..
3893
  try {
3894
  const id = currentTranslatedDetail && currentTranslatedDetail.id;