-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path__init__.py
99 lines (89 loc) · 4.42 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# NEON AI (TM) SOFTWARE, Software Development Kit & Application Framework
# All trademark and other rights reserved by their respective owners
# Copyright 2008-2022 Neongecko.com Inc.
# Contributors: Daniel McKnight, Guy Daniels, Elon Gasper, Richard Leeds,
# Regina Bloomstine, Casimiro Ferreira, Andrii Pernatii, Kirill Hrymailo
# BSD-3 License
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from this
# software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from ovos_bus_client import Message
from ovos_utils import classproperty
from ovos_utils.log import LOG
from ovos_utils.process_utils import RuntimeRequirements
from ovos_workshop.decorators import intent_handler
from ovos_workshop.skills import OVOSSkill
class CoreReadySkill(OVOSSkill):
def __init__(self, **kwargs):
OVOSSkill.__init__(self, **kwargs)
self.add_event("mycroft.ready", self.handle_ready)
@classproperty
def runtime_requirements(self):
return RuntimeRequirements(network_before_load=False,
internet_before_load=False,
gui_before_load=False,
requires_internet=False,
requires_network=False,
requires_gui=False,
no_internet_fallback=True,
no_network_fallback=True,
no_gui_fallback=True)
@property
def speak_ready(self):
"""
Speak `ready` dialog when ready unless disabled in settings
"""
return self.settings.get("speak_ready") is not False
@property
def patch_homescreen_support(self):
"""
Emit homescreen update event for wallpaper plugin backwards-compat.
"""
return self.settings.get("patch_homescreen_support")
def handle_ready(self, message: Message):
"""
Handle `mycroft.ready` event. Notify the user everything is ready if
configured.
"""
if self.speak_ready:
self.speak_dialog("ready")
else:
LOG.info("Ready notification disabled in settings")
if self.patch_homescreen_support:
# TODO: This is patching compat with the wallpaper plugin and the
# homescreen skill. Functionality was added in
# `skill-ovos-homescreen` 2.0, but it requires an incompatible
# version of `ovos-workshop`
self.bus.emit(message.forward("homescreen.metadata.get"))
@intent_handler("enable_ready_notification.intent")
def handle_enable_notification(self, _: Message):
"""
Handle a request to enable ready announcements
"""
self.settings["speak_ready"] = True
self.speak_dialog("confirm_speak_ready")
@intent_handler("disable_ready_notification.intent")
def handle_disable_notification(self, _: Message):
"""
Handle a request to disable ready announcements
"""
self.settings["speak_ready"] = False
self.speak_dialog("confirm_no_speak_ready")