diff options
| author | eXhumer <62310242+eXhumer@users.noreply.github.com> | 2024-02-15 04:17:26 +0000 |
|---|---|---|
| committer | Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> | 2024-02-20 21:34:16 +0000 |
| commit | dc1697d04961e1b413a43ad345c28e4fb3d5c03f (patch) | |
| tree | cdac2508417a46cfe9a75a9639ffdee5993caa02 | |
| parent | 35f6f041c1e800a8df9c222a17c00663ad3c9090 (diff) | |
| download | decky-loader-dc1697d04961e1b413a43ad345c28e4fb3d5c03f.tar.gz decky-loader-dc1697d04961e1b413a43ad345c28e4fb3d5c03f.zip | |
Get plugin name for development ZIP during installation (#578)
* fix: get plugin name for dev builds from ZIP (SteamDeckHomebrew/decky-loader#527)
Signed-off-by: eXhumer <exhumer1@protonmail.com>
| -rw-r--r-- | backend/decky_loader/browser.py | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/backend/decky_loader/browser.py b/backend/decky_loader/browser.py index 436e8abf..35b36911 100644 --- a/backend/decky_loader/browser.py +++ b/backend/decky_loader/browser.py @@ -10,6 +10,7 @@ from hashlib import sha256 from io import BytesIO from logging import getLogger from os import R_OK, W_OK, path, listdir, access, mkdir +from re import sub from shutil import rmtree from time import time from zipfile import ZipFile @@ -162,12 +163,6 @@ class PluginBrowser: current_plugin_order = self.settings.getSetting("pluginOrder")[:] if self.loader.watcher: self.loader.watcher.disabled = True - try: - pluginFolderPath = self.find_plugin_folder(name) - if pluginFolderPath: - isInstalled = True - except: - logger.error(f"Failed to determine if {name} is already installed, continuing anyway.") # Check if the file is a local file or a URL if artifact.startswith("file://"): @@ -198,6 +193,28 @@ class PluginBrowser: if res.status != 200: logger.error(f"Server did not accept install count increment request. code: {res.status}") + if res_zip and version == "dev": + with ZipFile(res_zip) as plugin_zip: + plugin_json_list = [file for file in plugin_zip.namelist() if file.endswith("/plugin.json") and file.count("/") == 1] + + if len(plugin_json_list) == 0: + logger.fatal("No plugin.json found in plugin ZIP") + return + + elif len(plugin_json_list) > 1: + logger.fatal("Multiple plugin.json found in plugin ZIP") + return + + else: + name = sub(r"/.+$", "", plugin_json_list[0]) + + try: + pluginFolderPath = self.find_plugin_folder(name) + if pluginFolderPath: + isInstalled = True + except: + logger.error(f"Failed to determine if {name} is already installed, continuing anyway.") + # Check to make sure we got the file if res_zip is None: logger.fatal(f"Could not fetch {artifact}") |
