mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 02:51:10 +00:00
## What this does The itch.io Store tab used to show only four fixed shelves. This is the first of a series of PRs that rework it. It adds real browsing: pick an order and a price filter, and the tab loads itch's own listing for that choice and keeps loading as you scroll. Login, the library, downloads and installs are unchanged. Platform and tag filters, the game page with the install picker, updates and collections are not in this PR. They come in the following ones. ## How it works itch serves every listing page as an RSS feed if you add `.xml` to the address. The app already reads those feeds for the shelves, so browsing reuses the same parser (`ItchShelves.parse`). Nothing here needs the API key. The address is built the way itch builds its own links: sort, then price, then `platform-<name>`, then `tag-<slug>`. | Choice | Address | |---|---| | Popular (default) | `https://itch.io/games` | | New & popular | `/games/new-and-popular` | | Top sellers | `/games/top-sellers` | | Top rated | `/games/top-rated` | | Most recent | `/games/newest` | | Free | `/games/free` | | On sale | `/games/on-sale` | | Paid | `/games/store` | | $5 or less | `/games/5-dollars-or-less` | | $15 or less | `/games/15-dollars-or-less` | Choices combine, for example `/games/top-rated/free`, then `.xml` for the feed. Page 2 and later add `?page=N`. ## Changes **`stores/itch/ItchBrowse.kt` (new)** - `BrowseQuery` holds sort, price, platforms and tags. The default query is the front page, which keeps the existing shelves. - `ItchBrowse.path` and `url` build the addresses above. Only the spellings listed above are used. Platforms and tags are already accepted by the builder, ready for the next PR. - `ItchBrowse.page` loads one page of results: - Disk cache under `cacheDir/itch-browse`, keyed by the SHA-1 of the address, fresh for 3 hours. - Requests are made one at a time, at least 1.2 s apart. - A 429 answer waits 8 s and tries once more. - Each request is written to the store log (address, status, number of games). - `ItchBrowseState` is the Compose state for the tab: the query, the games loaded so far, and the loading, ended and failed flags. A generation counter discards answers that arrive after the user has changed the query. Paging skips games it has already shown. **`ui/ItchBrowseBar.kt` (new)** - A sort chip row and a price chip row, plus a load-more trigger at the end of the grid. - Chips are selectable, work with the controller (`controllerConfirm`) and use the same glide border as the rest of the app. **`ui/StoresPage.kt`** - The storefront shows the chip bar for itch.io and, when a non-default choice is active, the browse results in the existing grid instead of the shelves. - Games you already own are marked as owned in the results. - Empty and failed states have their own messages. **`stores/itch/ItchShelves.kt`** - `open(url)` is now `internal` so browsing can reuse it. **`stores/StoresState.kt`** - `detailItem` also looks in the browse results for itch.io, so tapping a result opens its detail page. **Strings** - 13 new strings (sort names, price names, "Load more", "Couldn't load games"), translated in all 33 locales. **Docs and tests** - `docs/development/itch-browse.md` explains the address scheme, the cache and the paging. - `ItchBrowseTest` checks the addresses the code builds against the ones listed above. ## Testing I checked every address with `.xml` added, and all of them load without errors: - Every sort, every price filter and every platform on its own. - Combinations: `top-rated/free`, `top-rated/on-sale`, `top-rated/store`, `top-rated/5-dollars-or-less`, `top-rated/free/platform-windows` and `top-rated/free/platform-windows/tag-pixel-art`. - Paging: `?page=2` and `top-rated.xml?page=2`. The unit test locks those addresses in. ## Not in this PR - Platform and tag filters in the UI, and search. - The game page, the version picker and install for free games. - Updates for installed games and itch collections. - Android builds will link out to the itch.io page. Butler patching comes last, as an add-on pack.