fix editor, quick update x-tcdn-token M+
This commit is contained in:
parent
c321f6321e
commit
f031f9e0d4
@ -49,6 +49,10 @@
|
||||
<span class="header-search-icon"></span>
|
||||
</div>
|
||||
<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">
|
||||
<span class="icon-placeholder" style="font-family: FontAwesome;"></span><span class="btn-text" data-lang-key="advancedEditorButton">Editor</span>
|
||||
</button>
|
||||
@ -287,7 +291,7 @@
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<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="form-check form-switch"><input class="form-check-input" type="checkbox" id="multiEditEnableGroup"><label for="multiEditEnableGroup" data-lang-key="changeGroupLabel">Cambiar Grupo</label></div>
|
||||
|
92
player.js
92
player.js
@ -190,6 +190,10 @@ $(document).ready(async function () {
|
||||
if (typeof MovistarTokenHandler !== 'undefined' && typeof MovistarTokenHandler.setLogCallback === 'function') {
|
||||
MovistarTokenHandler.setLogCallback(logToMovistarSettingsUI);
|
||||
loadAndDisplayInitialMovistarStatus();
|
||||
setInterval(async () => {
|
||||
const status = await window.MovistarTokenHandler.getShortTokenStatus();
|
||||
updateMovistarTokenStatusButton(status.expiry);
|
||||
}, 60000); // Update every minute
|
||||
}
|
||||
if (typeof initXCodecPanelManagement === 'function') {
|
||||
initXCodecPanelManagement();
|
||||
@ -778,6 +782,7 @@ function bindEvents() {
|
||||
$('#movistarCopyCdnBtnSettings').on('click', handleMovistarCopyCdnToken);
|
||||
$('#movistarApplyCdnToChannelsBtnSettings').on('click', handleMovistarApplyCdnToChannels);
|
||||
$('#clearMovistarVodCacheBtnSettings').on('click', handleClearMovistarVodCache);
|
||||
$('#movistarTokenStatusBtn').on('click', handleMovistarTokenStatusButtonClick);
|
||||
|
||||
|
||||
$('#loadMovistarVODBtn').on('click', loadMovistarVODData);
|
||||
@ -999,6 +1004,8 @@ function updateMovistarCdnTokenUI(token, expiryTimestamp) {
|
||||
}
|
||||
$('#movistarCopyCdnBtnSettings').prop('disabled', !token);
|
||||
$('#movistarApplyCdnToChannelsBtnSettings').prop('disabled', !token || (expiryTimestamp <= Math.floor(Date.now()/1000)));
|
||||
|
||||
updateMovistarTokenStatusButton(expiryTimestamp);
|
||||
}
|
||||
|
||||
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");
|
||||
const status = await window.MovistarTokenHandler.getShortTokenStatus();
|
||||
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");
|
||||
logToMovistarSettingsUI("Aplicación cancelada: token CDN no válido/expirado.", "warning");
|
||||
return;
|
||||
return { updatedCount: 0, success: false };
|
||||
}
|
||||
if (!channels || channels.length === 0) {
|
||||
showNotification("No hay lista M3U cargada para aplicar el token.", "info");
|
||||
logToMovistarSettingsUI("Aplicación cancelada: no hay canales cargados.", "info");
|
||||
return;
|
||||
return { updatedCount: 0, success: false };
|
||||
}
|
||||
|
||||
showLoading(true, "Aplicando token a canales...");
|
||||
@ -1322,15 +1340,14 @@ async function handleMovistarApplyCdnToChannels() {
|
||||
});
|
||||
|
||||
if (updatedCount > 0) {
|
||||
showNotification(`Token CDN aplicado a ${updatedCount} canales de Movistar+.`, "success");
|
||||
logToMovistarSettingsUI(`Token aplicado a ${updatedCount} canales.`, "success");
|
||||
regenerateCurrentM3UContentFromString();
|
||||
filterAndRenderChannels();
|
||||
} else {
|
||||
showNotification("No se encontraron canales de Movistar+ para aplicar el token.", "info");
|
||||
logToMovistarSettingsUI("No se encontraron canales Movistar+.", "info");
|
||||
}
|
||||
showLoading(false);
|
||||
return { updatedCount, success: true };
|
||||
}
|
||||
|
||||
async function handleClearMovistarVodCache() {
|
||||
@ -1455,4 +1472,69 @@ function setActivePlayer(id) {
|
||||
taskbarItem.classList.toggle('active', isNowActive);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user