Skip to content

fix: check the real plugin name before a local ZIP install - #1003

Open
burghr wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
burghr:fix/local-zip-install-name
Open

burghr wants to merge 1 commit into
SteamDeckHomebrew:mainfrom
burghr:fix/local-zip-install-name

Conversation

@burghr

@burghr burghr commented Oct 27, 2026

Copy link
Copy Markdown

Please tick as appropriate:

  • I have tested this code on a steam deck or on a PC
  • My changes generate no new errors/warnings
  • This is a bugfix/hotfix
  • This is a new feature

If you're wanting to update a translation or add a new one, please use the weblate page: https://weblate.werwolv.net/projects/decky/

Description

This fixes issue: #993

For a local ZIP install, the frontend uses the ZIP file name as the plugin name. _install() checks for an installed plugin with that name before it reads the real name from plugin.json. When the two names are different, the check finds nothing, and the installer does not check again. So it does not uninstall the old plugin, and it extracts the ZIP over the running plugin. On Linux, the overwrite of a running backend binary fails with ETXTBSY, and the install stops at "Installing plugin".

This change checks again with the real name from plugin.json. The early check stays, because the install count request for a URL install uses it. The fix also stops a second entry of the plugin in pluginOrder.

Testing

Steam Deck OLED, SteamOS 3.9.5, Steam client stable. The test plugin is PowerTools 2.0.3, which has a native backend. The ZIP is powertools-test-993.zip.

  • v3.3.0: the install stops. The Steam UI log shows Rejected PY call with a Python OSError for utilities/confirm_plugin_install. The old backend keeps running, and bin/backend is not replaced.
  • With this change: the old plugin is uninstalled and stopped first. The install completes, and the new backend starts.
  • A local test with a temporary plugin folder shows the same results. It also shows that pluginOrder gets the name only one time.
  • pyright gives 0 errors.

The frontend uses the ZIP file name as the plugin name for a local
install. When the file name is different from the name in plugin.json,
the first check for an installed plugin finds nothing. The installer
reads the real name later, but it did not check again. So it did not
uninstall the old plugin, and it extracted the ZIP over the running
plugin. On Linux, the overwrite of a running backend binary fails with
ETXTBSY, and the install stops before it completes.

Check again with the real name from plugin.json. Also, the installer
no longer adds the plugin to pluginOrder a second time.

Fixes SteamDeckHomebrew#993
@burghr
burghr marked this pull request as ready for review October 27, 2026 00:09
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.

2 participants