improve: Immich cloud filter and optimize
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user