Files
Jinho Jang ecd92c9699 fix: render Spotify/Apple Podcasts player on episodes without Youtube (#273)
* feat: render Spotify and Apple Podcasts embeds on episode pages

Episodes without a Youtube or Simplecast channel rendered no player at
all, since Episode.Body only ever selected those two channels. Spotify
and Apple Podcasts were shown as text links only.

Add an embed fallback so those episodes render the provider's own iframe
player. react-player has no Spotify support, so the embed is a plain
iframe and is intentionally not wired into the global audio player -
these providers expose no playback state to the embedding page.

Also hide the duration in the episode stats row when it is 0, which is
the case for embed players that cannot report a duration.

* fix: drop the Apple Podcasts embed

embed.podcasts.apple.com renders an empty grey placeholder instead of a
player, confirmed on the deployed preview. An Apple-only episode is
better served by the existing channel link than by a broken embed, so
only Spotify falls back to an iframe player.

* feat: play Apple Podcasts episodes from the resolved audio file

Apple's own iframe embed cannot be used: embed.podcasts.apple.com renders
an empty grey placeholder and never mounts its player component. Verified
in a real Chrome, both for our episode and for a mainstream podcast (The
Daily), so it is Apple's embed service rather than our data.

Resolve the episode's audio file instead. The Apple Podcasts URL carries
the show id, and the iTunes lookup API returns the enclosure URL and the
duration for every episode of that show. Exposing that as an audio
channel lets the existing Simplecast code path play it, which also brings
back the duration in the stats row and the global bottom player.

Episode ids in the CMS are not always in sync with Apple, so the lookup
falls back to matching on the episode title.

* fix: prefer the Spotify embed over the resolved audio file

An episode that has both Spotify and Apple Podcasts now renders the
Spotify player. The resolved audio file stays as the last resort, for
episodes that can neither be played nor embedded.

The transformer skips the iTunes lookup for those episodes too, so it
only runs when its result will actually be used.

* chore: ignore env files

Keeps new local env files out of commits. Does not untrack the existing
.env, which is still committed.
2026-08-07 01:19:56 +09:00
..
2026-02-20 02:28:50 +09:00
2026-07-16 01:23:51 +09:00
2024-01-22 13:41:42 +01:00
2025-06-06 13:34:28 +02:00
2023-08-29 18:02:36 +02:00