Skip to content

feat(queue): add setting to disable queue auto-population and auto-advance (#108) - #185

Merged
chhoumann merged 2 commits into
masterfrom
chhoumann/108-turn-off-queue
Jun 15, 2026
Merged

chhoumann merged 2 commits into
masterfrom
chhoumann/108-turn-off-queue

Conversation

@chhoumann

@chhoumann chhoumann commented Jun 15, 2026 •

Copy link
Copy Markdown
Owner

Summary

Adds a setting so users can turn off the queue's automatic behavior (issue #108: "the queue feature auto-populating is annoying… give us an option to turn off the queue or at least stop auto-populating").

New setting "Keep a queue of episodes you switch away from" (autoQueue, default on = current behavior). When off:

  • switching episodes no longer enqueues the episode you were listening to (addEpisodeToQueue), and
  • playback no longer auto-advances to the next queued episode at episode end (queue.playNext).

The queue stays usable as a manual playlist — context-menu add/remove/reorder are unaffected. When the queue is off and empty, its grid tile and player list are hidden so a disabled queue doesn't linger in the UI.

Design notes

  • The gate lives at the queue operations (addEpisodeToQueue, playNext) via autoQueueEnabled(), so no caller can bypass it and toggling takes effect live (no reload).
  • Default-on semantics (get(plugin)?.settings?.autoQueue !== false) mean a missing setting / uninitialised plugin store preserves historical behavior. Existing vaults backfill autoQueue: true through loadSettings' Object.assign.
  • autoQueue is a flat top-level boolean, so import/export round-trips it automatically (no settingsTransfer changes).
  • The settings toggle re-emits the plugin store so an already-open grid/player updates the tile/list visibility immediately.

Changes

  • types/IPodNotesSettings.ts, constants.ts — autoQueue setting + default true
  • store/index.ts — autoQueueEnabled() + gates in addEpisodeToQueue and queue.playNext
  • ui/settings/PodNotesSettingsTab.ts — the toggle
  • ui/PodcastView/{PodcastView,EpisodePlayer}.svelte — hide empty Queue tile/list when off
  • store/index.test.ts — 5 unit tests (gate off/on/unset for enqueue + playNext)
  • docs/docs/podcasts.md — "Turning off the queue"

Verification

  • ✅ lint, format:check, typecheck, svelte-check (0 warnings), 248 unit tests, build. (docs:build runs in CI — mkdocs not installed locally.)
  • ✅ Adversarial review (3 reviewers): unanimous ship; the one real finding (empty-queue UI not live-updating on toggle) was fixed.
  • ✅ Original auto-enqueue behavior reproduced in the dev vault; built bundle confirmed to default autoQueue: true (backward compat).
  • ⏳ Live runtime check of the off path was deferred — the shared dev vault was under concurrent contention during development. The off path is covered by unit tests; a clean isolated runtime pass can be done before merge.

Closes #108


Open in Devin Review

…vance (#108)

Adds an `autoQueue` setting (default on, preserving current behavior). When
turned off:

- switching episodes no longer enqueues the episode you were listening to, and
- playback no longer auto-advances to the next queued episode at episode end.

The queue stays usable as a manual playlist (context-menu add/remove/reorder are
unaffected). When the queue is off and empty, its grid tile and player list are
hidden so the disabled queue does not linger in the UI. The gate lives at the
queue operations (addEpisodeToQueue, playNext) and reads the setting live, so
toggling takes effect without a reload and no caller can bypass it.

Closes #108
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 15, 2026 •

Copy link
Copy Markdown

Deploying podnotes with  Cloudflare Pages  Cloudflare Pages

Latest commit: e0490aa
Status: ✅  Deploy successful!
Preview URL: https://f6251f02.podnotes.pages.dev
Branch Preview URL: https://chhoumann-108-turn-off-queue.podnotes.pages.dev

View logs

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread src/ui/settings/PodNotesSettingsTab.ts
applyImportedSettings re-hydrates the individual stores but did not re-emit the
`plugin` store, unlike the autoQueue toggle. Importing settings that change
`autoQueue` already refreshes the Queue tile/list today because the
unconditional `queue.set` triggers the same reactive statements, but that is
incidental. Re-emit `plugin` after import so the autoQueue-gated UI stays correct
independent of the queue emission (addresses Devin review note on #185). No
observable behavior change.
@chhoumann
chhoumann merged commit cf3d73c into master Jun 15, 2026
2 checks passed
@chhoumann
chhoumann deleted the chhoumann/108-turn-off-queue branch June 16, 2026 06:16
github-actions Bot pushed a commit that referenced this pull request Jun 22, 2026
# [2.17.0](2.16.0...2.17.0) (2026-06-22)

### Bug Fixes

* behavioral-audit logic and robustness fixes (back-end, 1/2) ([#213](#213)) ([4e2845d](4e2845d))
* **download:** default per-episode download path and migrate empty default ([#183](#183)) ([#186](#186)) ([46a6486](46a6486))
* **download:** prevent Android crash and create missing folders on download ([#178](#178)) ([ecd09d5](ecd09d5)), closes [#113](#113) [#86](#86) [#113](#113) [#86](#86)
* **lifecycle:** defer mobile podcast view startup ([#208](#208)) ([8bf9ce4](8bf9ce4))
* **notes:** cap note path length and harden folder creation ([#22](#22), [#87](#87)) ([#192](#192)) ([858e280](858e280)), closes [#87-class](#87)
* **playback:** persist listened time during playback ([#33](#33)) ([#190](#190)) ([e3433c2](e3433c2)), closes [#191](#191) [#108](#108) [#163](#163) [#183](#183)
* **playback:** play local files and downloads on iOS via resource path ([#100](#100)) ([#184](#184)) ([12c503a](12c503a))
* **player:** clear progress on episode switch to stop end-of-playback glitch ([#94](#94)) ([#194](#194)) ([59dccb3](59dccb3))
* **player:** reveal PodNotes view on Play with PodNotes so local files play ([#84](#84)) ([#198](#198)) ([5953625](5953625))
* **settings:** show labelled Add/Remove buttons in podcast search ([#109](#109)) ([#195](#195)) ([33399f5](33399f5))
* show downloaded episodes in the Local Files playlist ([#176](#176)) ([#177](#177)) ([184188c](184188c))
* **timestamps:** capture into the cursor's table cell without breaking the row ([#165](#165)) ([#203](#203)) ([964e342](964e342))
* **transcription:** always transcribe the currently playing episode ([#182](#182)) ([62b488a](62b488a)), closes [#107](#107)
* **uri:** preserve '+' in episode titles and paths for timestamp links ([#181](#181)) ([8ad7aa5](8ad7aa5)), closes [#164](#164)
* **view:** reliably reveal PodNotes view via command + ribbon icon ([#55](#55)) ([#199](#199)) ([fa1d708](fa1d708))

### Features

* add podcast segment links ([#205](#205)) ([d97e59e](d97e59e))
* **api:** expose generated episode transcripts ([e264465](e264465)), closes [#105](#105)
* behavioral-audit UI and interaction fixes (front-end, 2/2) ([#215](#215)) ([894d93d](894d93d))
* **commands:** add playback rate and media timestamp controls ([#206](#206)) ([a8bb44a](a8bb44a))
* **devx:** isolated per-worktree Obsidian E2E vault wrapper ([#188](#188)) ([a8b7a4a](a8b7a4a))
* **episodes:** add a setting to control the Latest Episodes list length ([#114](#114)) ([#200](#200)) ([7b3e3c6](7b3e3c6))
* **notes:** add {{episodelink}} template tag to resume an episode from its note ([#35](#35)) ([#193](#193)) ([8c1ddd6](8c1ddd6))
* **notes:** add podcast feed-level notes ([#163](#163)) ([#187](#187)) ([db0de47](db0de47)), closes [#161](#161) [#160](#160)
* **notes:** ship a Bases-friendly default episode note template ([#160](#160)) ([#201](#201)) ([209431d](209431d)), closes [#163](#163) [#183](#183)
* **player:** scale episode title font size to its length ([#81](#81)) ([#202](#202)) ([659b6b8](659b6b8))
* **player:** support video episode playback ([#209](#209)) ([f92a91f](f92a91f))
* **queue:** add setting to disable queue auto-population and auto-advance ([#108](#108)) ([#185](#185)) ([cf3d73c](cf3d73c))
* **queue:** allow reordering the playback queue ([#80](#80)) ([#179](#179)) ([d994d61](d994d61)), closes [#173](#173)
* **settings:** import/export settings & templates ([#180](#180)) ([a27d23d](a27d23d)), closes [#162](#162) [#162](#162)
* **templates:** add {{currentDate}}, {{episodeNumber}}, {{duration}} template variables ([#189](#189)) ([ec573eb](ec573eb)), closes [#75](#75) [#34](#34) [#88](#88) [163/#186](#186)
* **templates:** add episode chapters tag ([#207](#207)) ([9c98863](9c98863))
* **transcripts:** opt-in speaker diarization for transcripts ([#168](#168)) ([#204](#204)) ([a96e12f](a96e12f))
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 2.17.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FEATURE: Turn off Queue

1 participant