Skip to content

Add Internet sidebar browsing to the remote - #15

Merged
hatstand merged 5 commits into
mainfrom
claude/internet-browse
Sep 29, 2026
Merged

hatstand merged 5 commits into
mainfrom
claude/internet-browse

Conversation

@hatstand

Copy link
Copy Markdown

Adds support for browsing Clementine's Internet services from the remote, allowing users to browse services like SomaFM, Plex, and others, and add tracks or streams to the playlist.

Changes

  • Protocol: Extended remotecontrolmessages.proto with new message types for browsing:

    • REQUEST_BROWSE / BROWSE for requesting and receiving node hierarchies
    • REQUEST_BROWSE_ADD / BROWSE_ADD_RESULT for adding nodes to the playlist
    • New enums: BrowseNodeKind, BrowseChildren, BrowsePlayability, BrowseState, BrowseAddAction, BrowseAddResult
    • New SERVER_FEATURE_BROWSE to indicate server capability
    • Regenerated Swift protobuf bindings
  • Backend: Added InternetBrowser class to manage browsing state:

    • Tracks node hierarchies and pagination
    • Handles updates from Clementine as nodes change
    • Manages add operations and their results
    • Resets state on new connections
  • UI: Added InternetView and supporting components:

    • Hierarchical navigation through services and their children
    • Displays node icons (service icons or kind-based icons)
    • Context menu for add actions (play now, play next, add, replace)
    • Loading states, setup instructions, and error handling
    • Pull-to-refresh to reload current level
  • Integration:

    • Added Internet tab to main navigation (between Library and Search)
    • Updated AppModel to include InternetBrowser instance
    • Added canBrowse property to RemoteSession based on server features
    • Updated design documentation
  • Testing: Added comprehensive InternetBrowserTests covering pagination, state transitions, and add operations

The implementation follows the same patterns as the Library tab and maintains feature parity with the Android client's Internet browsing.

https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx

A new Internet tab browses the tree Clementine's Internet sidebar shows
(clementine-player/Clementine#7530), as the Android remote does: the
services with their icons, and the nodes below them, level by level.
Tapping a track or stream plays it, or adds it while Clementine is
playing; touch and hold for Play now, Play next, Add to playlist and
Replace playlist, and an opened album or playlist has Play and Add to
playlist. Levels show Clementine's loading and "set up first" states,
update as Clementine sends changes, and page through long lists.

The tab is only there for Clementine that advertises
SERVER_FEATURE_BROWSE. InternetBrowser in ClementineKit keeps the
levels, merges pages and updates, and forgets node ids on each new
connection, with tests.

Clementine's latest release no longer knows --experimental-remote-
streaming and exits on options it doesn't know, so the screenshots only
pass it to releases that have it. They add the Internet tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Screenshots

From run 36595143930, against a real Clementine. Left: main. Right: this pull request, light and dark.

Screen main This PR This PR, dark
01_connect
02_queue
03_player
04_connection
05_settings
06_library
07_library_album
08_search
09_outputs
10_internet –
11_internet_radio –

Searching expands the search field over the tab bar, so the Internet tab
couldn't be found after the search screenshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx
An opened album or playlist doesn't say "0 items" before Clementine
first answers, and the new strings take the Android client's
translations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx
The CI Clementine gets three saved radio streams, so "Your radio
streams" has something to show without depending on a service online.
The screenshots open it after the Internet tab's top level, as
11_internet_radio, as the Android client's do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx
"Your radio streams" is the last of Clementine's services, below the
fold, and a list only has the rows in sight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015dJQ8hcp9Vd6tD9gJAXxTx
@hatstand
hatstand merged commit 955bbd9 into main Sep 29, 2026
4 checks passed
@hatstand
hatstand deleted the claude/internet-browse branch September 29, 2026 22:20
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