feat: Añadir sincronización en tiempo real para la gestión de aplicaciones

This commit is contained in:
Naiel
2026-02-25 13:20:43 +00:00
parent d905e86bbf
commit 0ef6e5a233

View File

@@ -1731,6 +1731,8 @@ var TS_INSTALLED_APPS_CACHE_KEY = '';
var TS_INSTALLED_APPS_LOADING = false;
var TS_ESSENTIAL_APPS = new Set(['index', 'personas', 'dataman']);
var TS_LOCKED_APPS = new Set(['index', 'personas', 'dataman']);
var TS_APPS_SYNC_LISTENER_ID = null;
var TS_APPS_SYNC_REFRESH_PENDING = false;
function TS_getAppInstallStorageKey() {
var dbName = 'telesec';
@@ -2250,6 +2252,90 @@ function TS_resetAppsToDefault() {
});
}
function TS_queueAppsUIRefresh() {
if (TS_APPS_SYNC_REFRESH_PENDING) return;
TS_APPS_SYNC_REFRESH_PENDING = true;
setTimeout(() => {
TS_APPS_SYNC_REFRESH_PENDING = false;
try {
SetPages();
var currentPage = location.hash.replace('#', '').split('?')[0].split(',')[0];
if (currentPage === 'tienda_apps' && PAGES.tienda_apps && typeof PAGES.tienda_apps.index === 'function') {
PAGES.tienda_apps.index();
}
} catch (e) {
console.warn('Apps UI refresh warning', e);
}
}, 50);
}
function TS_applyInstalledAppsFromConfigValue(raw, key) {
if (key !== TS_getAppInstallDocId()) return;
if (raw == null) {
TS_setInstalledAppsCache(TS_buildDefaultInstalledSet());
TS_queueAppsUIRefresh();
return;
}
if (typeof raw === 'string') {
TS_decrypt(
raw,
SECRET,
(decrypted) => {
var parsed = TS_parseInstalledAppsPayload(decrypted);
if (parsed) {
TS_setInstalledAppsCache(parsed);
TS_queueAppsUIRefresh();
}
},
'config',
key
);
return;
}
var parsed = TS_parseInstalledAppsPayload(raw);
if (parsed) {
TS_setInstalledAppsCache(parsed);
TS_queueAppsUIRefresh();
}
}
function TS_applyExternalAppsFromConfigValue(raw, key) {
if (key !== TS_getExternalAppsDocId()) return;
if (raw == null) {
TS_setExternalAppsCache([]);
TS_queueAppsUIRefresh();
return;
}
if (typeof raw === 'string') {
TS_decrypt(
raw,
SECRET,
(decrypted) => {
var parsed = TS_parseExternalAppsPayload(decrypted);
TS_setExternalAppsCache(parsed);
TS_applyExternalAppsRegistry(TS_EXTERNAL_APPS_CACHE);
TS_queueAppsUIRefresh();
},
'config',
key
);
return;
}
var parsed = TS_parseExternalAppsPayload(raw);
TS_setExternalAppsCache(parsed);
TS_applyExternalAppsRegistry(TS_EXTERNAL_APPS_CACHE);
TS_queueAppsUIRefresh();
}
function TS_initAppsRealtimeSync() {
if (!window.DB || typeof DB.map !== 'function') return;
if (TS_APPS_SYNC_LISTENER_ID) return;
TS_APPS_SYNC_LISTENER_ID = DB.map('config', (data, key) => {
TS_applyInstalledAppsFromConfigValue(data, key);
TS_applyExternalAppsFromConfigValue(data, key);
});
}
function checkRole(role) {
var roles = SUB_LOGGED_IN_DETAILS.Roles || '';
var rolesArr = roles.split(',');
@@ -2260,6 +2346,7 @@ function checkRole(role) {
}
}
function SetPages() {
TS_initAppsRealtimeSync();
var expectedExternalKey = TS_getExternalAppsDocId();
if (!TS_EXTERNAL_APPS_READY || TS_EXTERNAL_APPS_CACHE_KEY !== expectedExternalKey) {
TS_loadExternalAppsFromDB().then(() => {