Fix page detection and download loop issues

Fixed:
1. Page detection now looks for exact 'X pages' pattern in divs
2. Validates page count is reasonable (1-100)
3. Download loop continues even if one manga fails
4. Added comprehensive error handling and logging
5. Logs background responses to verify downloads
This commit is contained in:
renato97
2025-11-04 05:29:05 +00:00
parent 1b1ab08808
commit acaea82b77

View File

@@ -311,12 +311,36 @@
const parser = new DOMParser(); const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html'); const doc = parser.parseFromString(html, 'text/html');
// Detectar páginas - Múltiples patrones // Detectar páginas - Patrón ESPECÍFICO para galerías
let actualTotalPages = 1; let actualTotalPages = 1;
console.log('🔍 Iniciando detección de páginas para:', manga.title); console.log('🔍 Iniciando detección de páginas para:', manga.title);
const pageInfo = doc.querySelector('.gpc, .gt, #gdn + span'); // Buscar en TODOS los divs para encontrar el conteo de páginas
let foundPageCount = false;
const allDivs = doc.querySelectorAll('div');
console.log(`🔍 Buscando en ${allDivs.length} divs...`);
for (let div of allDivs) {
const text = div.textContent.trim();
// Patrón específico: número seguido de "pages" o "page"
const pageMatch = text.match(/^(\d+)\s+pages?$/i);
if (pageMatch) {
const pageCount = parseInt(pageMatch[1]);
// Validar que sea un número razonable (1-100 páginas)
if (pageCount > 0 && pageCount <= 100) {
actualTotalPages = pageCount;
foundPageCount = true;
console.log(`✓ Patrón específico "X pages": ${actualTotalPages} páginas (div: ${div.className})`);
break;
}
}
}
// Si no se encontró, usar patrones alternativos
if (!foundPageCount) {
console.log('⚠️ No se encontró patrón específico, buscando alternativas...');
const pageInfo = doc.querySelector('.gpc, .gt, #gdn + span');
if (pageInfo) { if (pageInfo) {
const pageText = pageInfo.textContent.trim(); const pageText = pageInfo.textContent.trim();
console.log('🔍 Page info encontrado:', pageText); console.log('🔍 Page info encontrado:', pageText);
@@ -327,29 +351,28 @@
const totalImages = parseInt(pageMatch[1]); const totalImages = parseInt(pageMatch[1]);
actualTotalPages = Math.ceil(totalImages / 20); actualTotalPages = Math.ceil(totalImages / 20);
console.log(`✓ Patrón "Showing": ${totalImages} imágenes = ${actualTotalPages} páginas`); console.log(`✓ Patrón "Showing": ${totalImages} imágenes = ${actualTotalPages} páginas`);
} else { foundPageCount = true;
// Patrón 2: "5 pages" o "X pages"
pageMatch = pageText.match(/(\d+)\s+pages?/i);
if (pageMatch) {
actualTotalPages = parseInt(pageMatch[1]);
console.log(`✓ Patrón "pages": ${actualTotalPages} páginas`);
} }
} }
} }
// Fallback: Buscar en todo el documento // FALLBACK: Solo si no se encontró nada específico
if (actualTotalPages === 1) { if (!foundPageCount) {
console.log('⚠️ Usando fallback (puede ser impreciso)');
const allText = doc.body.textContent; const allText = doc.body.textContent;
const pageMatch = allText.match(/(\d+)\s+pages?/i); // Buscar "Length: X pages" o similar
if (pageMatch) { const lengthMatch = allText.match(/Length[:\s]+(\d+)\s*pages?/i);
actualTotalPages = parseInt(pageMatch[1]); if (lengthMatch) {
console.log(`✓ Fallback: Encontradas ${actualTotalPages} páginas en el documento`); actualTotalPages = parseInt(lengthMatch[1]);
console.log(`✓ Fallback "Length": ${actualTotalPages} páginas`);
} else { } else {
console.log('⚠️ No se detectaron múltiples páginas, asumiendo 1 página'); // Si no hay información, asumir 1 página
console.log('⚠️ No se pudo detectar página count, asumiendo 1 página');
actualTotalPages = 1;
} }
} }
console.log(`📄 Total páginas a procesar: ${actualTotalPages}`); console.log(`📄 Total páginas final a procesar: ${actualTotalPages}`);
// Procesar todas las páginas // Procesar todas las páginas
for (let page = 1; page <= actualTotalPages; page++) { for (let page = 1; page <= actualTotalPages; page++) {
@@ -624,34 +647,47 @@
console.log(`✅ Proceeding with download of ${selectedObjects.length} manga...`); console.log(`✅ Proceeding with download of ${selectedObjects.length} manga...`);
// Descargar cada manga // Descargar cada manga
console.log(`🔄 Starting download loop for ${selectedObjects.length} manga...`);
for (let i = 0; i < selectedObjects.length; i++) { for (let i = 0; i < selectedObjects.length; i++) {
const manga = selectedObjects[i]; const manga = selectedObjects[i];
const title = manga.title ? manga.title.substring(0, 50) : 'Manga sin título'; const title = manga.title ? manga.title.substring(0, 50) : 'Manga sin título';
console.log(`\n--- 📦 MANGA ${i + 1}/${selectedObjects.length}: ${title} ---`);
updateProgress(i, selectedObjects.length, title, `Descargando manga ${i + 1} de ${selectedObjects.length}...`); updateProgress(i, selectedObjects.length, title, `Descargando manga ${i + 1} de ${selectedObjects.length}...`);
try { try {
// Obtener URLs de imágenes // Obtener URLs de imágenes
console.log(`🔍 Getting image URLs for manga ID: ${manga.id}`);
const imageUrls = await getImageUrlsForManga(manga); const imageUrls = await getImageUrlsForManga(manga);
console.log(`${manga.title}: ${imageUrls.length} imágenes encontradas`); console.log(`${manga.title}: ${imageUrls.length} imágenes encontradas`);
// Enviar al background para descarga // Enviar al background para descarga
console.log(`📨 Sending to background script...`);
const response = await chrome.runtime.sendMessage({ const response = await chrome.runtime.sendMessage({
action: 'downloadManga', action: 'downloadManga',
metadata: manga, metadata: manga,
imageUrls: imageUrls imageUrls: imageUrls
}); });
if (!response.success) { console.log(`📨 Background response:`, response);
console.error(`❌ Error descargando ${manga.title}:`, response.error);
if (!response || !response.success) {
console.error(`❌ Error descargando ${manga.title}:`, response ? response.error : 'No response');
} else { } else {
console.log(`✅ Descargado: ${manga.title}`); console.log(`✅ Descargado exitosamente: ${manga.title}`);
} }
} catch (error) { } catch (error) {
console.error(` Error en manga ${manga.title}:`, error.message); console.error(`❌❌ EXCEPTION in manga ${manga.title}:`, error);
console.error(`Stack trace:`, error.stack);
// Continue with next manga even if this one fails
} }
console.log(`--- ✅ Finished manga ${i + 1} ---\n`);
} }
console.log('🔄 Download loop completed!');
updateProgress(selectedObjects.length, selectedObjects.length, '¡Completado!', 'Descarga finalizada'); updateProgress(selectedObjects.length, selectedObjects.length, '¡Completado!', 'Descarga finalizada');
setTimeout(() => { setTimeout(() => {
hideProgress(); hideProgress();