From e76a4afd8550145d4c43b3f1513b2fd209af8dd1 Mon Sep 17 00:00:00 2001 From: Daniel Thompson Date: Thu, 3 Jun 2021 19:57:09 +0100 Subject: manager: Improve application registration When an application is registered using a string that gives the class name (e.g. "apps.chrono.ChronoApp") when we automatically delete the module from a couple of namespaces. This ensures the garbage collector can do a deeper clean when the application is unregistered. We also provide a means to directly register watch faces (e.g. to replace the default clock). Fixes: #214 Signed-off-by: Daniel Thompson diff --git a/wasp/wasp.py b/wasp/wasp.py index ad09dce..abcb974 100644 --- a/wasp/wasp.py +++ b/wasp/wasp.py @@ -18,6 +18,7 @@ import gc import machine import micropython import steplogger +import sys import watch import widgets @@ -166,16 +167,21 @@ class Manager(): # an exception starting one of the apps... pass - def register(self, app, quick_ring=False): + def register(self, app, quick_ring=False, watch_face=False): """Register an application with the system. :param object app: The application to regsister """ if isinstance(app, str): - exec('import ' + app[:app.rindex('.')]) + modname = app[:app.rindex('.')] + exec('import ' + modname) app = eval(app + '()') + exec('del ' + modname) + exec('del sys.modules["' + modname + '"]') - if quick_ring == True: + if watch_face: + self.quick_ring[0] = app + elif quick_ring: self.quick_ring.append(app) else: self.launcher_ring.append(app) -- cgit v0.10.2