Skip to content

6.5.1 - #291

Merged
shub39 merged 6 commits into
masterfrom
dev
Jul 21, 2026
Merged

6.5.1#291
shub39 merged 6 commits into
masterfrom
dev

Conversation

@shub39

@shub39 shub39 commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features
    • Added GitHub Sponsors support options in the paywall and engagement links.
  • Bug Fixes
    • Fixed lyrics search and fetching behavior with improved title/artist matching.
    • Improved lyrics source presentation with a Genius icon.
    • Addressed changelog display on first install.
  • UI Updates
    • Updated the changelog sheet actions styling and support button behavior.
  • Documentation / Release
    • Added release notes and updated the app to version 6.5.1.

shub39 added 5 commits July 20, 2026 21:53
* prevented new installs from showing changelog
* Added filters for all brackets in lyrics search
* Added github sponsors link to foss paywall and about page and changelog sheet
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a0209206-157e-4657-b260-11c90277c57f

📥 Commits

Reviewing files that changed from the base of the PR and between 000e98d and 60692d3.

📒 Files selected for processing (2)
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/GlobalVM.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt

📝 Walkthrough

Walkthrough

The release updates version metadata and changelogs, normalizes song titles and artists, refactors lyrics search and fetching around cancellable jobs, adds conditional changelog support navigation, and adds GitHub Sponsors UI actions.

Changes

Lyrics normalization and search

Layer / File(s) Summary
Lyrics title and artist normalization
shared/core/.../Util.kt, shared/core/src/commonTest/kotlin/*
Bracket removal is shared between title and artist cleanup, with tests covering normalized titles and artists.
Job-managed lyrics search
shared/ui/.../SearchSheetVM.kt
Song observation, searching, and lyrics fetching now use cancellable jobs and normalized song metadata while updating lyrics states.

Changelog and support UI

Layer / File(s) Summary
Changelog support navigation
shared/logic/.../changelog.json, shared/ui/.../ChangelogSheet.kt, shared/ui/.../GlobalVM.kt, */App.kt
Version 6.5.1 changelog data is added, first-install display is skipped, and support actions conditionally navigate to the Android paywall.
Support and lyrics UI surfaces
shared/ui/.../FossPaywall.kt, shared/ui/.../About.kt, shared/ui/.../PlainLyrics.kt
GitHub Sponsors actions are added to support surfaces, and the lyrics source action uses a Genius icon.

Release metadata and toolchain

Layer / File(s) Summary
Release metadata and toolchain versions
CHANGELOG.md, androidApp/build.gradle.kts, gradle/libs.versions.toml
The release is bumped to 6.5.1/6510 and selected Gradle dependencies and plugins are updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant MediaListener
  participant SearchSheetVM
  participant Util
  participant LyricsRepository
  MediaListener->>SearchSheetVM: Emit song metadata
  SearchSheetVM->>Util: Normalize title and artist
  Util-->>SearchSheetVM: Return main title and artist
  SearchSheetVM->>LyricsRepository: Search or fetch lyrics
  LyricsRepository-->>SearchSheetVM: Return results or lyrics
  SearchSheetVM-->>SearchSheetVM: Update search and lyrics state
Loading

Possibly related PRs

  • shub39/Rush#226: Its lyrics API search logic also uses getMainArtist and getMainTitle.
  • shub39/Rush#256: It also changes SearchSheetVM lyrics search and fetch orchestration.
  • shub39/Rush#278: It also modifies the ChangelogSheet composable.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title only shows the version number and does not describe the actual change. Use a concise descriptive title that names the main change, such as updating the changelog and app version to 6.5.1.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🧹 Nitpick comments (2)
shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/ChangelogSheet.kt (1)

147-147: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Extract hardcoded strings to resource files for localization.

These newly added UI elements use hardcoded English text, which makes them inconsistent with adjacent elements (like the BMC button) that correctly utilize stringResource for internationalization.

  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/ChangelogSheet.kt#L147-L147: extract "Support Rush" to a string resource.
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/FossPaywall.kt#L139-L139: extract "GitHub Sponsors" to a string resource.
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/setting/section/About.kt#L188-L189: extract "GitHub Sponsors" and "Support me through GitHub" to string resources.
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/lyrics/component/PlainLyrics.kt#L272-L272: extract "Genius Source" to a string resource.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/ChangelogSheet.kt`
at line 147, Replace the hardcoded UI labels with localized string resources,
following the existing stringResource pattern: update ChangelogSheet.kt lines
147-147 for “Support Rush”, FossPaywall.kt lines 139-139 for “GitHub Sponsors”,
About.kt lines 188-189 for both “GitHub Sponsors” and “Support me through
GitHub”, and PlainLyrics.kt lines 272-272 for “Genius Source”; add the
corresponding resource entries and use them in each component.
shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt (1)

89-108: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant coroutine nesting in observeSongInfo.

viewModelScope.launch { flow.onEach{...}.launchIn(this) } wraps a collector launch inside another launch with no added value. Collecting directly (onEach{...}.launchIn(viewModelScope)) and assigning that Job to observeSongInfoJob is equivalent and simpler to reason about for cancellation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt`
around lines 89 - 108, Update observeSongInfo to remove the outer
viewModelScope.launch around the MediaListener.songInfoFlow collection. Keep the
existing distinctUntilChanged and onEach logic, launch the flow directly in
viewModelScope, and assign the returned Job to observeSongInfoJob so
cancellation remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/GlobalVM.kt`:
- Around line 104-107: Update the changelog handling in the launch coroutine
around lastShownChangelog and changelogManager.changelogs so that when
lastShownChangelog is blank, it fetches the latest changelog version, persists
that version, and then returns without displaying the changelog. Preserve the
existing display behavior for subsequent launches.

In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt`:
- Around line 163-185: The search flow in the coroutine around repo.searchGenius
should update _lastSearched only when the result is Result.Success. Remove the
unconditional _lastSearched update from finally while preserving the existing
cleanup there, so failed searches can be retried with the same query.
- Around line 216-226: The fetchLyrics method currently cancels the previous job
and then returns when LyricsState is Fetching, dropping replacement requests.
Move the Fetching guard before fetchJob?.cancel() if only one request may run,
or remove that guard to allow the newly requested song to start; update the
logic in fetchLyrics accordingly.

---

Nitpick comments:
In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/ChangelogSheet.kt`:
- Line 147: Replace the hardcoded UI labels with localized string resources,
following the existing stringResource pattern: update ChangelogSheet.kt lines
147-147 for “Support Rush”, FossPaywall.kt lines 139-139 for “GitHub Sponsors”,
About.kt lines 188-189 for both “GitHub Sponsors” and “Support me through
GitHub”, and PlainLyrics.kt lines 272-272 for “Genius Source”; add the
corresponding resource entries and use them in each component.

In
`@shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt`:
- Around line 89-108: Update observeSongInfo to remove the outer
viewModelScope.launch around the MediaListener.songInfoFlow collection. Keep the
existing distinctUntilChanged and onEach logic, launch the flow directly in
viewModelScope, and assign the returned Job to observeSongInfoJob so
cancellation remains unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 572b058b-f44d-45e6-ac6a-156654586a03

📥 Commits

Reviewing files that changed from the base of the PR and between 1865e15 and 000e98d.

📒 Files selected for processing (15)
  • CHANGELOG.md
  • androidApp/build.gradle.kts
  • androidApp/src/main/java/com/shub39/rush/app/App.kt
  • desktopApp/src/commonMain/kotlin/com/shub39/rush/app/App.kt
  • gradle/libs.versions.toml
  • shared/core/src/commonMain/kotlin/com/shub39/rush/shared/core/Util.kt
  • shared/core/src/commonTest/kotlin/TTMLParserTest.kt
  • shared/core/src/commonTest/kotlin/UtilTest.kt
  • shared/logic/src/commonMain/composeResources/files/changelog.json
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/ChangelogSheet.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/component/FossPaywall.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/lyrics/component/PlainLyrics.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/setting/section/About.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/GlobalVM.kt
  • shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/SearchSheetVM.kt

Comment thread shared/ui/src/commonMain/kotlin/com/shub39/rush/shared/ui/viewmodels/GlobalVM.kt Outdated
@shub39
shub39 merged commit b9d26d1 into master Jul 21, 2026
2 of 3 checks 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.

1 participant