Skip to content

Fix window lookups that only checked "main", missing "launcher"#11

Merged
marcelveldt merged 1 commit intomusic-assistant:mainfrom
teancom:fix/window-launcher-fallback
Feb 20, 2026
Merged

Fix window lookups that only checked "main", missing "launcher"#11
marcelveldt merged 1 commit intomusic-assistant:mainfrom
teancom:fix/window-launcher-fallback

Conversation

@teancom
Copy link
Copy Markdown
Contributor

@teancom teancom commented Feb 17, 2026

The app's single webview window alternates names between "main" and "launcher" due to how server switching works: navigate_to_launcher() creates a new window with the opposite name (to avoid Tauri name conflicts) then destroys the old one. Connecting to a server is just an in-place window.location.href navigation — no new window is created.

This means after one "Switch Server" round-trip, the user is fully connected to a server and doing stuff like receiving now_playing data, but the window is named "launcher" (I found this confusing at first, which is why I'm spelling it out). Five code paths only looked up "main":

  • Single-instance handler: .expect("no main window") panicked, crashing the app if a second instance was launched and the first instance was not using 'main' for the window name
  • Tray "hide"/"show": silently failed
  • Tray "now_playing" click: silently failed
  • Tray icon left-click: silently failed

Apply the same .or_else(|| get_webview_window("launcher")) pattern already used in 8 other places in this file. Also remove .expect() calls from the single-instance handler in favor of if-let to avoid panics.

The app's single webview window alternates names between "main" and
"launcher" due to how server switching works: navigate_to_launcher()
creates a new window with the opposite name (to avoid Tauri name
conflicts) then destroys the old one. Connecting to a server is just
an in-place window.location.href navigation — no new window is created.

This means after one "Switch Server" round-trip, the user is fully
connected to a server and receiving now_playing data, but the window
is named "launcher". Five code paths only looked up "main":

- Single-instance handler: .expect("no main window") panicked,
  crashing the app if a second instance was launched
- Tray "hide"/"show": silently failed
- Tray "now_playing" click: silently failed
- Tray icon left-click: silently failed

Apply the same .or_else(|| get_webview_window("launcher")) pattern
already used in 8 other places in this file. Also remove .expect()
calls from the single-instance handler in favor of if-let to avoid
panics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown
Member

@marcelveldt marcelveldt left a comment

Choose a reason for hiding this comment

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

LGTM
Thanks @teancom !

@marcelveldt marcelveldt merged commit 624b1e8 into music-assistant:main Feb 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants