// Anime details module
// Search anime and display details
async function searchAnimeDetails(query) {
const resultsContainer = document.getElementById('animeSearchResults');
if (!resultsContainer) return;
try {
resultsContainer.innerHTML = '
Recherche en cours...
';
// Search MAL and get streaming results in parallel
const [malResponse, streamingResults] = await Promise.allSettled([
fetch(`${API_BASE}/anime/mal/search?q=${encodeURIComponent(query)}&limit=5`),
getProviderSearchResults(query)
]);
let animeData = null;
let malFound = false;
// Check MAL search results
if (malResponse.status === 'fulfilled') {
try {
// malResponse.value is the Response object from fetch
const response = malResponse.value;
// Check if the HTTP request was successful
if (response.ok) {
const data = await response.json();
console.log('MAL search response:', data);
if (data.anime) {
animeData = data.anime;
malFound = true;
}
} else {
console.warn(`MAL search returned HTTP ${response.status}`);
}
} catch (e) {
console.error('Error parsing MAL response:', e);
}
} else {
console.error('MAL search promise rejected:', malResponse.reason);
}
// Display results
if (malFound && animeData) {
// We found MAL data - display anime details card
let html = renderAnimeDetails(animeData);
// Append streaming results if available
if (streamingResults.status === 'fulfilled' && streamingResults.value) {
html += streamingResults.value;
}
resultsContainer.innerHTML = html;
} else {
// MAL found nothing but we have streaming results
if (streamingResults.status === 'fulfilled' && streamingResults.value) {
resultsContainer.innerHTML = `
ℹ️ Aucune fiche trouvée sur MyAnimeList pour "${escapeHtml(query)}"
Essayez le nom en anglais ou japonais (ex: "Frieren: Beyond Journey's End")
`;
}
}
// Get provider search results as HTML
async function getProviderSearchResults(query) {
try {
// Use the existing searchAnime function
const data = await searchAnime(query, 'vostfr', false);
if (!data.results) {
return '';
}
// Build results HTML
let html = `
🎬 Résultats de streaming
`;
// Display results from each provider
for (const [providerId, results] of Object.entries(data.results)) {
if (results && results.length > 0) {
const providersData = await getProvidersInfo();
const provider = providersData.anime_providers[providerId];
results.forEach(anime => {
// Use the same renderAnimeCard function from anime.js for consistency
html += renderAnimeCard(anime, providerId, provider, 'vostfr');
// Auto-load seasons (for Anime-Sama) or episodes
setTimeout(() => {
loadSeasonsForAnime(providerId, encodeURIComponent(anime.url));
}, 100);
});
}
}
html += '