From 455493f61e7a3b956c9611e7e99d1f6498a758bd Mon Sep 17 00:00:00 2001 From: Christian Bager Bach Houmann Date: Mon, 24 Nov 2025 07:27:02 +0100 Subject: [PATCH] Replace moment date formatting in episode list --- src/ui/PodcastView/EpisodeListItem.svelte | 36 +++++++++++++++++++---- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/ui/PodcastView/EpisodeListItem.svelte b/src/ui/PodcastView/EpisodeListItem.svelte index 54d440f..296a46d 100644 --- a/src/ui/PodcastView/EpisodeListItem.svelte +++ b/src/ui/PodcastView/EpisodeListItem.svelte @@ -8,6 +8,12 @@ export let showEpisodeImage: boolean = false; const dispatch = createEventDispatcher(); + const dateFormatter = new Intl.DateTimeFormat("en-GB", { + day: "2-digit", + month: "long", + year: "numeric" + }); + const formattedDateCache = new Map(); function onClickEpisode() { dispatch("clickEpisode", { episode }); @@ -17,13 +23,33 @@ dispatch("contextMenu", { episode, event }); } - let _date: Date; - let date: string; + function parseEpisodeDate(rawDate?: Date): Date | null { + if (!rawDate) return null; + const parsedDate = new Date(rawDate); + return Number.isNaN(parsedDate.getTime()) ? null : parsedDate; + } - $: { - _date = new Date(episode.episodeDate || ""); - date = window.moment(_date).format("DD MMMM YYYY"); + function getCacheKey(ep: Episode, parsedDate: Date): string { + const identifier = ep.url ?? ep.streamUrl ?? ep.title ?? "episode"; + return `${identifier}|${parsedDate.getTime()}`; } + + function formatEpisodeDate(ep: Episode): string { + const parsedDate = parseEpisodeDate(ep?.episodeDate); + if (!parsedDate) return ""; + + const cacheKey = getCacheKey(ep, parsedDate); + const cachedDate = formattedDateCache.get(cacheKey); + if (cachedDate) return cachedDate; + + const formattedDate = dateFormatter.format(parsedDate); + formattedDateCache.set(cacheKey, formattedDate); + return formattedDate; + } + + let date: string = ""; + + $: date = formatEpisodeDate(episode);