fix(view): reliably reveal PodNotes view via command + ribbon icon (#55) - #199
Merged
Merged
Conversation
The Show PodNotes command was gated to only appear when no view leaf existed, and it never revealed the leaf it set. Once the view was open but hidden (collapsed sidebar, sidebar-icon overflow, or dragged out of sight) there was no way to bring it back: the command disappeared from the palette and did nothing when bound to a hotkey. Add an activateView() helper that reuses the existing leaf when present and always calls revealLeaf, wire the Show PodNotes command to it as a plain always-available callback, and add a left-ribbon podcast icon as a persistent, overflow-proof entry point. Update the command docs. Closes #55
…ocs (#55) Add an onload wiring test that asserts the podnotes-show-leaf command is registered as a plain always-available callback (never the old leaf-gated checkCallback) and that both the command and the ribbon icon route to activateView. activateView's own unit tests stay green under a refactor that reintroduced the gate, so this locks the actual #55 regression. Soften the ribbon docs: the icon is hideable via Manage ribbon actions and appears in the ribbon menu on mobile, so drop the 'always visible' claim. Addresses review nits; no behavior change.
Deploying podnotes with
|
| Latest commit: |
046f0ec
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://793a8f65.podnotes.pages.dev |
| Branch Preview URL: | https://chhoumann-55-toolbar-icon-mi.podnotes.pages.dev |
chhoumann
marked this pull request as draft
June 16, 2026 08:56
chhoumann
marked this pull request as ready for review
June 16, 2026 08:57
Owner
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
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))
Contributor
|
🎉 This PR is included in version 2.17.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Fixes #55. For some users the PodNotes pane never appears, and once the view exists but is hidden there was no way to bring it back.
Reproduced in real Obsidian (this checkout's build, isolated vault):
Show PodNotesin paletteRoot cause in
src/main.ts:Show PodNotescommand used acheckCallbackthat returnedfalse(hiding the command) whenever a leaf of the view type already existed. So once the view was open-but-hidden (collapsed sidebar, right-sidebar icon overflow, dragged out of sight), the command disappeared from the palette and did nothing when bound to a hotkey.setViewStatebut neverrevealLeaf, so the leaf was never surfaced.Change
activateView(): reuse an existing leaf when present, otherwise create one in the right sidebar, then alwaysrevealLeafit.Show PodNotesfromcheckCallbackto a plain, always-availablecallbackthat callsactivateView()— so it works from the palette and as a hotkey regardless of current state.onLayoutReadyis unchanged: startup still creates the leaf without force-revealing, so launches stay non-intrusive.docs/docs/commands.md.Verification
Real Obsidian (isolated worktree vault), after the fix:
activateView()reuses the leaf and reveals it (rightCollapsed: true → false, leaf count stays 1).rightCollapsed: false).Show PodNotescommand is always available in the palette.onunloadstill detaches leaves on disable/enable.Gates (Node 22):
lintclean ·format:checkclean ·typecheckclean ·check:a11y0 errors/0 warnings ·buildok ·test458 passed, including newsrc/main.activateView.test.ts(activateView reuse/reveal/null-safety + anonloadwiring test that locks the command-is-a-callback-not-checkCallback and ribbon→activateView regression).Review
Ran a deep correctness/security pass plus two adversarial reviewers (incompleteness + regression lenses), each finding adversarially verified. No blockers; the two confirmed nits are folded into the second commit:
activateView's internals), andVisible change
A podcast icon in the left ribbon (label "Show PodNotes"). Clicking it — or running the command, or its hotkey — reliably reveals the PodNotes pane, including when it is already open but hidden.
Scope note
This targets the reproducible failure mode: discoverability and reliably revealing the view. The 2023 report also mentioned choppy direct-file playback with no controls; that predates the Svelte 5 view rewrite and isn't reproducible on current master, so it's out of scope here.