fix(cache): complete preload coverage + surface silent write failures
Root cause of 'pre-cache done but offline data missing':
1. Preload manifest never listed the services/{prayers,texts,headers,var}
subtrees the Service view dereferences (CommonPrayers->prayers, etc.),
plus only 13 hardcoded commands. Generator now enumerates all of them
(en 1500->1740, ru->1333, cu 1500->2108 files).
2. DataCache.set silently resolved on IDB write failure (quota exceeded),
so preload counted un-stored files as success and reported 100% done.
set() now returns boolean; preload treats failed writes as failures
that feed the existing circuit breaker (visible abort + diag entry).
3. No persistence request: added best-effort navigator.storage.persist()
before preload, diag-logged.
4. Dropped dead manifest weight (menaion-common/add, horologionadd) -
never referenced by any view.
This commit is contained in:
1 parent
4f11e8ca6c
commit
1201e16d5e
4 files changed
+1169
-405
No files matched your search
@@ -113,11 +113,12 @@ export class DataCache {
|
||||
|
||||
/**
|
||||
* Store a value in the cache.
|
||||
* Resolves true on success; false when the write failed (e.g. quota).
|
||||
*/
|
||||
static async set(key: string, data: unknown, ttl: number = DEFAULT_TTL_MS): Promise<void> {
|
||||
static async set(key: string, data: unknown, ttl: number = DEFAULT_TTL_MS): Promise<boolean> {
|
||||
try {
|
||||
const db = await getDB();
|
||||
return new Promise((resolve, reject) => {
|
||||
return await new Promise<boolean>((resolve) => {
|
||||
const tx = db.transaction(STORE_NAME, 'readwrite');
|
||||
const store = tx.objectStore(STORE_NAME);
|
||||
const entry: CacheEntry = {
|
||||
@@ -128,11 +129,13 @@ export class DataCache {
|
||||
ttl,
|
||||
};
|
||||
store.put(entry);
|
||||
tx.oncomplete = () => resolve();
|
||||
tx.onerror = () => reject(tx.error);
|
||||
tx.oncomplete = () => resolve(true);
|
||||
tx.onerror = () => resolve(false);
|
||||
tx.onabort = () => resolve(false);
|
||||
});
|
||||
} catch {
|
||||
// Silently fail — cache is best-effort
|
||||
// Write failed (e.g. quota exceeded) — report as failure.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user