Stand-in import of elffuss/code
One parentless commit with only the files that the open seed tasks touch and the modules they import. The full squashed import (SPEC 8.6) is a later step: this tree is not the cutoff tree. T2T-StandIn-Source-Commit: 43f95b7333efe73aeaebf806023f17bffea27aba
This commit is contained in:
51
web/js/model-cache.js
Normal file
51
web/js/model-cache.js
Normal file
@@ -0,0 +1,51 @@
|
||||
// Arranque de la caché de modelos: (1) pide almacenamiento PERSISTENTE para que
|
||||
// el navegador no desaloje los pesos cacheados, y (2) registra el service worker
|
||||
// (sw.js) y espera a que CONTROLE la página antes de descargar nada — así hasta
|
||||
// la primera descarga queda cacheada. Idempotente y a prueba de fallos.
|
||||
let started = null;
|
||||
|
||||
export function ensureModelCache() {
|
||||
if (started) return started;
|
||||
started = (async () => {
|
||||
try {
|
||||
if (navigator.storage && navigator.storage.persist) {
|
||||
const persisted = navigator.storage.persisted ? await navigator.storage.persisted() : false;
|
||||
const ok = persisted || await navigator.storage.persist();
|
||||
console.log('[elffuss] almacenamiento persistente:', ok);
|
||||
}
|
||||
} catch { /* no soportado */ }
|
||||
|
||||
if (!('serviceWorker' in navigator)) return false;
|
||||
try {
|
||||
await navigator.serviceWorker.register('sw.js');
|
||||
await navigator.serviceWorker.ready;
|
||||
if (!navigator.serviceWorker.controller) {
|
||||
await new Promise(res => {
|
||||
const t = setTimeout(res, 1500);
|
||||
navigator.serviceWorker.addEventListener('controllerchange', () => { clearTimeout(t); res(); }, { once: true });
|
||||
});
|
||||
}
|
||||
console.log('[elffuss] caché de modelos activa (service worker)');
|
||||
return true;
|
||||
} catch (e) {
|
||||
console.warn('[elffuss] service worker no disponible:', e.message);
|
||||
return false;
|
||||
}
|
||||
})();
|
||||
return started;
|
||||
}
|
||||
|
||||
// Espacio ocupado por la caché (para mostrarlo en Ajustes).
|
||||
export async function cacheEstimate() {
|
||||
try {
|
||||
const e = await navigator.storage.estimate();
|
||||
return { usage: e.usage || 0, quota: e.quota || 0, persisted: navigator.storage.persisted ? await navigator.storage.persisted() : false };
|
||||
} catch { return { usage: 0, quota: 0, persisted: false }; }
|
||||
}
|
||||
|
||||
// Vaciar la caché de modelos (botón en Ajustes).
|
||||
export async function clearModelCache() {
|
||||
if (navigator.serviceWorker && navigator.serviceWorker.controller)
|
||||
navigator.serviceWorker.controller.postMessage('clear-models');
|
||||
try { await caches.delete('elffuss-models-v1'); } catch { /* */ }
|
||||
}
|
||||
Reference in New Issue
Block a user