improve: Immich cloud filter and optimize

This commit is contained in:
2026-10-11 20:18:04 +07:00
parent f37a093a23
commit 0665796e37
15 changed files with 4699 additions and 87 deletions
+51 -3
View File
@@ -417,7 +417,18 @@ export function bySourceThenName(a: LibraryFolder, b: LibraryFolder): number {
}
export function cachedFolders(): LibraryFolder[] {
return cachedFoldersList ?? [];
if (cachedFoldersList) return cachedFoldersList;
try {
const raw = sessionStorage.getItem('rc_cached_folders');
if (raw) {
const parsed = JSON.parse(raw);
if (Array.isArray(parsed) && parsed.length > 0) {
cachedFoldersList = parsed;
return cachedFoldersList;
}
}
} catch {}
return [];
}
export async function listFolders(): Promise<LibraryFolder[]> {
@@ -425,6 +436,15 @@ export async function listFolders(): Promise<LibraryFolder[]> {
const rows = await ask<LibraryFolder[]>(FOLDERS, 'readonly', (s) => s.getAll());
const sorted = rows.sort(bySourceThenName);
cachedFoldersList = sorted;
try {
const slim = sorted.map((f) => ({
name: f.name,
label: f.label,
source: f.source,
server: f.server,
}));
sessionStorage.setItem('rc_cached_folders', JSON.stringify(slim));
} catch {}
return sorted;
} catch {
return cachedFoldersList ?? [];
@@ -2027,7 +2047,18 @@ function pump(): void {
let cached: LibraryPhoto[] | null = null;
export function cachedPhotos(): LibraryPhoto[] {
return cached ?? [];
if (cached) return cached;
try {
const raw = sessionStorage.getItem('rc_cached_photos');
if (raw) {
const parsed = JSON.parse(raw);
if (Array.isArray(parsed) && parsed.length > 0) {
cached = parsed;
return cached;
}
}
} catch {}
return [];
}
export function clearLibraryCache(): void {
@@ -2418,7 +2449,24 @@ export async function readPhotos(folder?: string): Promise<LibraryPhoto[] | null
if (chunk.length < READ_CHUNK) break;
}
rows.sort((a, b) => b.taken - a.taken);
if (!folder) cached = rows;
if (!folder) {
cached = rows;
try {
const slim = rows.slice(0, 300).map((p) => ({
id: p.id,
folder: p.folder,
name: p.name,
taken: p.taken,
addedAt: p.addedAt,
dir: p.dir,
star: p.star,
server: p.server,
remoteId: p.remoteId,
rot: p.rot,
}));
sessionStorage.setItem('rc_cached_photos', JSON.stringify(slim));
} catch {}
}
return rows;
} catch {
return null;