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:
76
content.js
76
content.js
@@ -311,12 +311,36 @@
|
||||
const parser = new DOMParser();
|
||||
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;
|
||||
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) {
|
||||
const pageText = pageInfo.textContent.trim();
|
||||
console.log('🔍 Page info encontrado:', pageText);
|
||||
@@ -327,29 +351,28 @@
|
||||
const totalImages = parseInt(pageMatch[1]);
|
||||
actualTotalPages = Math.ceil(totalImages / 20);
|
||||
console.log(`✓ Patrón "Showing": ${totalImages} imágenes = ${actualTotalPages} páginas`);
|
||||
} else {
|
||||
// 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`);
|
||||
foundPageCount = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: Buscar en todo el documento
|
||||
if (actualTotalPages === 1) {
|
||||
// FALLBACK: Solo si no se encontró nada específico
|
||||
if (!foundPageCount) {
|
||||
console.log('⚠️ Usando fallback (puede ser impreciso)');
|
||||
const allText = doc.body.textContent;
|
||||
const pageMatch = allText.match(/(\d+)\s+pages?/i);
|
||||
if (pageMatch) {
|
||||
actualTotalPages = parseInt(pageMatch[1]);
|
||||
console.log(`✓ Fallback: Encontradas ${actualTotalPages} páginas en el documento`);
|
||||
// Buscar "Length: X pages" o similar
|
||||
const lengthMatch = allText.match(/Length[:\s]+(\d+)\s*pages?/i);
|
||||
if (lengthMatch) {
|
||||
actualTotalPages = parseInt(lengthMatch[1]);
|
||||
console.log(`✓ Fallback "Length": ${actualTotalPages} páginas`);
|
||||
} 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
|
||||
for (let page = 1; page <= actualTotalPages; page++) {
|
||||
@@ -624,34 +647,47 @@
|
||||
console.log(`✅ Proceeding with download of ${selectedObjects.length} manga...`);
|
||||
|
||||
// Descargar cada manga
|
||||
console.log(`🔄 Starting download loop for ${selectedObjects.length} manga...`);
|
||||
for (let i = 0; i < selectedObjects.length; i++) {
|
||||
const manga = selectedObjects[i];
|
||||
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}...`);
|
||||
|
||||
try {
|
||||
// Obtener URLs de imágenes
|
||||
console.log(`🔍 Getting image URLs for manga ID: ${manga.id}`);
|
||||
const imageUrls = await getImageUrlsForManga(manga);
|
||||
console.log(`✅ ${manga.title}: ${imageUrls.length} imágenes encontradas`);
|
||||
|
||||
// Enviar al background para descarga
|
||||
console.log(`📨 Sending to background script...`);
|
||||
const response = await chrome.runtime.sendMessage({
|
||||
action: 'downloadManga',
|
||||
metadata: manga,
|
||||
imageUrls: imageUrls
|
||||
});
|
||||
|
||||
if (!response.success) {
|
||||
console.error(`❌ Error descargando ${manga.title}:`, response.error);
|
||||
console.log(`📨 Background response:`, response);
|
||||
|
||||
if (!response || !response.success) {
|
||||
console.error(`❌ Error descargando ${manga.title}:`, response ? response.error : 'No response');
|
||||
} else {
|
||||
console.log(`✅ Descargado: ${manga.title}`);
|
||||
console.log(`✅ Descargado exitosamente: ${manga.title}`);
|
||||
}
|
||||
} 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');
|
||||
setTimeout(() => {
|
||||
hideProgress();
|
||||
|
||||
Reference in New Issue
Block a user