summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorAAGaming <aa@mail.catvibers.me>2022-08-21 16:41:25 -0400
committerAAGaming <aa@mail.catvibers.me>2022-08-21 16:41:25 -0400
commit8b3f569a09db9daf7748426f916a66591159928f (patch)
tree237cc3711c7098b30a7e7cda97db9e406b0f7db0 /backend
parent1930400032a850b833f5f71523008e326f40547a (diff)
downloaddecky-loader-8b3f569a09db9daf7748426f916a66591159928f.tar.gz
decky-loader-8b3f569a09db9daf7748426f916a66591159928f.zip
Add plugin updater, notification badge, fixesv2.0.5-pre15
Diffstat (limited to 'backend')
-rw-r--r--backend/loader.py8
-rw-r--r--backend/main.py2
-rw-r--r--backend/plugin.py6
3 files changed, 11 insertions, 5 deletions
diff --git a/backend/loader.py b/backend/loader.py
index 3f5d1ab8..4fe104d1 100644
--- a/backend/loader.py
+++ b/backend/loader.py
@@ -88,7 +88,7 @@ class Loader:
async def get_plugins(self, request):
plugins = list(self.plugins.values())
- return web.json_response([str(i) if not i.legacy else "$LEGACY_"+str(i) for i in plugins])
+ return web.json_response([{"name": str(i) if not i.legacy else "$LEGACY_"+str(i), "version": i.version} for i in plugins])
def handle_frontend_assets(self, request):
plugin = self.plugins[request.match_info["plugin_name"]]
@@ -116,13 +116,13 @@ class Loader:
self.logger.info(f"Plugin {plugin.name} is passive")
self.plugins[plugin.name] = plugin.start()
self.logger.info(f"Loaded {plugin.name}")
- self.loop.create_task(self.dispatch_plugin(plugin.name if not plugin.legacy else "$LEGACY_" + plugin.name))
+ self.loop.create_task(self.dispatch_plugin(plugin.name if not plugin.legacy else "$LEGACY_" + plugin.name, plugin.version))
except Exception as e:
self.logger.error(f"Could not load {file}. {e}")
print_exc()
- async def dispatch_plugin(self, name):
- await inject_to_tab("SP", f"window.importDeckyPlugin('{name}')")
+ async def dispatch_plugin(self, name, version):
+ await inject_to_tab("SP", f"window.importDeckyPlugin('{name}', '{version}')")
def import_plugins(self):
self.logger.info(f"import plugins from {self.plugin_path}")
diff --git a/backend/main.py b/backend/main.py
index 07e82d92..a5730fbd 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -113,7 +113,7 @@ class PluginManager:
async def inject_javascript(self, request=None):
try:
- await inject_to_tab("SP", "try{" + open(path.join(path.dirname(__file__), "./static/plugin-loader.iife.js"), "r").read() + "}catch(e){console.error(e)}", True)
+ await inject_to_tab("SP", "try{window.deckyHasLoaded = true;(async()=>{while(!window.SP_REACT){await new Promise(r => setTimeout(r, 10))};" + open(path.join(path.dirname(__file__), "./static/plugin-loader.iife.js"), "r").read() + "})();}catch(e){console.error(e)}", True)
except:
logger.info("Failed to inject JavaScript into tab")
pass
diff --git a/backend/plugin.py b/backend/plugin.py
index 0a8a2901..f55e398c 100644
--- a/backend/plugin.py
+++ b/backend/plugin.py
@@ -21,7 +21,13 @@ class PluginWrapper:
self.socket_addr = f"/tmp/plugin_socket_{time()}"
self.method_call_lock = Lock()
+ self.version = None
+
json = load(open(path.join(plugin_path, plugin_directory, "plugin.json"), "r"))
+ if path.isfile(path.join(plugin_path, plugin_directory, "package.json")):
+ package_json = load(open(path.join(plugin_path, plugin_directory, "package.json"), "r"))
+ self.version = package_json["version"]
+
self.legacy = False
self.main_view_html = json["main_view_html"] if "main_view_html" in json else ""