Conversation
…d CI release Add a production SoundCloud experience (session auth, feed/discover/likes, tiles/list, shuffle, pull-to-refresh, playlist back stack) plus commitlint enforcement and a Release APK workflow that publishes feature notes. Co-authored-by: Cursor <cursoragent@cursor.com>
Move nav frame into the ViewModel and inline shuffle defaults so Hilt/KSP no longer hits Unexpected owner function: null. Co-authored-by: Cursor <cursoragent@cursor.com>
feat(soundcloud): add SoundCloud tab with feed, search, downloads, and CI release
Remove wearos-apk CI, build only :app in CodeQL, and fix SoundCloud experimental OptIn so release compiles. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…uild Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…tings Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…tiles Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add media3-exoplayer-hls so HLS streams no longer crash/spin forever, and show the active track in SoundCloud lists/tiles. Co-authored-by: Cursor <cursoragent@cursor.com>
Previously up to 40 NewPipe StreamInfo calls blocked play. HLS enables playback but does not fix that latency; play immediately then prefetch the rest of the queue. Co-authored-by: Cursor <cursoragent@cursor.com>
Fall back to linting HEAD when github.event.before is no longer a reachable commit after history rewrite. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep album art clear with a small EQ badge, shrink row actions, and use horizontal pagers for main tabs and Feed shelves. Co-authored-by: Cursor <cursoragent@cursor.com>
Gray out tracks with no stream and advance the queue instead of stopping playback. Embed real metadata and cover art on download, and add a setting to keep those files off the main library. Co-authored-by: Cursor <cursoragent@cursor.com>
Use the normal phone WebView layout for YouTube account sign-in. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep a recently played row at the top of Feed. Load liked songs from YouTube Music. Co-authored-by: Cursor <cursoragent@cursor.com>
Ask playlist LM directly and save music cookies during sign-in. Co-authored-by: Cursor <cursoragent@cursor.com>
Use the current client, the music auth cookie, and the visitor id. Co-authored-by: Cursor <cursoragent@cursor.com>
Browse playlist LM the way InnerTune does and skip regular YouTube likes. Co-authored-by: Cursor <cursoragent@cursor.com>
Open the now-playing card only when it is tapped. Co-authored-by: Cursor <cursoragent@cursor.com>
Match the active Music client and build Feed and Radio from the user's music. Co-authored-by: Cursor <cursoragent@cursor.com>
Show the keyboard and keep the clear control aligned to the input end. Co-authored-by: Cursor <cursoragent@cursor.com>
Capture VISITOR_DATA and DATASYNC_ID from the login WebView (KuroMusic/InnerTune style), fall back to sw.js_data and the page config with cookies, and send them as context.client.visitorData and context.user.onBehalfOfUser so InnerTube answers for the signed-in channel. Prefer music.youtube.com cookies when importing, verify the session via account/account_menu, load the personalized FEmusic_home shelves for the Feed and FEmusic_liked_playlists for the Playlists tab, and report a clear sign-in error when Liked Music comes back logged out. Co-authored-by: Cursor <cursoragent@cursor.com>
Skip silence is a new playback setting wired through DataStore to both ExoPlayer instances, so silent passages inside a track are trimmed. Start playback sooner: the load control now reads its numbers from loadControlBufferProfileFor, which asks for 1s of audio before starting instead of 2.5s, and the YouTube screen resolves the first few tracks of the visible list in the background so a tap plays from cache. Co-authored-by: Cursor <cursoragent@cursor.com>
Liked Music was a single 100-song fetch, so nothing past the first page was reachable. The client now returns a page plus its continuation token, and the Liked list pulls the next page when the user scrolls near the end, showing a spinner while it loads. Order is YouTube Music's own, newest like first, so the latest likes stay at the top and older ones come in as you scroll. Co-authored-by: Cursor <cursoragent@cursor.com>
The first Liked page now follows YouTube Music order, newest at the top. Local in-app likes no longer get appended, which had buried new songs. Scroll near the end of the list asks InnerTube for the next shelf page using the real playlist continuation, not a random token from the JSON. An empty page ends the list so older likes keep arriving as you go down. Co-authored-by: Cursor <cursoragent@cursor.com>
Tapping the track that is already loaded now calls playPause so playback keeps its position. A new song still starts from the beginning. Co-authored-by: Cursor <cursoragent@cursor.com>
Open Recap-style playlists with InnerTube VL browse like KuroMusic, and send like/like plus like/removelike so hearts actually hit Liked Music. A first tap starts the song; a later tap on the same track pauses or resumes. Long-press selects tracks to add to a library playlist or a new one. About now lists KibetMasi only, unused permissions are gone, and the changelog sheet stays half-height until you scroll it open. Co-authored-by: Cursor <cursoragent@cursor.com>
Opening still started Cast discovery and Bluetooth receivers without those permissions, so Android 14+ killed the process. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep machine-local Cursor rules out of git. Co-authored-by: Cursor <cursoragent@cursor.com>
The Playlists tab shows the current cover in front and a glimpse of the next playlist to the right. Co-authored-by: Cursor <cursoragent@cursor.com>
Tapping Download called canRequestPackageInstalls after that permission was removed, which killed the app on Pixel. Co-authored-by: Cursor <cursoragent@cursor.com>
Extract a safe package-install query, parse shared artwork paths, and register the lyrics screen-off receiver so the debug suite and assemble pass. Co-authored-by: Cursor <cursoragent@cursor.com>
The Playlists tab is the original list again. Now Playing shows the next queue cover by default. Co-authored-by: Cursor <cursoragent@cursor.com>
Tapping a playlist song queues that page from there. Long-press opens the same play all, queue, next, and playlist sheet. Co-authored-by: Cursor <cursoragent@cursor.com>
Long-press was ignored on fold tiles and nested row clicks. Select, overflow, and library-style multi-select now open the queue sheet; one song plays the list, many play only the checked tracks. Co-authored-by: Cursor <cursoragent@cursor.com>
The hero mix stays first. Recents sit after the collage, before the rest of the home shelves. Co-authored-by: Cursor <cursoragent@cursor.com>
A material 3 expressive action at the end of the feed replaces the old stats tab so plays and time stay reachable. Co-authored-by: Cursor <cursoragent@cursor.com>
Heart still likes a track. Bookmark was a local list with no screen to open it, so the row and mini player icons are gone. Co-authored-by: Cursor <cursoragent@cursor.com>
The select row was floating over the bottom of the screen, so the player and navigation covered it. The count chip sat on the tracks. Selection now uses the library action row at the top of the list.
Feed selections live on home shelves, not the results list, so the options button had no tracks to act on.
kibetmasi
force-pushed
the
cursor/youtube-selection-actions-4181
branch
from
September 28, 2026 18:50
08ce8b0 to
de143ed
Compare
Stats only looked up local library songs, so YouTube plays became Unknown Artist, Unknown Album, and missing tracks. Played YouTube songs are now kept and included in stats.
Stop labeling YouTube plays as YouTube Music. Read the artist and album from the track, and look them up when a row omits them.
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.
No description provided.