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 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();
|
||||||
|
|||||||
Reference in New Issue
Block a user