added manual matching on books
This commit is contained in:
@@ -11,6 +11,7 @@ let isLocal = false;
|
||||
let currentLanguage = null;
|
||||
let uniqueLanguages = [];
|
||||
let isSortAscending = true;
|
||||
let manualExtensionBookId = null;
|
||||
|
||||
const chapterPagination = Object.create(PaginationManager);
|
||||
chapterPagination.init(6, () => renderChapterList());
|
||||
@@ -36,6 +37,37 @@ async function init() {
|
||||
await loadChapters();
|
||||
await setupAddToListButton();
|
||||
|
||||
document.getElementById('manual-match-btn')?.addEventListener('click', () => {
|
||||
const select = document.getElementById('provider-filter');
|
||||
const provider = select.value;
|
||||
|
||||
// Obtener título para prellenar
|
||||
const currentTitle = bookData?.title?.romaji || bookData?.title?.english || '';
|
||||
|
||||
MatchModal.open({
|
||||
provider: provider,
|
||||
initialQuery: currentTitle,
|
||||
// Define CÓMO buscar
|
||||
onSearch: async (query, prov) => {
|
||||
const res = await fetch(`/api/search/books/${prov}?q=${encodeURIComponent(query)}`);
|
||||
const data = await res.json();
|
||||
return data.results || [];
|
||||
},
|
||||
// Define QUÉ hacer al seleccionar
|
||||
onSelect: (item) => {
|
||||
console.log("Selected Book ID:", item.id);
|
||||
manualExtensionBookId = item.id;
|
||||
|
||||
// Lógica existente de tu book.js para recargar caps
|
||||
loadChapters(provider);
|
||||
|
||||
// Feedback visual en el botón
|
||||
const btn = document.getElementById('manual-match-btn');
|
||||
if(btn) btn.style.color = '#22c55e';
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
} catch (err) {
|
||||
console.error("Init Error:", err);
|
||||
showError("Error loading book");
|
||||
@@ -311,6 +343,9 @@ async function loadChapters(targetProvider = null) {
|
||||
const source = extensionName || 'anilist';
|
||||
fetchUrl = `/api/book/${bookId}/chapters?source=${source}`;
|
||||
if (targetProvider !== 'all') fetchUrl += `&provider=${targetProvider}`;
|
||||
if (manualExtensionBookId && targetProvider !== 'all') {
|
||||
fetchUrl += `&extensionBookId=${manualExtensionBookId}`;
|
||||
}
|
||||
}
|
||||
|
||||
const res = await fetch(fetchUrl);
|
||||
@@ -515,6 +550,8 @@ async function loadAvailableExtensions() {
|
||||
|
||||
function setupProviderFilter() {
|
||||
const select = document.getElementById('provider-filter');
|
||||
const manualBtn = document.getElementById('manual-match-btn'); // NUEVO
|
||||
|
||||
if (!select) return;
|
||||
select.style.display = 'inline-block';
|
||||
select.innerHTML = '';
|
||||
@@ -538,11 +575,32 @@ function setupProviderFilter() {
|
||||
select.appendChild(opt);
|
||||
});
|
||||
|
||||
// Lógica de selección inicial
|
||||
if (isLocal) select.value = 'local';
|
||||
else if (extensionName && availableExtensions.includes(extensionName)) select.value = extensionName;
|
||||
else if (availableExtensions.length > 0) select.value = availableExtensions[0];
|
||||
|
||||
select.onchange = () => loadChapters(select.value);
|
||||
// Visibilidad inicial del botón manual
|
||||
updateManualButtonVisibility(select.value);
|
||||
|
||||
select.onchange = () => {
|
||||
// Al cambiar de proveedor, reseteamos la selección manual para evitar conflictos
|
||||
manualExtensionBookId = null;
|
||||
updateManualButtonVisibility(select.value);
|
||||
loadChapters(select.value);
|
||||
};
|
||||
}
|
||||
|
||||
function updateManualButtonVisibility(provider) {
|
||||
const btn = document.getElementById('manual-match-btn');
|
||||
if (!btn) return;
|
||||
|
||||
// Solo mostrar si es un proveedor específico (no 'all' ni 'local')
|
||||
if (provider !== 'all' && provider !== 'local') {
|
||||
btn.style.display = 'flex';
|
||||
} else {
|
||||
btn.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function updateExtensionPill() {
|
||||
@@ -569,9 +627,9 @@ function updateCustomAddButton() {
|
||||
}
|
||||
|
||||
function setupModalClickOutside() {
|
||||
const modal = document.getElementById('add-list-modal');
|
||||
if (modal) {
|
||||
modal.addEventListener('click', (e) => {
|
||||
const addListModal = document.getElementById('add-list-modal');
|
||||
if (addListModal) {
|
||||
addListModal.addEventListener('click', (e) => {
|
||||
if (e.target.id === 'add-list-modal') ListModalManager.close();
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user