From 27cc57866338196b164042348a7b3ac4ba65216a Mon Sep 17 00:00:00 2001 From: SurajSSingh <surajss@uci.edu> Date: Thu, 12 May 2022 09:34:00 -0700 Subject: [PATCH] Organized Alarm scripts --- alarm.py | 56 ++++++++++++++++++++++++++++++ simple_alarm_clock.py | 80 ++++--------------------------------------- smart_alarm_clock.py | 5 +++ 3 files changed, 68 insertions(+), 73 deletions(-) diff --git a/alarm.py b/alarm.py index 49034fe..a76e158 100644 --- a/alarm.py +++ b/alarm.py @@ -30,3 +30,59 @@ # # # +from enum import Enum, auto +from datetime import time, datetime + + +class AlarmState(Enum): + SET = auto(), + RUNNING = auto(), + PLAYING = auto(), + SNOOZED = auto(), + DEACTIVATED = auto(), + + +class BaseAlarmClock: + _current_state: AlarmState + _wake_time: time + + def __init__(self, wake_time: time = datetime.now().time()): + self._wake_time = wake_time + self._current_state = AlarmState.DEACTIVATED + + @property + def current_state(self): + return self._current_state + + @property + def wake_time(self): + return self._wake_time + + def set_alarm(self, wake_time: time) -> time: + print(f"SETTING ALARM to: {wake_time}") + self._current_state = AlarmState.SET + self._wake_time = wake_time + return self._wake_time + + def start_alarm(self) -> None: + print("STARTING ALARM") + self._current_state = AlarmState.RUNNING + + def sound_alarm(self) -> None: + print("SOUNDING ALARM") + self._current_state = AlarmState.PLAYING + + def snooze_alarm(self) -> None: + print("SNOOZING ALARM") + self._current_state = AlarmState.SNOOZED + + def stop_alarm(self, deactivate: bool = True) -> None: + print("STOPPING ALARM") + if self._current_state is AlarmState.PLAYING: + print("STOPPED PLAYING ALARM") + self._current_state = AlarmState.DEACTIVATED if deactivate else AlarmState.SET + + def alarm_check_reached(self, current_time: time = datetime.now().time()) -> bool: + # result = current_time >= self.wake_time if self.current_state is AlarmState.RUNNING else False + # print(f"{result = }") + return current_time >= self._wake_time if self._current_state is AlarmState.RUNNING else False diff --git a/simple_alarm_clock.py b/simple_alarm_clock.py index e9c981e..002a9dc 100644 --- a/simple_alarm_clock.py +++ b/simple_alarm_clock.py @@ -1,10 +1,7 @@ -from dataclasses import dataclass -from enum import Enum, auto +from alarm import BaseAlarmClock, AlarmState from datetime import time, datetime -from typing import Optional, Any from time import sleep from pynput import keyboard -from pynput.keyboard import Key, Controller # Simple Alarm Clock has 5 functionalities: # 1. Set Alarm Time - Set the time for the alarm to sound, does NOT make the alarm active @@ -14,78 +11,12 @@ from pynput.keyboard import Key, Controller # 5. Stop Alarm - If the alarm is active or is playing, stop the alarm (deactivate state) ALARM_TIME = time(19, 13, 0) -SNOOZE_SEC = 5 SNOOZE_KEY = keyboard.Key.up ALARM_OFF_KEY = keyboard.Key.esc +SNOOZE_SEC = 5 -class AlarmState(Enum): - SET = auto(), - RUNNING = auto(), - PLAYING = auto(), - SNOOZED = auto(), - DEACTIVATED = auto(), - - -@dataclass -class BaseAlarmClock: - # player: Optional - wake_time: time - current_state: AlarmState = AlarmState.DEACTIVATED - - def set_alarm(self, wake_time: time) -> time: - print(f"SETTING ALARM to: {wake_time}") - self.current_state = AlarmState.SET - self.wake_time = wake_time - return self.wake_time - - def start_alarm(self, check_frequency: int = 1): - print("STARTING ALARM") - self.current_state = AlarmState.RUNNING - # now = datetime.now().time() - # if now >= self.wake_time: - # return False - # sleep_time_amount = max(check_frequency, 1) - # while now < self.wake_time: - # # Sleep for some time - # sleep(sleep_time_amount) - # now = datetime.now().time() - # self.sound_alarm() - # return True - - def sound_alarm(self): - print("SOUNDING ALARM") - self.current_state = AlarmState.PLAYING - # if sound is not None: - # self.player.set_media(sound) - # self.player.audio_set_volume(volume) - # self.player.play() - - def snooze_alarm(self, snooze_time: int = SNOOZE_SEC): - print("SNOOZING ALARM") - self.current_state = AlarmState.SNOOZED - # self.player.pause() - # Maybe make this async later - sleep(snooze_time) - # self.player.play() - if self.current_state is AlarmState.SNOOZED: - self.sound_alarm() - - def stop_alarm(self, deactivate: bool = True): - print("STOPPING ALARM") - if self.current_state is AlarmState.PLAYING: - print("STOPPED PLAYING ALARM") - # self.player.stop() - self.current_state = AlarmState.DEACTIVATED if deactivate else AlarmState.SET - - def alarm_check_reached(self, current_time = datetime.now().time()) -> bool: - result = current_time >= self.wake_time if self.current_state is AlarmState.RUNNING else False - print(f"{result = }") - return result - - -def simple_alarm_mode(alarm_time): - alarm_clock = BaseAlarmClock(alarm_time) +def simple_alarm_mode(alarm_clock: BaseAlarmClock): alarm_clock.start_alarm() while not alarm_clock.alarm_check_reached(): print(f"ALARM SLEEPING @: {datetime.now().time()}") @@ -99,8 +30,11 @@ def simple_alarm_mode(alarm_time): break elif event.key == SNOOZE_KEY: alarm_clock.snooze_alarm() + sleep(SNOOZE_SEC) + alarm_clock.sound_alarm() break if __name__ == '__main__': - simple_alarm_mode(ALARM_TIME) + alarm_clock = BaseAlarmClock(ALARM_TIME) + simple_alarm_mode(alarm_clock) diff --git a/smart_alarm_clock.py b/smart_alarm_clock.py index e69de29..5e6d491 100644 --- a/smart_alarm_clock.py +++ b/smart_alarm_clock.py @@ -0,0 +1,5 @@ +from alarm import BaseAlarmClock, AlarmState +from datetime import time, datetime +from time import sleep +from pynput import keyboard +import vlc \ No newline at end of file -- GitLab