release: v0.19.0

Release v0.19.0. See the `## [0.19.0] — 2026-09-29` section of
[CHANGELOG.md](https://github.com/ralksta/immich-folio/blob/dev/CHANGELOG.md)
for the full list.

Highlights: client proofing links (#683), custom content pages (#738),
asset picker search (#740), concurrent-edit detection (#742), env-locked
settings (#739), an accessibility baseline (#741), three security fixes
with advisories (#737, #755, #759), and a pre-release quality pass
(#780–#797).

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: ralksta <ralksta@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Ralf <rohlenbo79@gmail.com>
Co-authored-by: Paul Thies <110185070+ImScheinox@users.noreply.github.com>
Co-authored-by: lancetm714 <108419425+lancetm714@users.noreply.github.com>
Co-authored-by: Lance Martin <lancetaylor95@gmail.com>
This commit is contained in:
Ralksta
2026-09-29 22:50:30 +02:00
committed by GitHub
parent 5f251923f0
commit ad8b09700b
297 changed files with 19398 additions and 1800 deletions

View File

@@ -1,5 +1,6 @@
import { immich } from './immich';
import { getConfig } from './config';
import { isListedSubpage, listedAlbumIds } from './config/schema';
import { cache } from './cache';
/**
@@ -44,13 +45,21 @@ export async function getMapData(): Promise<MapLocation[]> {
pendingMapDataPromise = (async () => {
try {
const albums = await immich.getAlbums();
// The allowlist still holds the albums of subpages taken offline with
// `enabled: false`, and those of `hidden` subpages, which are reachable
// by direct link only. A marker names, links and shows a photo of every
// album it counts — a listing — so both have to go before anything is
// aggregated.
const listed = listedAlbumIds(config);
const albums = (await immich.getAlbums()).filter((a) => listed.has(a.id));
// Build a lookup: album ID → { name, slug, subpageSlug? }
const albumMeta = new Map<string, { name: string; slug: string; subpageSlug?: string }>();
for (const a of albums) {
// Check if this album belongs to a subpage
const sp = config.subpages.find((s) => s.albumIds.includes(a.id));
// The subpage the marker links to, and whose password gates it. Never
// an offline one (its URL is a 404 and its password guards nothing),
// and never a hidden one: the marker would publish its address.
const sp = config.subpages.find((s) => isListedSubpage(s) && s.albumIds.includes(a.id));
albumMeta.set(a.id, { name: a.albumName, slug: a.slug, subpageSlug: sp?.slug });
}