5355a62d88
The 'Profile from card' ignore checkboxes matched only by FID, but the list had EF.KcGPRS at 4F52 (TS 31.102 DF.GSM-ACCESS) while the live card exposes it at 6F52 (TS 51.011 DF.GSM, verified in TS 51.011 v4.15.0 10.3.32 and the DF.GSM allocation table). The miss made profilerBuildFileRule capture full contents (Exact) for a file the user had checked to ignore. - Correct EF.KcGPRS FID to 6F52 (spec-verified) - Match ignores by FID OR by pySim name: each checkbox now carries data-ignore-name, profilerScanStart builds an ignoreNames set, and profilerBuildFileRule checks both. Covers FID variants (6F52 vs 4F52) and future constant typos; ignoreNames is optional for back-compat. - 6 new tests: ignore-list FID/name sanity (incl. KcGPRS=6F52), duplicates, ignored-by-FID, ignored-by-name-only regression case, non-ignored control, back-compat when ignoreNames is omitted. SW cache v50 -> v51.
56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
const CACHE = 'otaman-v51';
|
|
const URLS = [
|
|
'index.html',
|
|
'help.html',
|
|
'help-ru.html',
|
|
'style.css',
|
|
'sim.png',
|
|
'favicon.svg',
|
|
'icon-192.png',
|
|
'icon-512.png',
|
|
'manifest.json',
|
|
'des-bundle.js',
|
|
'aes-bundle.js',
|
|
'sim.svg',
|
|
'sim_anim.svg',
|
|
'nosim.svg',
|
|
];
|
|
|
|
self.addEventListener('install', e => {
|
|
e.waitUntil(
|
|
caches.open(CACHE).then(c => c.addAll(URLS))
|
|
);
|
|
self.skipWaiting();
|
|
});
|
|
|
|
self.addEventListener('activate', e => {
|
|
e.waitUntil(
|
|
caches.keys().then(keys =>
|
|
Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k)))
|
|
).then(() => clients.claim())
|
|
);
|
|
});
|
|
|
|
self.addEventListener('fetch', e => {
|
|
if (!e.request.url.startsWith('http')) return;
|
|
if (new URL(e.request.url).pathname.startsWith('/api/')) return; // live data, never cache
|
|
if (e.request.method !== 'GET') return;
|
|
const isNavigate = e.request.mode === 'navigate' || e.request.url.endsWith('sw.js');
|
|
if (isNavigate) {
|
|
e.respondWith(
|
|
fetch(e.request).then(res => {
|
|
const clone = res.clone();
|
|
caches.open(CACHE).then(c => c.put(e.request, clone));
|
|
return res;
|
|
}).catch(() => caches.match(e.request))
|
|
);
|
|
} else {
|
|
e.respondWith(
|
|
caches.match(e.request).then(r => r || fetch(e.request).then(res => {
|
|
const clone = res.clone();
|
|
caches.open(CACHE).then(c => c.put(e.request, clone));
|
|
return res;
|
|
}))
|
|
);
|
|
}
|
|
}); |