45 lines
1.0 KiB
TypeScript
45 lines
1.0 KiB
TypeScript
import { createMMKV } from 'react-native-mmkv';
|
|
import { FileItem } from '../types';
|
|
|
|
const storage = createMMKV({ id: 'vaultdrop-metadata' });
|
|
|
|
const FILES_KEY = 'backend_files_cache';
|
|
const UPDATED_AT_KEY = 'cache_updated_at';
|
|
const STALE_MS = 5 * 60 * 1000;
|
|
|
|
interface CachedFiles {
|
|
files: FileItem[];
|
|
page: number;
|
|
total: number;
|
|
}
|
|
|
|
export const metadataCache = {
|
|
getFiles(): CachedFiles | null {
|
|
const raw = storage.getString(FILES_KEY);
|
|
if (!raw) return null;
|
|
try {
|
|
return JSON.parse(raw) as CachedFiles;
|
|
} catch {
|
|
return null;
|
|
}
|
|
},
|
|
|
|
setFiles(files: FileItem[], page: number, total: number) {
|
|
const data: CachedFiles = { files, page, total };
|
|
storage.set(FILES_KEY, JSON.stringify(data));
|
|
storage.set(UPDATED_AT_KEY, Date.now());
|
|
},
|
|
|
|
isStale(): boolean {
|
|
const raw = storage.getString(UPDATED_AT_KEY);
|
|
if (!raw) return true;
|
|
const updatedAt = Number(raw);
|
|
return Date.now() - updatedAt > STALE_MS;
|
|
},
|
|
|
|
clear() {
|
|
storage.remove(FILES_KEY);
|
|
storage.remove(UPDATED_AT_KEY);
|
|
},
|
|
};
|