Skip to content

Commit

Permalink
Add Plugin.uninstall callback support (SteamDeckHomebrew#555)
Browse files Browse the repository at this point in the history
* Add Plugin.uninstall callback support

SteamDeckHomebrew#536

* Remove empty deck.sh
  • Loading branch information
wheaney authored and bricefriha committed Jun 1, 2024
1 parent d0e2b2f commit 8de5218
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions backend/src/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def _init(self):

# append the plugin's `py_modules` to the recognized python paths
syspath.append(path.join(environ["DECKY_PLUGIN_DIR"], "py_modules"))

#TODO: FIX IN A LESS CURSED WAY
keys = [key.replace("src.", "") for key in sysmodules if key.startswith("src.")]
for key in keys:
Expand Down Expand Up @@ -113,12 +113,29 @@ async def _unload(self):
self.log.error("Failed to unload " + self.name + "!\n" + format_exc())
exit(0)

async def _uninstall(self):
try:
self.log.info("Attempting to uninstall with plugin " + self.name + "'s \"_uninstall\" function.\n")
if hasattr(self.Plugin, "_uninstall"):
await self.Plugin._uninstall(self.Plugin)
self.log.info("Uninstalled " + self.name + "\n")
else:
self.log.info("Could not find \"_uninstall\" in " + self.name + "'s main.py" + "\n")
except:
self.log.error("Failed to uninstall " + self.name + "!\n" + format_exc())
exit(0)

async def _on_new_message(self, message : str) -> str|None:
data = loads(message)

if "stop" in data:
self.log.info("Calling Loader unload function.")
await self._unload()

if data.get('uninstall'):
self.log.info("Calling Loader uninstall function.")
await self._uninstall()

get_event_loop().stop()
while get_event_loop().is_running():
await sleep(0)
Expand All @@ -141,12 +158,12 @@ def start(self):
multiprocessing.Process(target=self._init).start()
return self

def stop(self):
def stop(self, uninstall: bool = False):
if self.passive:
return

async def _(self: PluginWrapper):
await self.socket.write_single_line(dumps({ "stop": True }, ensure_ascii=False))
await self.socket.write_single_line(dumps({ "stop": True, "uninstall": uninstall }, ensure_ascii=False))
await self.socket.close_socket_connection()

get_event_loop().create_task(_(self))
Expand All @@ -155,7 +172,7 @@ async def execute_method(self, method_name: str, kwargs: Dict[Any, Any]):
if self.passive:
raise RuntimeError("This plugin is passive (aka does not implement main.py)")
async with self.method_call_lock:
# reader, writer =
# reader, writer =
await self.socket.get_socket_connection()

await self.socket.write_single_line(dumps({ "method": method_name, "args": kwargs }, ensure_ascii=False))
Expand Down

0 comments on commit 8de5218

Please sign in to comment.