Add Non-Steam Store Link - #223
Conversation
Thanks for putting this together, the idea is genuinely useful: non-Steam shortcuts are a dead end in the library UI today. Two structural problems need sorting before this can ship, and one behavioural one that I think matters more than it looks. 1. Blocker: the repository contains no source codeThe pinned commit has four tracked files: There is no Two consequences. The store CI cannot build it. The workflow runs That fails the job. Note that The submission checklist asks for the plugin to be fully open source. Shipping only the compiled artifact means reviewers and users can audit the output but not the input. I read the whole bundle, and to be fair it is not minified and not obfuscated, so it is auditable in practice. But a plugin that cannot be rebuilt from its own repository cannot be verified to match its source, and cannot be patched by anyone else. Publishing the TypeScript or JavaScript sources plus a Related, and worth removing while you are in there:
2. The PR currently has a merge conflictGitHub reports the branch as not mergeable, most likely 3. Nothing is unregistered when the plugin unloadsIn the bundle's lifecycle wiring: const { Unregister: unregisterCreated } = Steam.PopupManager.AddPopupCreatedCallback(onPopup);
const { Unregister: unregisterDestroyed } = Steam.PopupManager.AddPopupDestroyedCallback(...);Both The location watcher is handled correctly by comparison: One smaller leak in the same area: when the chip is re-injected on a route change, the previous wrapper is removed from the DOM but its React root is never unmounted, so a root is orphaned per navigation.
4. The chip does not open a search, and it often opens the wrong gameThe README and the PR description both say it "opens a Steam Store search for that game's name". The code does something else: it fetches the search page, scrapes the first result row, and navigates straight to that app. const response = await fetch(searchUrl);
const doc = parser.parseFromString(html, "text/html");
const firstResult = doc.querySelector("a.search_result_row, .search_result_row");
const href = firstResult?.getAttribute("href");
if (href) targetUrl = href;
...
window.SteamClient.URL.ExecuteSteamURL(`steam://openurl/${targetUrl}`);I ran that exact sequence inside Steam's JavaScript context against the live store, using names of the kind non-Steam shortcuts actually have:
Non-Steam shortcuts are overwhelmingly launchers, emulators, installers and games that are not on Steam at all, which is precisely the population where the top hit is wrong. Silently opening an unrelated store page is worse than opening the search page, because the user has no signal that the guess failed. Three further notes on that block:
5. Hardening: the scraped href is used unvalidated
window.SteamClient.URL.ExecuteSteamURL(`steam://openurl/${targetUrl}`);There is no check that it is Also worth removing: line 245 of the bundle logs at 6. Compatibility noteThis injects into the same Happy to re-review once the sources are in the repository, and to actually install and test it at that point. |
A Millennium plugin that adds a "Find on Steam Store" chip next to Last Played/Playtime for games you've added to Steam manually (non-Steam shortcuts). Clicking it opens a Steam Store search for that game's name in your default browser.
Built on the same "game stat chip" anchor point and popup/route-watching pattern as the [Size on Disk] plugin by k0d13.