summaryrefslogtreecommitdiff
path: root/backend/browser.py
diff options
context:
space:
mode:
authorJonas Dellinger <jonas@dellinger.dev>2023-05-29 18:29:36 +0200
committerGitHub <noreply@github.com>2023-05-29 09:29:36 -0700
commit010feddf36646fb9695106bd64eab41e47e962fe (patch)
tree4619a5c0fc1b2c9ca475ce644cce18464c77ca3e /backend/browser.py
parent5114bb57112bf8bbad30768ffd26803d464b19a2 (diff)
downloaddecky-loader-010feddf36646fb9695106bd64eab41e47e962fe.tar.gz
decky-loader-010feddf36646fb9695106bd64eab41e47e962fe.zip
Add update all button to plugin list (#466)
Diffstat (limited to 'backend/browser.py')
-rw-r--r--backend/browser.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/backend/browser.py b/backend/browser.py
index db3d2f50..388a01e3 100644
--- a/backend/browser.py
+++ b/backend/browser.py
@@ -49,7 +49,7 @@ class PluginBrowser:
logger.error(f"chown/chmod exited with a non-zero exit code")
return False
return True
-
+
async def _download_remote_binaries_for_plugin_with_name(self, pluginBasePath):
rv = False
try:
@@ -63,10 +63,8 @@ class PluginBrowser:
# create bin directory if needed.
chmod(pluginBasePath, 777)
if access(pluginBasePath, W_OK):
-
if not path.exists(pluginBinPath):
mkdir(pluginBinPath)
-
if not access(pluginBinPath, W_OK):
chmod(pluginBinPath, 777)
@@ -85,7 +83,7 @@ class PluginBrowser:
else:
rv = True
logger.debug(f"No Remote Binaries to Download")
-
+
except Exception as e:
rv = False
logger.debug(str(e))
@@ -174,7 +172,7 @@ class PluginBrowser:
if res_zip is None:
logger.fatal(f"Could not fetch {artifact}")
return
-
+
# If plugin is installed, uninstall it
if isInstalled:
try:
@@ -196,7 +194,7 @@ class PluginBrowser:
self.loader.plugins[name].stop()
self.loader.plugins.pop(name, None)
await sleep(1)
-
+
current_plugin_order = self.settings.getSetting("pluginOrder")
current_plugin_order.append(name)
self.settings.setSetting("pluginOrder", current_plugin_order)
@@ -216,9 +214,23 @@ class PluginBrowser:
await tab.open_websocket()
await tab.evaluate_js(f"DeckyPluginLoader.addPluginInstallPrompt('{name}', '{version}', '{request_id}', '{hash}', {install_type})")
+ async def request_multiple_plugin_installs(self, requests):
+ request_id = str(time())
+ self.install_requests[request_id] = [PluginInstallContext(req['artifact'], req['name'], req['version'], req['hash']) for req in requests]
+ js_requests_parameter = ','.join([
+ f"{{ name: '{req['name']}', version: '{req['version']}', hash: '{req['hash']}', install_type: {req['install_type']}}}" for req in requests
+ ])
+
+ tab = await get_gamepadui_tab()
+ await tab.open_websocket()
+ await tab.evaluate_js(f"DeckyPluginLoader.addMultiplePluginsInstallPrompt('{request_id}', [{js_requests_parameter}])")
+
async def confirm_plugin_install(self, request_id):
- request = self.install_requests.pop(request_id)
- await self._install(request.artifact, request.name, request.version, request.hash)
+ requestOrRequests = self.install_requests.pop(request_id)
+ if isinstance(requestOrRequests, list):
+ [await self._install(req.artifact, req.name, req.version, req.hash) for req in requestOrRequests]
+ else:
+ await self._install(requestOrRequests.artifact, requestOrRequests.name, requestOrRequests.version, requestOrRequests.hash)
def cancel_plugin_install(self, request_id):
self.install_requests.pop(request_id)