forked from platypush/platypush
91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
from typing import Optional, Dict, Any, List, Union
|
|
|
|
from platypush.backend.alarm import AlarmBackend
|
|
from platypush.context import get_backend
|
|
from platypush.plugins import Plugin, action
|
|
|
|
|
|
class AlarmPlugin(Plugin):
|
|
"""
|
|
Alarm/timer plugin.
|
|
|
|
Requires:
|
|
|
|
- The :class:`platypush.backend.alarm.AlarmBackend` backend configured and enabled.
|
|
|
|
"""
|
|
|
|
@staticmethod
|
|
def _get_backend() -> AlarmBackend:
|
|
return get_backend('alarm')
|
|
|
|
@action
|
|
def add(self, when: str, actions: Optional[list] = None, name: Optional[str] = None,
|
|
audio_file: Optional[str] = None, audio_volume: Optional[Union[int, float]] = None,
|
|
enabled: bool = True) -> str:
|
|
"""
|
|
Add a new alarm. NOTE: alarms that aren't configured in the :class:`platypush.backend.alarm.AlarmBackend`
|
|
will only run in the current session. If you want an alarm to be permanently stored, you should configure
|
|
it in the alarm backend configuration. You may want to add an alarm dynamically if it's a one-time alarm instead
|
|
|
|
:param when: When the alarm should be executed. It can be either a cron expression (for recurrent alarms), or
|
|
a datetime string in ISO format (for one-shot alarms/timers), or an integer representing the number of
|
|
seconds before the alarm goes on (e.g. 300 for 5 minutes).
|
|
:param actions: List of actions to be executed.
|
|
:param name: Alarm name.
|
|
:param audio_file: Path of the audio file to be played.
|
|
:param audio_volume: Volume of the audio.
|
|
:param enabled: Whether the new alarm should be enabled (default: True).
|
|
:return: The alarm name.
|
|
"""
|
|
alarm = self._get_backend().add_alarm(when=when, audio_file=audio_file, actions=actions or [],
|
|
name=name, enabled=enabled, audio_volume=audio_volume)
|
|
return alarm.name
|
|
|
|
@action
|
|
def enable(self, name: str):
|
|
"""
|
|
Enable an alarm.
|
|
|
|
:param name: Alarm name.
|
|
"""
|
|
self._get_backend().enable_alarm(name)
|
|
|
|
@action
|
|
def disable(self, name: str):
|
|
"""
|
|
Disable an alarm. This will prevent the alarm from executing until re-enabled or until the application
|
|
is restarted.
|
|
|
|
:param name: Alarm name.
|
|
"""
|
|
self._get_backend().disable_alarm(name)
|
|
|
|
@action
|
|
def dismiss(self):
|
|
"""
|
|
Dismiss the alarm that is currently running.
|
|
"""
|
|
self._get_backend().dismiss_alarm()
|
|
|
|
@action
|
|
def snooze(self, interval: Optional[float] = 300.0):
|
|
"""
|
|
Snooze the alarm that is currently running for the specified number of seconds.
|
|
The alarm will stop and resume again later.
|
|
|
|
:param interval: Snooze seconds before playing the alarm again (default: 300).
|
|
"""
|
|
self._get_backend().snooze_alarm(interval=interval)
|
|
|
|
@action
|
|
def get_alarms(self) -> List[Dict[str, Any]]:
|
|
"""
|
|
Get the list of configured alarms.
|
|
|
|
:return: List of the alarms, sorted by next scheduled run.
|
|
"""
|
|
return [alarm.to_dict() for alarm in self._get_backend().get_alarms()]
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|