fix: gallery.yaml album order on homepage + stale settings cache (#391)

* fix: honour gallery.yaml order for homepage albums

getStandaloneAlbums() filtered the Immich API album list but kept the
API's own (creation/update) order, so reordering the albums list in
gallery.yaml or the admin panel had no effect on the homepage. Sort by
the config list's index instead.

Fixes #352

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix: serve fresh settings after admin save without restart

getConfig() short-circuited on a per-worker in-memory cache in
production. Admin saves invalidate that cache only in the worker that
handles the API request; when Next.js renders pages in a different
worker/process, its copy stayed stale until a container restart.

Drop the in-memory config cache entirely and rebuild the config per
call. Freshness comes from the existing mtime-checked YAML cache in
loadYaml() — one statSync per file, negligible next to Immich API
calls, and the same behaviour dev mode has always had.

Fixes #351

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: ralksta <ralksta@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Ralksta
2026-08-05 00:27:06 +02:00
committed by GitHub
parent de3e2d327c
commit f03011e0ec
4 changed files with 93 additions and 17 deletions

View File

@@ -276,8 +276,11 @@ class ImmichClient {
*/
async getStandaloneAlbums(): Promise<ImmichAlbum[]> {
const albums = await this.getAlbums();
const standaloneIds = new Set(this.config.standaloneAlbums);
return albums.filter((a) => standaloneIds.has(a.id));
// The API returns albums in its own order; gallery.yaml order wins.
const orderIdx = new Map(this.config.standaloneAlbums.map((id, i) => [id, i]));
return albums
.filter((a) => orderIdx.has(a.id))
.sort((a, b) => orderIdx.get(a.id)! - orderIdx.get(b.id)!);
}
/**