A bundle of small, expected podcast-app behaviors. Each is independently
shippable; grouped here to keep the tracker tidy.
Checklist
Unread badge on the Podcasts tab — show the count of unplayed episodes
(PodcastIndex.all().filter { !$0.isPlayed }.count) via .badge(...) on the
Podcasts Tab in MarksApp. Refresh on played-state changes.
Remember playback speed — PodcastPlayerViewModel.playbackSpeed resets
to 1.0 every session. Persist it (UserDefaults/@AppStorage) and apply on setupPlayer.
Sleep timer — end-of-episode / 15·30·45 min options in the full player;
pause playback when it fires. New state on the player VM + a menu next to the
speed control.
Persist the Up Next queue — PodcastPlayerViewModel.queue is in-memory;
killing the app mid-queue loses it. Persist the queue (+ current episode) and
restore on launch.
Motivation
Individually minor, collectively these are the difference between "a player" and
"a podcast app."
## Summary
A bundle of small, expected podcast-app behaviors. Each is independently
shippable; grouped here to keep the tracker tidy.
## Checklist
- [ ] **Unread badge on the Podcasts tab** — show the count of unplayed episodes
(`PodcastIndex.all().filter { !$0.isPlayed }.count`) via `.badge(...)` on the
Podcasts `Tab` in `MarksApp`. Refresh on played-state changes.
- [ ] **Remember playback speed** — `PodcastPlayerViewModel.playbackSpeed` resets
to `1.0` every session. Persist it (UserDefaults/@AppStorage) and apply on
`setupPlayer`.
- [ ] **Sleep timer** — end-of-episode / 15·30·45 min options in the full player;
pause playback when it fires. New state on the player VM + a menu next to the
speed control.
- [ ] **Persist the Up Next queue** — `PodcastPlayerViewModel.queue` is in-memory;
killing the app mid-queue loses it. Persist the queue (+ current episode) and
restore on launch.
## Motivation
Individually minor, collectively these are the difference between "a player" and
"a podcast app."
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
A bundle of small, expected podcast-app behaviors. Each is independently
shippable; grouped here to keep the tracker tidy.
Checklist
(
PodcastIndex.all().filter { !$0.isPlayed }.count) via.badge(...)on thePodcasts
TabinMarksApp. Refresh on played-state changes.PodcastPlayerViewModel.playbackSpeedresetsto
1.0every session. Persist it (UserDefaults/@AppStorage) and apply onsetupPlayer.pause playback when it fires. New state on the player VM + a menu next to the
speed control.
PodcastPlayerViewModel.queueis in-memory;killing the app mid-queue loses it. Persist the queue (+ current episode) and
restore on launch.
Motivation
Individually minor, collectively these are the difference between "a player" and
"a podcast app."