1
+ from typing import Optional , Dict , Any
2
+
1
3
from ovos_bus_client import Message
2
4
from ovos_bus_client import MessageBusClient
3
5
from ovos_bus_client .apis .gui import GUIInterface
4
- from ovos_utils .log import LOG
5
6
from ovos_config import Configuration
7
+ from ovos_utils .log import LOG
8
+
9
+ try :
10
+ from ovos_gui .homescreen import HomescreenManager
11
+ except ImportError as _exc :
12
+
13
+ class HomescreenManager :
14
+ """Fallback class when ovos-gui is not installed.
15
+
16
+ Raises the original ImportError when instantiated to
17
+ provide clear error messaging while still allowing type hints to work.
18
+ """
19
+
20
+ def __init__ (self , * args , ** kwargs ):
21
+ LOG .error ("you seem to be running GUIExtensions without ovos-gui installed..." )
22
+ # raise the original ImportError
23
+ raise _exc
6
24
7
25
8
26
class GUIExtension :
@@ -20,39 +38,40 @@ class GUIExtension:
20
38
permanent (bool): disable unloading of GUI skills on gui client disconnections
21
39
"""
22
40
23
- def __init__ (self , config , bus = None , gui = None ,
24
- preload_gui = False , permanent = False ):
41
+ def __init__ (self , config : Dict [str , Any ],
42
+ bus : Optional [MessageBusClient ] = None ,
43
+ gui : Optional [GUIInterface ] = None ,
44
+ preload_gui : bool = False ,
45
+ permanent : bool = False ):
25
46
26
47
if not bus :
27
48
bus = MessageBusClient ()
28
49
bus .run_in_thread ()
29
50
bus .connected_event .wait ()
30
- self .bus = bus
31
- self .gui = gui or GUIInterface ("ovos.shell" , bus = self .bus ,
32
- config = Configuration ().get ("gui" , {}))
51
+ self .bus : MessageBusClient = bus
52
+ self .gui : GUIInterface = gui or GUIInterface ("ovos.shell" , bus = self .bus ,
53
+ config = Configuration ().get ("gui" , {}))
33
54
self .preload_gui = preload_gui
34
55
self .permanent = permanent
35
56
self .config = config
57
+ self .homescreen_manager : Optional [HomescreenManager ] = None
36
58
self .register_bus_events ()
37
59
38
60
def register_bus_events (self ):
39
61
self .bus .on ("mycroft.gui.screen.close" , self .handle_remove_namespace )
40
62
41
- def bind_homescreen (self , homescreen = None ):
63
+ def bind_homescreen (self , homescreen : Optional [ HomescreenManager ] = None ):
42
64
if self .config .get ("homescreen_supported" , False ):
43
65
if not homescreen :
44
- # raise exception as usual if this fails
45
- from ovos_gui .homescreen import HomescreenManager
46
- homescreen = HomescreenManager (self .bus , self .gui )
66
+ LOG .debug ("Loading HomescreenManager" )
67
+ homescreen = HomescreenManager (self .bus )
47
68
homescreen .daemon = True
48
69
homescreen .start ()
49
-
50
70
self .homescreen_manager = homescreen
51
71
else :
52
72
LOG .info ("Homescreen support not configured" )
53
73
54
- def handle_remove_namespace (self , message ):
55
- LOG .info ("Got Clear Namespace Event In Skill" )
74
+ def handle_remove_namespace (self , message : Message ):
56
75
get_skill_namespace = message .data .get ("skill_id" , "" )
57
76
if get_skill_namespace :
58
77
self .bus .emit (Message ("gui.clear.namespace" ,
0 commit comments