/** * New tabs functionality */ // Render series recommendation card (same design as anime recommendations) function renderSeriesRecommendationCard(series) { let coverImage = series.cover_image || ''; // Convert relative poster.php URLs to absolute URLs if (coverImage.startsWith('/poster.php?url=')) { // Extract the actual image URL from the poster.php URL const actualUrl = coverImage.replace('/poster.php?url=', ''); coverImage = actualUrl; } // If it's a relative path, make it absolute using FS7 base URL else if (coverImage.startsWith('/')) { coverImage = 'https://fs7.lol' + coverImage; } return `
🎺 Série TV populaire
${escapeHtml(series.title)}
${coverImage ? `` : ''}
📺 Série TV
`; } // Load series episodes (redirects to series tab with search) async function loadSeriesEpisodes(url, title) { // Switch to series tab switchTab('series'); // Fill search input with the series title const searchInput = document.getElementById('seriesSearchInput'); if (searchInput) { searchInput.value = title; // Trigger search setTimeout(() => { if (typeof handleSeriesSearch === 'function') { handleSeriesSearch(); } }, 300); } } // Render series release card (same design as anime releases) function renderSeriesReleaseCard(series) { let coverImage = series.cover_image || ''; // Convert relative poster.php URLs to absolute URLs if (coverImage.startsWith('/poster.php?url=')) { // Extract the actual image URL from the poster.php URL const actualUrl = coverImage.replace('/poster.php?url=', ''); coverImage = actualUrl; } // If it's a relative path, make it absolute using FS7 base URL else if (coverImage.startsWith('/')) { coverImage = 'https://fs7.lol' + coverImage; } return `
${escapeHtml(series.title)}
${coverImage ? `` : ''}
📺 Série TV • Nouveau
`; } // Load series recommendations for the Series tab async function loadSeriesRecommendations() { try { const container = document.getElementById('seriesRecommendationsList'); if (!container) return; container.innerHTML = '
Chargement des recommandations séries...
'; // Search for popular series from all providers (including FS7) const searchTerms = ['Breaking Bad', 'Game of Thrones', 'Stranger Things', 'The Walking Dead', 'The Last of Us', 'Wednesday', 'Squid Game', 'Peaky Blinders', 'House of the Dragon', 'The Witcher']; const allSeries = []; for (const term of searchTerms) { try { const response = await fetch(`${API_BASE}/series/search?q=${encodeURIComponent(term)}&lang=vf`); const data = await response.json(); // Collect results from all providers, especially fs7 if (data.results) { // Prioritize fs7 results if (data.results['fs7'] && data.results['fs7'].length > 0) { allSeries.push(...data.results['fs7'].slice(0, 2)); } } } catch (error) { console.warn(`Error searching for ${term}:`, error); } if (allSeries.length >= 12) break; // Limit to 12 series total } if (allSeries.length > 0) { container.innerHTML = ``; } else { container.innerHTML = '
Aucune recommandation trouvée
'; } } catch (error) { console.error('Error loading series recommendations:', error); const container = document.getElementById('seriesRecommendationsList'); if (container) container.innerHTML = '
Erreur lors du chargement
'; } } // Load anime releases for the Anime tab async function loadAnimeReleases() { try { const container = document.getElementById('animeReleasesList'); if (!container) return; container.innerHTML = '
Chargement des dernières sorties anime...
'; // Use the existing releases API const response = await fetch(`${API_BASE}/releases/latest?limit=12`); const data = await response.json(); if (data.releases && data.releases.length > 0) { container.innerHTML = ``; } else { container.innerHTML = '
Aucune sortie trouvée
'; } } catch (error) { console.error('Error loading anime releases:', error); const container = document.getElementById('animeReleasesList'); if (container) container.innerHTML = '
Erreur lors du chargement
'; } } // Load series releases for the Series tab async function loadSeriesReleases() { try { const container = document.getElementById('seriesReleasesList'); if (!container) return; container.innerHTML = '
Chargement des dernières séries TV...
'; // Search for popular series from all providers (including FS7) const searchTerms = ['Breaking Bad', 'Game of Thrones', 'Stranger Things', 'The Walking Dead', 'The Last of Us', 'Wednesday', 'Squid Game', 'Peaky Blinders']; const allSeries = []; for (const term of searchTerms) { try { const response = await fetch(`${API_BASE}/series/search?q=${encodeURIComponent(term)}&lang=vf`); const data = await response.json(); // Collect results from all providers, especially fs7 if (data.results) { // Prioritize fs7 results if (data.results['fs7'] && data.results['fs7'].length > 0) { allSeries.push(...data.results['fs7'].slice(0, 2)); } // Add results from other providers if needed for (const [provider, results] of Object.entries(data.results)) { if (provider !== 'fs7' && results.length > 0 && allSeries.length < 12) { allSeries.push(...results.slice(0, 1)); } } } } catch (error) { console.warn(`Error searching for ${term}:`, error); } if (allSeries.length >= 12) break; // Limit to 12 series total } if (allSeries.length > 0) { container.innerHTML = ``; } else { container.innerHTML = `

Aucune série trouvée

Utilisez l'onglet "Recherche" pour trouver des séries spécifiques

`; } } catch (error) { console.error('Error loading series releases:', error); const container = document.getElementById('seriesReleasesList'); if (container) { container.innerHTML = `

❌ Erreur lors du chargement des séries

${error.message}

`; } } } // Load providers grid for the Providers tab async function loadProvidersGrid() { try { const container = document.getElementById('providersGrid'); if (!container) return; container.innerHTML = '
Chargement des fournisseurs...
'; const response = await fetch(`${API_BASE}/providers`); const data = await response.json(); let html = ''; // Section Anime providers html += '

🎬 Sites Anime

'; html += '
'; const animeProviders = Object.entries(data.anime_providers || {}); if (animeProviders.length > 0) { animeProviders.forEach(([id, provider]) => { const domains = provider.domains || []; html += `
${provider.icon} ${provider.name}
${domains.length > 0 ? ` ` : ''}
${domains.length > 0 ? ` ` : ''}
`; }); } else { html += '
Aucun fournisseur anime disponible
'; } html += '
'; // Section File hosts html += '

💾 Hébergeurs de fichiers

'; html += '
'; const fileHosts = Object.entries(data.file_hosts || {}); if (fileHosts.length > 0) { fileHosts.forEach(([id, host]) => { html += `
${host.icon} ${host.name}
`; }); } else { html += '
Aucun hébergeur disponible
'; } html += '
'; container.innerHTML = html; } catch (error) { console.error('Error loading providers:', error); const container = document.getElementById('providersGrid'); if (container) { container.innerHTML = `

❌ Erreur lors du chargement des fournisseurs

${error.message}

`; } } } // Show provider search (redirects to search tab) function showProviderSearch(providerId) { switchTab('search'); // Could pre-fill search with provider-specific content } // Show download info (explains how to download) function showDownloadInfo() { alert('💡 Pour télécharger un fichier:\n\n1. Utilisez l\'onglet "Recherche"\n2. Entrez le nom de l\'anime/série\n3. Cliquez sur "Télécharger" sur un épisode\n\nOu bien:\n- Copiez directement un lien de téléchargement dans la barre d\'adresse de votre navigateur'); } // Make additional functions available globally window.showProviderSearch = showProviderSearch; window.showDownloadInfo = showDownloadInfo; // Initialize new tabs when they're first opened document.addEventListener('DOMContentLoaded', () => { // Wait for main.js to be loaded setTimeout(() => { // Initialize watchlist tab flag window.watchlistTabLoaded = false; let watchlistRefreshInterval = null; // Override switchTab to load content when opening new tabs const originalSwitchTab = window.switchTab; if (originalSwitchTab) { window.switchTab = function(tabName) { // Clear watchlist interval when switching away from watchlist if (tabName !== 'watchlist' && watchlistRefreshInterval) { clearInterval(watchlistRefreshInterval); watchlistRefreshInterval = null; } // Call original switchTab first originalSwitchTab(tabName); // Load content for new tabs (after a small delay for DOM to update) setTimeout(() => { if (tabName === 'anime') { if (!window.animeTabLoaded) { loadAnimeReleases(); window.animeTabLoaded = true; } } else if (tabName === 'series') { if (!window.seriesTabLoaded) { loadSeriesRecommendations(); loadSeriesReleases(); window.seriesTabLoaded = true; } } else if (tabName === 'providers') { if (!window.providersTabLoaded) { loadProvidersGrid(); window.providersTabLoaded = true; } } else if (tabName === 'watchlist') { if (!window.watchlistTabLoaded) { if (typeof displayWatchlist === 'function') { displayWatchlist(); } window.watchlistTabLoaded = true; // Start 30-second auto-refresh interval if (typeof displayWatchlist === 'function') { watchlistRefreshInterval = setInterval(() => { displayWatchlist(); }, 30000); } } } }, 100); }; } }, 500); }); document.addEventListener('DOMContentLoaded', () => { // Wait for main.js to be loaded setTimeout(() => { // Override switchTab to load content when opening new tabs const originalSwitchTab = window.switchTab; if (originalSwitchTab) { window.switchTab = function(tabName) { // Call original switchTab first originalSwitchTab(tabName); // Load content for new tabs (after a small delay for DOM to update) setTimeout(() => { if (tabName === 'anime') { if (!window.animeTabLoaded) { loadAnimeReleases(); window.animeTabLoaded = true; } } else if (tabName === 'series') { if (!window.seriesTabLoaded) { loadSeriesRecommendations(); loadSeriesReleases(); window.seriesTabLoaded = true; } } else if (tabName === 'providers') { if (!window.providersTabLoaded) { loadProvidersGrid(); window.providersTabLoaded = true; } } else if (tabName === 'watchlist') { // Watchlist is handled by its own page window.location.href = '/watchlist'; } }, 100); }; } }, 500); }); // Make functions available globally window.loadSeriesEpisodes = loadSeriesEpisodes; window.loadSeriesRecommendations = loadSeriesRecommendations; window.loadAnimeReleases = loadAnimeReleases; window.loadSeriesReleases = loadSeriesReleases; window.loadProvidersGrid = loadProvidersGrid;