fix editor, quick update x-tcdn-token M+

This commit is contained in:
Filipinos 2025-06-27 12:08:44 +02:00
parent c321f6321e
commit f031f9e0d4
2 changed files with 92 additions and 6 deletions

View File

@ -49,6 +49,10 @@
<span class="header-search-icon"></span> <span class="header-search-icon"></span>
</div> </div>
<div class="header-actions"> <div class="header-actions">
<button class="btn-header-action" id="movistarTokenStatusBtn" title="Estado y actualización del token de Movistar+" style="display: none;">
<span class="icon-placeholder" style="font-style: normal;">Ⓜ️</span>
<span class="btn-text" id="movistarTokenStatusText">Movistar</span>
</button>
<button class="btn-header-action" id="openEditorBtn" title="Editor Avanzado"> <button class="btn-header-action" id="openEditorBtn" title="Editor Avanzado">
<span class="icon-placeholder" style="font-family: FontAwesome;"></span><span class="btn-text" data-lang-key="advancedEditorButton">Editor</span> <span class="icon-placeholder" style="font-family: FontAwesome;"></span><span class="btn-text" data-lang-key="advancedEditorButton">Editor</span>
</button> </button>
@ -287,7 +291,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p class="text-secondary"><span data-lang-key="multiEditDescription" data-lang-vars='{"count": "#multiEditChannelCount"}'>Aplica cambios a todos los ... canales seleccionados...</span></p> <p class="text-secondary">Aplica cambios a todos los <strong id="multiEditChannelCount">0</strong> canales seleccionados.</p>
<div class="multi-edit-field"> <div class="multi-edit-field">
<div class="form-check form-switch"><input class="form-check-input" type="checkbox" id="multiEditEnableGroup"><label for="multiEditEnableGroup" data-lang-key="changeGroupLabel">Cambiar Grupo</label></div> <div class="form-check form-switch"><input class="form-check-input" type="checkbox" id="multiEditEnableGroup"><label for="multiEditEnableGroup" data-lang-key="changeGroupLabel">Cambiar Grupo</label></div>

View File

@ -190,6 +190,10 @@ $(document).ready(async function () {
if (typeof MovistarTokenHandler !== 'undefined' && typeof MovistarTokenHandler.setLogCallback === 'function') { if (typeof MovistarTokenHandler !== 'undefined' && typeof MovistarTokenHandler.setLogCallback === 'function') {
MovistarTokenHandler.setLogCallback(logToMovistarSettingsUI); MovistarTokenHandler.setLogCallback(logToMovistarSettingsUI);
loadAndDisplayInitialMovistarStatus(); loadAndDisplayInitialMovistarStatus();
setInterval(async () => {
const status = await window.MovistarTokenHandler.getShortTokenStatus();
updateMovistarTokenStatusButton(status.expiry);
}, 60000); // Update every minute
} }
if (typeof initXCodecPanelManagement === 'function') { if (typeof initXCodecPanelManagement === 'function') {
initXCodecPanelManagement(); initXCodecPanelManagement();
@ -778,6 +782,7 @@ function bindEvents() {
$('#movistarCopyCdnBtnSettings').on('click', handleMovistarCopyCdnToken); $('#movistarCopyCdnBtnSettings').on('click', handleMovistarCopyCdnToken);
$('#movistarApplyCdnToChannelsBtnSettings').on('click', handleMovistarApplyCdnToChannels); $('#movistarApplyCdnToChannelsBtnSettings').on('click', handleMovistarApplyCdnToChannels);
$('#clearMovistarVodCacheBtnSettings').on('click', handleClearMovistarVodCache); $('#clearMovistarVodCacheBtnSettings').on('click', handleClearMovistarVodCache);
$('#movistarTokenStatusBtn').on('click', handleMovistarTokenStatusButtonClick);
$('#loadMovistarVODBtn').on('click', loadMovistarVODData); $('#loadMovistarVODBtn').on('click', loadMovistarVODData);
@ -999,6 +1004,8 @@ function updateMovistarCdnTokenUI(token, expiryTimestamp) {
} }
$('#movistarCopyCdnBtnSettings').prop('disabled', !token); $('#movistarCopyCdnBtnSettings').prop('disabled', !token);
$('#movistarApplyCdnToChannelsBtnSettings').prop('disabled', !token || (expiryTimestamp <= Math.floor(Date.now()/1000))); $('#movistarApplyCdnToChannelsBtnSettings').prop('disabled', !token || (expiryTimestamp <= Math.floor(Date.now()/1000)));
updateMovistarTokenStatusButton(expiryTimestamp);
} }
async function loadAndRenderLongTokensListSettings() { async function loadAndRenderLongTokensListSettings() {
@ -1291,18 +1298,29 @@ async function handleMovistarCopyCdnToken() {
} }
} }
async function handleMovistarApplyCdnToChannels() { async function handleMovistarApplyCdnToChannels(confirmed = false) {
if (!confirmed) {
const userConfirmed = await showConfirmationModal(
"Esto aplicará el token CDN actual a todos los canales de Movistar+ en la lista. ¿Continuar?",
"Confirmar Aplicación de Token", "Sí, Aplicar", "btn-success"
);
if (!userConfirmed) {
logToMovistarSettingsUI("Aplicación de token a canales cancelada por el usuario.", "info");
return { updatedCount: 0, success: false };
}
}
logToMovistarSettingsUI("Aplicando token CDN a canales Movistar+...", "info"); logToMovistarSettingsUI("Aplicando token CDN a canales Movistar+...", "info");
const status = await window.MovistarTokenHandler.getShortTokenStatus(); const status = await window.MovistarTokenHandler.getShortTokenStatus();
if (!status.token || status.expiry <= Math.floor(Date.now()/1000)) { if (!status.token || status.expiry <= Math.floor(Date.now()/1000)) {
showNotification("El token CDN actual no es válido o ha expirado. Refréscalo primero.", "warning"); showNotification("El token CDN actual no es válido o ha expirado. Refréscalo primero.", "warning");
logToMovistarSettingsUI("Aplicación cancelada: token CDN no válido/expirado.", "warning"); logToMovistarSettingsUI("Aplicación cancelada: token CDN no válido/expirado.", "warning");
return; return { updatedCount: 0, success: false };
} }
if (!channels || channels.length === 0) { if (!channels || channels.length === 0) {
showNotification("No hay lista M3U cargada para aplicar el token.", "info"); showNotification("No hay lista M3U cargada para aplicar el token.", "info");
logToMovistarSettingsUI("Aplicación cancelada: no hay canales cargados.", "info"); logToMovistarSettingsUI("Aplicación cancelada: no hay canales cargados.", "info");
return; return { updatedCount: 0, success: false };
} }
showLoading(true, "Aplicando token a canales..."); showLoading(true, "Aplicando token a canales...");
@ -1322,15 +1340,14 @@ async function handleMovistarApplyCdnToChannels() {
}); });
if (updatedCount > 0) { if (updatedCount > 0) {
showNotification(`Token CDN aplicado a ${updatedCount} canales de Movistar+.`, "success");
logToMovistarSettingsUI(`Token aplicado a ${updatedCount} canales.`, "success"); logToMovistarSettingsUI(`Token aplicado a ${updatedCount} canales.`, "success");
regenerateCurrentM3UContentFromString(); regenerateCurrentM3UContentFromString();
filterAndRenderChannels(); filterAndRenderChannels();
} else { } else {
showNotification("No se encontraron canales de Movistar+ para aplicar el token.", "info");
logToMovistarSettingsUI("No se encontraron canales Movistar+.", "info"); logToMovistarSettingsUI("No se encontraron canales Movistar+.", "info");
} }
showLoading(false); showLoading(false);
return { updatedCount, success: true };
} }
async function handleClearMovistarVodCache() { async function handleClearMovistarVodCache() {
@ -1456,3 +1473,68 @@ function setActivePlayer(id) {
} }
}); });
} }
function updateMovistarTokenStatusButton(expiryTimestamp) {
const $statusBtn = $('#movistarTokenStatusBtn');
if (!expiryTimestamp) {
$statusBtn.hide();
return;
}
$statusBtn.show();
const nowSeconds = Math.floor(Date.now() / 1000);
const remainingSeconds = expiryTimestamp - nowSeconds;
const $statusText = $('#movistarTokenStatusText');
if (remainingSeconds <= 0) {
$statusText.text('M+ Expirado');
$statusBtn.removeClass('btn-ok btn-warning').addClass('btn-danger');
} else {
const hours = Math.floor(remainingSeconds / 3600);
const minutes = Math.floor((remainingSeconds % 3600) / 60);
$statusText.text(`M+ ${hours}h ${minutes}m`);
if (remainingSeconds < 3600) { // Less than 1 hour
$statusBtn.removeClass('btn-ok btn-danger').addClass('btn-warning');
} else {
$statusBtn.removeClass('btn-warning btn-danger').addClass('btn-ok');
}
}
}
async function handleMovistarTokenStatusButtonClick() {
const confirmed = await showConfirmationModal(
"¿Quieres forzar la actualización del token de Movistar+ y aplicarlo a los canales de la lista actual?",
"Actualizar Token Movistar+",
"Sí, Actualizar y Aplicar",
"btn-primary"
);
if (!confirmed) return;
showLoading(true, "Actualizando y aplicando token de Movistar+...");
try {
const refreshResult = await window.MovistarTokenHandler.refreshCdnToken(true);
if (!refreshResult.success) {
throw new Error(refreshResult.message);
}
showNotification("Token CDN refrescado con éxito. Aplicando a canales...", "info");
const applyResult = await handleMovistarApplyCdnToChannels(true); // Pass true to avoid double confirmation
if (applyResult.updatedCount > 0) {
showNotification(`Token aplicado a ${applyResult.updatedCount} canales de Movistar+.`, "success");
} else {
showNotification("No se encontraron canales de Movistar+ para actualizar en la lista.", "info");
}
// Update UI for both settings and header button
updateMovistarCdnTokenUI(refreshResult.shortToken, refreshResult.shortTokenExpiry);
} catch (error) {
showNotification(`Error al actualizar token: ${error.message}`, "error");
} finally {
showLoading(false);
}
}