feat: modularize scanner, enhance carousel preloading, and improve PWA updates

Summary of changes:
- Extracted archive scanning logic into a modular 'useArchiveScanner' hook for better maintainability and performance.
- Refined PostModal carousel with intelligent media preloading and smoother, jitter-free transitions.
- Optimized image rendering with 'decoding=async' and removed 'black flashes' between slide changes.
- Updated PWA configuration to 'autoUpdate' with hourly periodic checks for fresh content.
- Fixed several bugs including stories sorting, permalink parameter cleanup, and profile metadata cache restoration.
- Comprehensive updates to documentation (README.md and GEMINI.md) reflecting the new architecture.
This commit is contained in:
ergosteur
2026-03-07 21:16:28 -05:00
parent 0ed4cf292c
commit 7fc31fed94
14 changed files with 1243 additions and 946 deletions
+36
View File
@@ -0,0 +1,36 @@
import { ArchiveFile } from '../types';
export class LocalArchiveFile implements ArchiveFile {
constructor(private file: File) {}
get name() { return this.file.name; }
get webkitRelativePath() { return this.file.webkitRelativePath; }
get size() { return this.file.size; }
text() { return this.file.text(); }
arrayBuffer() { return this.file.arrayBuffer(); }
stream() { return this.file.stream(); }
}
export class RemoteArchiveFile implements ArchiveFile {
constructor(
public name: string,
public webkitRelativePath: string,
public size: number,
public url: string
) {}
async text() {
const res = await fetch(this.url);
return res.text();
}
async arrayBuffer() {
const res = await fetch(this.url);
return res.arrayBuffer();
}
stream() {
const transform = new TransformStream();
fetch(this.url).then(res => {
if (res.body) res.body.pipeTo(transform.writable);
else transform.writable.getWriter().close();
});
return transform.readable;
}
}