diff --git a/src/file-viewer/cache.ts b/src/file-viewer/cache.ts index 3493a8cc072c18f7eed53f7966f6dfd032a4468e..b6ce512d4487793e53a2365ecc7f82c1ffec4e4d 100644 --- a/src/file-viewer/cache.ts +++ b/src/file-viewer/cache.ts @@ -61,32 +61,36 @@ const parallelRequests = new Map>(); // Revive disk cache state revive: { - const state = diskCacheState - .readIfExistsSync>("json"); - if (!state) break revive; - const missing = new Set(diskCacheRoot.readDirSync().map((c) => c.base)); - missing.delete(diskCacheState.base); - diskCache.revive(state, { - map(k: string, v: number) { - const path = new Path(k); + try { + const state = diskCacheState + .readIfExistsSync>("json"); + if (!state) break revive; + const missing = new Set(diskCacheRoot.readDirSync().map((c) => c.base)); + missing.delete(diskCacheState.base); + diskCache.revive(state, { + map(k: string, v: number) { + const path = new Path(k); + try { + const { size } = path.statSync(); + if (size !== v) return null; + if (!missing.delete(k)) return null; + return [ + path, + { size, written: new async.Watch(size), memory: new Map() }, + ]; + } catch { + return null; + } + }, + }); + // Delete unreferenced files + for (const missingFile of missing) { try { - const { size } = path.statSync(); - if (size !== v) return null; - if (!missing.delete(k)) return null; - return [ - path, - { size, written: new async.Watch(size), memory: new Map() }, - ]; - } catch { - return null; - } - }, - }); - // Delete unreferenced files - for (const missingFile of missing) { - try { - diskCacheRoot.join(missingFile).deleteSync(); - } catch {} + diskCacheRoot.join(missingFile).deleteSync(); + } catch {} + } + } catch (err) { + console.warn("Failed to restore file viewer cache", err); } }