Skip to content

Add Steam collections#1633

Open
VinceBT wants to merge 1 commit into
utkarshdalal:masterfrom
VinceBT:feature/steam-collections
Open

Add Steam collections#1633
VinceBT wants to merge 1 commit into
utkarshdalal:masterfrom
VinceBT:feature/steam-collections

Conversation

@VinceBT

@VinceBT VinceBT commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Description

Adds a Steam Collections filter to the library. It pulls your collections from Steam (via CloudConfigStore) and lets you narrow the library down to one or more of them from the options panel.

A few notes on the behavior:

  • Only standard collections show up — smart/dynamic collections aren't supported yet.
  • It fails open: if collections can't be loaded (offline, parse error, etc.) the library shows everything instead of going empty.
  • Picking multiple collections is a union (OR).
  • Localized strings are included, plus unit tests for the parser and the filter logic.

Most of the diff is the generated CloudConfigStore protobuf stub (SteammessagesCloudconfigstoreSteamclient.java); the actual feature code is small.

Recording

Screenshot_20260628_222352_GameNative

Type of Change

  • Bug fix
  • Performance / stability improvement
  • Compatibility improvements
  • Other (requires prior approval)

Checklist

  • If I have access to #code-changes, I have discussed this change there and it has been green-lighted. If I do not have access, I have still provided clear context in this PR. If I skip both, I accept that this change may face delays in review, may not be reviewed at all, or may be closed.
  • This change aligns with the current project scope (core functionality, stability, or performance). If not, it has been explicitly approved beforehand.
  • I have attached a recording of the change.
  • I have read and agree to the contribution guidelines in CONTRIBUTING.md.

Summary by cubic

Adds a Steam Collections filter to narrow your library by one or more Steam cloud collections. The section only shows when Steam is connected; selecting collections hides non‑Steam sources and excludes Steam’s Hidden games by default.

  • New Features

    • Adds a Steam Collections multi‑select in the options panel (collapsible section, per‑collection counts, Clear action, and loading/offline/unsupported messages).
    • Fetches collections after login via CloudConfigStore Download#1, caches a snapshot for offline/boot, reconciles removed collections with a snackbar, and skips smart/dynamic collections.
    • Filtering is a union (OR) and fails open; the built‑in “Hidden” collection isn’t offered and its games are excluded; non‑Steam sources and tab counts are hidden while a collection is selected.
    • Updates are scoped to the current account with in‑flight fetch cancelled on logout; the allowed app‑id set is resolved once per pass; corrupt cache (and the skipped‑dynamic flag) is cleared; JSON‑null id/name are treated as absent.
  • Dependencies

    • Bumps in.dragonbra:javasteam to 1.8.0.1-22-SNAPSHOT (includes CloudConfigStore protobufs); adds a minimal CloudConfigStoreService unified‑messages stub to receive Download#1 replies and removes the vendored proto.

Written for commit 0c1204b. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features
    • Added Steam collections support to the library: collections are fetched after login, cached for offline use, parsed into selectable collections, and used for filtering with per-collection item counts.
    • Added a Steam collections UI section with selection toggles and a clear action, including loading/offline/“smart collections not supported” messaging and feedback when a saved collection is removed.
  • Bug Fixes
    • Improved robustness when collection data is missing or corrupted by safely falling back to show all items and resetting invalid cached data.
  • Documentation
    • Added localized UI strings for Steam collections across multiple languages.
  • Tests
    • Added unit tests for Steam collection parsing and filtering/reconciliation behavior.

@VinceBT VinceBT requested a review from utkarshdalal as a code owner June 28, 2026 20:21
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds Steam collections support across fetch, parse, cache, filtering, library state, and UI. The library now loads user collections after login, persists them, exposes selection state, filters apps by collection membership, and renders selectable collection options with localized strings.

Changes

Steam Collections Filter

Layer / File(s) Summary
Data model, persistence, and repository
app/.../data/SteamCollection.kt, app/.../PrefManager.kt, app/.../data/SteamCollectionRepository.kt, app/.../ui/data/LibraryState.kt
Defines SteamCollection with favorite/hidden IDs; adds persisted cache and selection preferences; introduces SteamCollectionRepository with collections and skippedDynamic state flows; extends LibraryState with selected IDs, loaded collections, skipped-dynamic state, and per-collection counts.
CloudConfigStore fetch and collection parsing
app/.../steam/CloudConfigStoreService.kt, app/.../steam/SteamCollectionParser.kt, app/.../service/SteamService.kt
Adds the CloudConfigStore unified-messages stub; parses raw collection entries into SteamCollection objects while skipping deleted and dynamic entries; fetches collections after login, cancels the fetch job on teardown, and clears the repository on user-data reset.
SteamCollectionFilter logic and tests
app/.../steam/SteamCollectionFilter.kt, app/src/test/.../SteamCollectionFilterTest.kt, app/src/test/.../SteamCollectionParserTest.kt
Adds fail-open collection filtering, hidden-collection handling, and selection reconciliation; adds tests covering filter behavior and parser edge cases.
LibraryViewModel collections integration
app/.../ui/model/LibraryViewModel.kt
Loads and reconciles collection selections, observes repository updates, computes collection counts, applies collection-based filtering, and adds toggle/clear handlers.
Library UI wiring and Steam collections panel
app/.../ui/component/OptionListItem.kt, app/.../ui/screen/library/LibraryScreen.kt, app/.../ui/screen/library/components/LibraryOptionsPanel.kt
Adds trailing text support to option rows, threads Steam collection callbacks and state through the library screen, and renders the Steam collections section with loading, selection, count, and status states.
Localized string resources
app/src/main/res/values/strings.xml, app/src/main/res/values-*/strings.xml
Adds Steam collections UI strings in the base locale and translated resource files.

Sequence Diagram(s)

sequenceDiagram
  participant SteamService
  participant CloudConfigStoreService
  participant SteamCollectionParser
  participant SteamCollectionRepository
  participant LibraryViewModel

  SteamService->>CloudConfigStoreService: download(user collections namespace)
  CloudConfigStoreService-->>SteamService: Download response
  SteamService->>SteamCollectionParser: parse(raw entries)
  SteamCollectionParser-->>SteamService: ParseResult(collections, skippedDynamicCount)
  SteamService->>SteamCollectionRepository: update(result)
  SteamCollectionRepository-->>LibraryViewModel: collections / skippedDynamic emits
  LibraryViewModel->>LibraryViewModel: reconcile + onFilterApps()
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • utkarshdalal

Poem

🐇 I hop through collections, neat and fine,
Hidden and favorite now line by line.
The parser munches entries, cache holds the prize,
The library filters with bright bunny eyes.
Hop hop—Steam collections are in sight!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.83% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title is concise and accurately summarizes the main change: adding Steam collections support.
Description check ✅ Passed The description includes the required sections and covers the change, recording, change type, and checklist, though some checklist boxes are still unchecked.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

6 issues found across 31 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="app/src/main/java/app/gamenative/ui/screen/library/LibraryScreen.kt">

<violation number="1" location="app/src/main/java/app/gamenative/ui/screen/library/LibraryScreen.kt:1092">
P2: Steam login state is passed to `LibraryOptionsPanel` via a non-observable static property (`SteamService.isLoggedIn`). In Compose, this will not trigger recomposition when the login state changes, so the collection filter UI can become stale.</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Re-trigger cubic

Comment thread app/src/main/java/app/gamenative/service/SteamService.kt Outdated
Comment thread app/src/main/java/app/gamenative/ui/screen/library/LibraryScreen.kt Outdated
Comment thread app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
Comment thread app/src/main/java/app/gamenative/ui/screen/library/components/LibraryTabBar.kt Outdated
Comment thread app/src/main/java/app/gamenative/steam/SteamCollectionParser.kt

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
app/src/test/java/app/gamenative/steam/SteamCollectionFilterTest.kt (1)

51-60: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add a regression test for selecting an empty static collection.

SteamCollectionParserTest already treats "added":[] as a valid static collection, but this suite never asserts the filter behavior when that collection is selected. That leaves room for allowedAppIds(...) to collapse an empty union to null and fail open to “show all” instead of “show none”.

Suggested test
 class SteamCollectionFilterTest {
     private val favorites = SteamCollection("fav", "Favorites", setOf(440, 570))
     private val shooters = SteamCollection("sht", "Shooters", setOf(730))
-    private val all = listOf(favorites, shooters)
+    private val empty = SteamCollection("emp", "Empty", emptySet())
+    private val all = listOf(favorites, shooters, empty)
@@
     `@Test` fun allowedAppIdsUnionsSelectedCollections() {
         assertEquals(setOf(440, 570), SteamCollectionFilter.allowedAppIds(setOf("fav"), all))
         assertEquals(setOf(440, 570, 730), SteamCollectionFilter.allowedAppIds(setOf("fav", "sht"), all))
     }
+
+    `@Test` fun emptySelectedCollectionMatchesNothing() {
+        assertEquals(emptySet<Int>(), SteamCollectionFilter.allowedAppIds(setOf("emp"), all))
+        assertFalse(SteamCollectionFilter.passes(440, setOf("emp"), all))
+    }
 }
🤖 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 `@app/src/test/java/app/gamenative/steam/SteamCollectionFilterTest.kt` around
lines 51 - 60, Add a regression test in SteamCollectionFilterTest for the empty
static collection case so allowedAppIds() does not fail open. Reuse the existing
all fixture and SteamCollectionFilter.allowedAppIds, then assert that selecting
the static collection key for the empty collection returns an empty set rather
than null. This should specifically cover the behavior around allowedAppIds and
the static collection that SteamCollectionParserTest already accepts as valid.
🤖 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 `@app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt`:
- Around line 22-41: Persist the skipped-dynamic state alongside the cached
collections so offline/cold starts restore the same UI state. Update
SteamCollectionRepository.loadFromCache() and update() to read/write the
skippedDynamic flag together with the existing librarySteamCollectionsCache
snapshot, and make sure _skippedDynamic is restored from cache before the UI
relies on it. Use the existing SteamCollectionRepository, loadFromCache(), and
update(result: SteamCollectionParser.ParseResult) symbols to keep the fix
localized.

In `@app/src/main/java/app/gamenative/service/SteamService.kt`:
- Around line 3747-3749: The collections fetch launched from SteamService’s
fetchSteamCollections flow is not tied to the active Steam session, so it can
still write into SteamCollectionRepository after logout/reconnect. Track the
coroutine/job started by the scope.launch call, cancel it from clearUserData and
any reconnect/session reset path, and make fetchSteamCollections verify the
SteamID/session it started with still matches before applying results. Apply the
same session guard to the other fetch path referenced in SteamService so stale
CloudConfigStore results cannot repopulate or overwrite a newer account’s
collections.

In `@app/src/main/java/app/gamenative/ui/model/LibraryViewModel.kt`:
- Around line 600-609: The active Steam collection filter is only applied to
Steam apps in the LibraryViewModel flow, so non-Steam sources still leak into
the combined library and tab counts. Update the library assembly logic around
allowedSteamAppIds and steamFilteredBeforeCompatibility in LibraryViewModel to
also gate custom/GOG/Epic/Amazon entries whenever allowedSteamAppIds is not
null, or otherwise make the filter explicitly source-scoped so the combined
results and counts stay consistent with the selected collection.

In
`@app/src/main/java/app/gamenative/ui/screen/library/components/LibraryOptionsPanel.kt`:
- Around line 356-358: The empty-state handling in LibraryOptionsPanel should
not return early when steamCollections is empty, because that prevents the
status copy from rendering. Update the logic around the
steamCollections.isEmpty() branch and the related offline/smart-collection cases
so only the selectable list is gated by isNotEmpty(), while the status text is
rendered independently. Use the existing LibraryOptionsPanel composable and the
collection/status rendering block to keep dynamic-collection users seeing the
explanation instead of an empty section.

In
`@app/src/main/java/app/gamenative/ui/screen/library/components/LibraryTabBar.kt`:
- Around line 199-205: The active-filter badge in the Options button is
visual-only, so update the accessibility semantics in LibraryTabBar’s
badge/button block and the related Options button block to announce filter state
when isAnyFilterActive is true. Adjust the CompactIconButton contentDescription
or add semantics/stateDescription so TalkBack users hear that filters are
active, while keeping the inactive state unchanged.

In `@app/src/main/res/values-zh-rCN/strings.xml`:
- Line 1633: Update the localized title string for the Steam collections header
in strings.xml so it uses the same “collections” term as the surrounding
translations; change the Steam collections title entry to match the existing 收藏集
wording used elsewhere for consistency.

---

Nitpick comments:
In `@app/src/test/java/app/gamenative/steam/SteamCollectionFilterTest.kt`:
- Around line 51-60: Add a regression test in SteamCollectionFilterTest for the
empty static collection case so allowedAppIds() does not fail open. Reuse the
existing all fixture and SteamCollectionFilter.allowedAppIds, then assert that
selecting the static collection key for the empty collection returns an empty
set rather than null. This should specifically cover the behavior around
allowedAppIds and the static collection that SteamCollectionParserTest already
accepts as valid.
🪄 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: de761d9b-189a-48db-977e-0686ba7476f9

📥 Commits

Reviewing files that changed from the base of the PR and between 82fc5b2 and 56ff0ca.

📒 Files selected for processing (31)
  • app/src/main/java/app/gamenative/PrefManager.kt
  • app/src/main/java/app/gamenative/data/SteamCollection.kt
  • app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
  • app/src/main/java/app/gamenative/service/SteamService.kt
  • app/src/main/java/app/gamenative/steam/CloudConfigStoreService.kt
  • app/src/main/java/app/gamenative/steam/SteamCollectionFilter.kt
  • app/src/main/java/app/gamenative/steam/SteamCollectionParser.kt
  • app/src/main/java/app/gamenative/ui/component/OptionListItem.kt
  • app/src/main/java/app/gamenative/ui/data/LibraryState.kt
  • app/src/main/java/app/gamenative/ui/model/LibraryViewModel.kt
  • app/src/main/java/app/gamenative/ui/screen/library/LibraryScreen.kt
  • app/src/main/java/app/gamenative/ui/screen/library/components/LibraryOptionsPanel.kt
  • app/src/main/java/app/gamenative/ui/screen/library/components/LibraryTabBar.kt
  • app/src/main/java/in/dragonbra/javasteam/protobufs/steamclient/SteammessagesCloudconfigstoreSteamclient.java
  • app/src/main/res/values-da/strings.xml
  • app/src/main/res/values-de/strings.xml
  • app/src/main/res/values-es/strings.xml
  • app/src/main/res/values-fr/strings.xml
  • app/src/main/res/values-it/strings.xml
  • app/src/main/res/values-ja/strings.xml
  • app/src/main/res/values-ko/strings.xml
  • app/src/main/res/values-pl/strings.xml
  • app/src/main/res/values-pt-rBR/strings.xml
  • app/src/main/res/values-ro/strings.xml
  • app/src/main/res/values-ru/strings.xml
  • app/src/main/res/values-uk/strings.xml
  • app/src/main/res/values-zh-rCN/strings.xml
  • app/src/main/res/values-zh-rTW/strings.xml
  • app/src/main/res/values/strings.xml
  • app/src/test/java/app/gamenative/steam/SteamCollectionFilterTest.kt
  • app/src/test/java/app/gamenative/steam/SteamCollectionParserTest.kt

Comment thread app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
Comment thread app/src/main/java/app/gamenative/service/SteamService.kt
Comment thread app/src/main/java/app/gamenative/ui/model/LibraryViewModel.kt Outdated
Comment thread app/src/main/java/app/gamenative/ui/screen/library/components/LibraryTabBar.kt Outdated
Comment thread app/src/main/res/values-zh-rCN/strings.xml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/src/main/java/app/gamenative/PrefManager.kt (1)

865-885: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Clear the new collection prefs on Steam logout.

clearSteamSessionPreferences() still only removes auth/profile keys, so these new librarySteamCollections* values survive account logout. SteamCollectionRepository.loadFromCache() restores the cached collections/skipped-dynamic flag from disk, and LibraryState seeds selectedSteamCollectionIds from PrefManager.librarySteamCollections, so the next Steam account can inherit the previous user's collections/filter state until a fresh sync reconciles it.

Suggested fix
     fun clearSteamSessionPreferences() {
         scope.launch {
             dataStore.edit { pref ->
                 pref.remove(USER_NAME)
                 pref.remove(ACCESS_TOKEN_ENC)
                 pref.remove(REFRESH_TOKEN_ENC)
                 pref.remove(CLIENT_ID)
                 pref.remove(PERSONA_STATE)
                 pref.remove(STEAM_USER_ACCOUNT_ID)
                 pref.remove(STEAM_USER_STEAM_ID_64)
                 pref.remove(STEAM_USER_AVATAR_HASH)
                 pref.remove(STEAM_USER_NAME)
                 pref.remove(LAST_PICS_CHANGE_NUMBER)
                 pref.remove(STEAM_GAMES_COUNT)
+                pref.remove(LIBRARY_STEAM_COLLECTIONS_CACHE)
+                pref.remove(LIBRARY_STEAM_COLLECTIONS_SKIPPED_DYNAMIC)
+                pref.remove(LIBRARY_STEAM_COLLECTIONS)
             }
         }
     }
🤖 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 `@app/src/main/java/app/gamenative/PrefManager.kt` around lines 865 - 885,
Clear the new Steam collection preference values during logout by updating
clearSteamSessionPreferences() so it also removes librarySteamCollectionsCache,
librarySteamCollectionsSkippedDynamic, and librarySteamCollections in
PrefManager. This prevents SteamCollectionRepository.loadFromCache() and
LibraryState from restoring the previous user’s collection cache/filter state
after account sign-out; keep the change localized to the logout cleanup path
alongside the existing auth/profile key removals.
🤖 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.

Outside diff comments:
In `@app/src/main/java/app/gamenative/PrefManager.kt`:
- Around line 865-885: Clear the new Steam collection preference values during
logout by updating clearSteamSessionPreferences() so it also removes
librarySteamCollectionsCache, librarySteamCollectionsSkippedDynamic, and
librarySteamCollections in PrefManager. This prevents
SteamCollectionRepository.loadFromCache() and LibraryState from restoring the
previous user’s collection cache/filter state after account sign-out; keep the
change localized to the logout cleanup path alongside the existing auth/profile
key removals.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 94b62e50-26c2-4b37-9201-33b227c4d51b

📥 Commits

Reviewing files that changed from the base of the PR and between 507c323 and 1a9bf03.

📒 Files selected for processing (5)
  • app/src/main/java/app/gamenative/PrefManager.kt
  • app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
  • app/src/main/java/app/gamenative/service/SteamService.kt
  • app/src/main/java/app/gamenative/steam/SteamCollectionParser.kt
  • app/src/main/res/values-zh-rCN/strings.xml
✅ Files skipped from review due to trivial changes (1)
  • app/src/main/res/values-zh-rCN/strings.xml
🚧 Files skipped from review as they are similar to previous changes (3)
  • app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
  • app/src/main/java/app/gamenative/steam/SteamCollectionParser.kt
  • app/src/main/java/app/gamenative/service/SteamService.kt

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1 issue found across 5 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="app/src/main/java/app/gamenative/PrefManager.kt">

<violation number="1" location="app/src/main/java/app/gamenative/PrefManager.kt:873">
P2: Persisted `librarySteamCollectionsSkippedDynamic` can become stale because it is not reset when the cache is cleared on corruption. In `SteamCollectionRepository.loadFromCache()`, when the cached JSON is corrupt, only `librarySteamCollectionsCache` is cleared, leaving the skipped-dynamic flag stale in prefs.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread app/src/main/java/app/gamenative/PrefManager.kt

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt`:
- Around line 29-33: The corrupt-cache recovery path in
SteamCollectionRepository.loadFromCache() clears persistence but leaves the
in-memory collections state stale. Update the catch block to also reset
_collections when cached data fails to load, alongside clearing
PrefManager.librarySteamCollectionsCache and
PrefManager.librarySteamCollectionsSkippedDynamic. Make sure the fix keeps the
in-memory state aligned with the cleared cache so subsequent loads do not reuse
old data.
🪄 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: eb0d2c90-86a1-41bf-bd71-fafcc686b180

📥 Commits

Reviewing files that changed from the base of the PR and between 1a9bf03 and ce52ff0.

📒 Files selected for processing (1)
  • app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt

Comment thread app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

1 issue found across 1 file (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread app/src/main/java/app/gamenative/data/SteamCollectionRepository.kt
@VinceBT VinceBT force-pushed the feature/steam-collections branch 4 times, most recently from 743457b to 6233433 Compare July 7, 2026 21:21
@VinceBT VinceBT force-pushed the feature/steam-collections branch from 6233433 to 0c1204b Compare July 7, 2026 21:47
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.

4 participants