Skip to content

Add page: offer the game's fixes right after a Fetch - #39

Open
cheapmanga wants to merge 1 commit into
madoiscool:mainfrom
cheapmanga:feature/achievements
Open

Add page: offer the game's fixes right after a Fetch#39
cheapmanga wants to merge 1 commit into
madoiscool:mainfrom
cheapmanga:feature/achievements

Conversation

@cheapmanga

@cheapmanga cheapmanga commented Aug 29, 2026

Copy link
Copy Markdown

After a Fetch on the Add page, when the game has published fixes, a banner names them and takes you there:

This game has 1 fix(es) available: Online Fix. [ See fixes ]

The Add page after a Fetch: the banner names the fix and offers to open it

The button opens the Fixes page with that game already unfolded — the same route luatools://fix/ takes.

Why it names the kind. The endpoint is /api/denuvo/listings, but of the 1759 games it returns, 1621 are tagged "Online Fix" and no tag named "Denuvo" exists at all. Calling them Denuvo fixes would be wrong nearly every time, so the banner uses the tags the Fixes page already shows as pills. No tags on a game's fixes → plain sentence, no kinds.

Three behaviours worth knowing:

  • The lookup runs alongside the source check, never before it: whether a fix exists has no bearing on fetching manifests, so a Fetch is never held up by it.
  • A result that lands after the user moved on is dropped, so the banner can't advertise the previous game's fixes.
  • Games only — a DLC's fetch is about its depots, and a fix belongs to the base game. API unreachable means no banner, never an error.

FixLookupService fetches the listing once per session and keeps an appid → summary map, so the check is free after the first lookup.

Both strings are translated in all 29 languages; scripts/check-i18n.py passes. Rebased on main at 1.3.0: dotnet build -c Release is 0 warnings, 0 errors.

This PR previously also carried an Achievements page. That part is dropped — #37 was there first — so what is left is only the Add-page banner. The branch keeps its old name; its contents are just this.

cheapmanga added a commit to cheapmanga/LuaTools that referenced this pull request Aug 29, 2026
Brings the branch proposed upstream (madoiscool#39) into the fork's
main. The code was already identical: main carried the same work as three
commits and the branch as two, and the translations were cherry-picked over
earlier, so this merge only records the relationship between the two.

The single conflict was the README intro. Kept the fork's wording ("This fork
adds an Achievements page"), which is accurate here and would be wrong upstream
- that is exactly why the PR branch phrases it as a plain feature.
@cheapmanga cheapmanga changed the title Add an Achievements page (Steam achievement manager) Add an Achievements page, and offer a game's fixes after a Fetch Aug 29, 2026
@not1cyyy

Copy link
Copy Markdown

@cheapmanga did you deadass take my contribution and open a pull request under your name ? what a shame lol

@Kirkland-Pickles

Copy link
Copy Markdown

you should debundle the feature that you took from noticyyy and only add the "add fixes to fetch" as its own pr.

also a slightly more ideal version of this fixes button would adding the actual fix button to the games page inside the manage tab (given that the manifest needs to apply before the install, and the fix after)

Fetching a game showed its manifest sources and stopped there, even when the
game had published fixes a page away. A Fetch now also looks the game up in the
fix listing and, when there is one, the page shows a banner naming what is
waiting - "This game has 2 fix(es) available: SteamTools Achievements Fix,
voices38 (crack)" - with a button that opens the Fixes page on that game.

The kinds are named on purpose. The listing endpoint is called
/api/denuvo/listings, but of the 1759 games it returns, 1621 are tagged "Online
Fix" and no tag named "Denuvo" exists at all, so calling them Denuvo fixes would
be wrong nearly every time. The tags come from the same field the Fixes page
already renders as pills; a game whose fixes carry no tag falls back to a plain
sentence.

- FixLookupService loads the listing once per session and keeps an appid ->
  summary map, so the check costs nothing after the first lookup. A failed load
  isn't cached and shows no banner: it is never an error.
- The lookup runs alongside the source check, not before it. Whether a fix
  exists has no bearing on fetching manifests, and the fetch shouldn't wait.
- A result that lands after the user moved to another game is dropped, so the
  banner can't advertise the previous game's fixes.
- Games only: a DLC's fetch is about its depots, and a fix belongs to the base
  game.
- Both wordings are translated in all 29 languages.
@cheapmanga
cheapmanga force-pushed the feature/achievements branch from 824a67a to 2e784ba Compare August 30, 2026 09:08
@cheapmanga cheapmanga changed the title Add an Achievements page, and offer a game's fixes after a Fetch Add page: offer the game's fixes right after a Fetch Aug 30, 2026
@cheapmanga

Copy link
Copy Markdown
Author

@not1cyyy Your PR came first and that is what matters here, so I have dropped the achievements part from this one — it now only contains the Add-page fix banner, rebased on 1.3.0. Sorry again for the collision; I should have gone through the open PRs before opening mine, and I didn't.

For the record, since I would rather say it plainly than leave it hanging: I wrote mine from gibbed's SAM sources, not from yours, and the two ended up looking alike because SAM's interop is what you vendor and the 32-bit DLL forces a separate worker on everybody. But you were first, your PR stands, and I am not going to argue over who reinvented which wheel.

@Kirkland-Pickles Thanks — that is exactly what I did. And your other point is a better idea than what I built: the fix button belongs on the game's page in the Manage tab, since the manifest goes on before the install and the fix after. Happy to move it there if the maintainer wants it that way; say the word and I will.

@cheapmanga

Copy link
Copy Markdown
Author

To be clear, since my fork's build might suggest otherwise: I removed the achievements tab from this PR, not from my fork — I still use it locally, and anyone downloading my build will see it there. What I'm proposing here is only the Add-page banner.

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.

3 participants