diff options
Diffstat (limited to 'Biz/PodcastItLater/Episode.py')
| -rw-r--r-- | Biz/PodcastItLater/Episode.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Biz/PodcastItLater/Episode.py b/Biz/PodcastItLater/Episode.py index a06b8d9..a516f65 100644 --- a/Biz/PodcastItLater/Episode.py +++ b/Biz/PodcastItLater/Episode.py @@ -196,6 +196,7 @@ class EpisodeDetailPageAttrs(Attrs): creator_email: str | None user: dict[str, typing.Any] | None base_url: str + user_has_episode: bool class EpisodeDetailPage(Component[AnyChildren, EpisodeDetailPageAttrs]): @@ -208,6 +209,7 @@ class EpisodeDetailPage(Component[AnyChildren, EpisodeDetailPageAttrs]): creator_email = self.attrs.get("creator_email") user = self.attrs.get("user") base_url = self.attrs["base_url"] + user_has_episode = self.attrs.get("user_has_episode", False) share_url = f"{base_url}/episode/{episode_sqid}" duration_str = UI.format_duration(episode.get("duration")) @@ -305,6 +307,37 @@ class EpisodeDetailPage(Component[AnyChildren, EpisodeDetailPageAttrs]): ), # Share button ShareButton(share_url=share_url), + # Add to feed button (logged-in users without episode) + html.div( + html.div( + html.div( + html.h5( + html.i(classes=["bi", "bi-plus-circle", "me-2"]), + "Add to Your Feed", + classes=["card-title", "mb-3"], + ), + html.p( + "Save this episode to your personal feed " + "to listen later.", + classes=["text-muted", "mb-3"], + ), + html.button( + html.i(classes=["bi", "bi-plus-lg", "me-1"]), + "Add to My Feed", + hx_post=f"/episode/{episode['id']}/add-to-feed", + hx_target="#add-to-feed-result", + hx_swap="innerHTML", + classes=["btn", "btn-primary"], + ), + html.div(id="add-to-feed-result", classes=["mt-2"]), + classes=["card-body"], + ), + classes=["card"], + ), + classes=["mb-4"], + ) + if user and not user_has_episode + else html.div(), # Back to home link html.div( html.a( |
