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 <daniel@redfelineninja.org.uk>
This commit is contained in:
parent
0d385b8dc5
commit
e76a4afd85
1 changed files with 9 additions and 3 deletions
12
wasp/wasp.py
12
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)
|
||||
|
|
Loading…
Reference in a new issue