Better file fetching and status

This commit is contained in:
2026-03-18 14:45:21 +01:00 Verified
parent 99ff2f94b4
commit d61f2af6d4
+23 -15
View File
@@ -42,6 +42,7 @@ export default function Documents() {
} }
setCachedFiles(cached); setCachedFiles(cached);
if (cached.size === docs.length) setSyncStatus('done'); if (cached.size === docs.length) setSyncStatus('done');
else setSyncStatus('idle');
} catch (error) { } catch (error) {
console.error("Cache check failed", error); console.error("Cache check failed", error);
} }
@@ -57,6 +58,12 @@ export default function Documents() {
checkCacheStatus(); checkCacheStatus();
const handleVisibility = () => {
if (document.visibilityState === 'visible') checkCacheStatus();
};
document.addEventListener('visibilitychange', handleVisibility);
window.addEventListener('focus', checkCacheStatus);
const conn = (navigator as any).connection; const conn = (navigator as any).connection;
if (conn && (conn.type === 'wifi' || conn.type === 'ethernet') && !conn.saveData) { if (conn && (conn.type === 'wifi' || conn.type === 'ethernet') && !conn.saveData) {
handleSyncAll(); handleSyncAll();
@@ -65,6 +72,8 @@ export default function Documents() {
return () => { return () => {
window.removeEventListener('online', handleStatus); window.removeEventListener('online', handleStatus);
window.removeEventListener('offline', handleStatus); window.removeEventListener('offline', handleStatus);
document.removeEventListener('visibilitychange', handleVisibility);
window.removeEventListener('focus', checkCacheStatus);
}; };
}, []); }, []);
@@ -73,25 +82,24 @@ export default function Documents() {
const updatedCache = new Set(cachedFiles); const updatedCache = new Set(cachedFiles);
for (const doc of docs) { for (const doc of docs) {
try { if (!updatedCache.has(doc.file)) {
const response = await fetch(doc.file); try {
if (response.ok) { const response = await fetch(doc.file);
updatedCache.add(doc.file); if (response.ok) {
setCachedFiles(new Set(updatedCache)); await response.blob();
updatedCache.add(doc.file);
setCachedFiles(new Set(updatedCache));
}
} catch (error) {
console.error("Kunde inte ladda ner:", doc.file);
} }
} catch (error) {
console.error("Kunde inte ladda ner:", doc.file);
} }
} }
setTimeout(async () => { await checkCacheStatus();
await checkCacheStatus(); setSyncStatus('done');
setSyncStatus('done'); setShowNotification(true);
setShowNotification(true); setTimeout(() => setShowNotification(false), 4000);
setTimeout(() => {
setShowNotification(false);
}, 4000);
}, 500);
}; };
if (!isHydrated) return <div className="flex justify-center py-20"><Loader2 className="animate-spin text-slate-teal" size={40} /></div>; if (!isHydrated) return <div className="flex justify-center py-20"><Loader2 className="animate-spin text-slate-teal" size={40} /></div>;