.s/scripts/jalarm/take

100 lines
3.4 KiB
Python
Executable File

#!/usr/bin/python3
import re
import time as t
import curses
import sys
import os
import jar
def formatTime(time):
return ((str(time[0]).zfill(2) + ":") if time[0] else "") + ((str(time[1]).zfill(2) + ":") if time[1] or time[0] else "") + (str(time[2]).zfill(2))
def timeToSeconds(time):
return time[2] + 60*time[1] + 3600*time[0]
def secondsToTime(seconds):
return [seconds // 3600, (seconds - (seconds // 3600) * 3600) // 60, seconds % 60]
def decrementTime(time):
return secondsToTime(timeToSeconds(time) - 1)
class MyTimerWindow:
def __init__(self, message="Timer"):
self.message = message
self.screen = curses.initscr()
curses.noecho()
curses.cbreak()
self.dimensions = self.screen.getmaxyx()
self.screen.keypad(True)
self.jar = jar.AwesomeJar(jar.jar)
def update(self, time, beginningTime):
self.jar.setProgress((timeToSeconds(beginningTime) - timeToSeconds(time))/timeToSeconds(beginningTime))
def step(self, time):
self.screen.clear()
self.screen.addstr(1, self.dimensions[1]//2 - len(self.message)//2, self.message)
self.screen.addstr(3, self.dimensions[1]//2 - len(formatTime(time))//2, formatTime(time))
list(map(lambda x: self.screen.addstr(8+x, self.dimensions[1]//2 - self.jar.jarObject["width"]//2, self.jar.drawJar()[x]), range(0, len(self.jar.drawJar()))))
self.screen.addstr(25,0,"")
self.screen.refresh()
def stop(self):
curses.nocbreak()
self.screen.keypad(False)
curses.echo()
curses.endwin()
os.system("aplay alarm.wav")
def main():
p = re.compile('(^[0-9]*)(?::|^)([0-9]*(?=:)):([0-9]*$)')
beginning_time = list(map(lambda x: int(x) if x else 0, p.match(sys.argv[1]).groups()))
time = beginning_time.copy()
iteration_time = t.time()
if not "file" in sys.argv:
timer = MyTimerWindow() if len(sys.argv) < 3 else MyTimerWindow(sys.argv[2])
timer.update(time, beginning_time)
while any(time):
try:
timer.step(time)
t.sleep(1)
if (t.time() - iteration_time >= 1):
iteration_time = t.time()
time = decrementTime(time)
timer.update(time, beginning_time)
timer.step(time)
except KeyboardInterrupt:
break
timer.stop()
print("\nDONE")
else:
iteration_time = t.time()
try:
pid = open("/home/logan/scripts/state-files/take/pid.txt", "r")
os.system(f"kill -9 {pid.read()} 2> /dev/null")
pid.close()
except:
os.system("mkdir -p /home/logan/scripts/state-files/take")
pass
pid = open("/home/logan/scripts/state-files/take/pid.txt", "w")
pid.write(str(os.getpid()))
pid.close()
while any(time):
t.sleep(.1)
try:
if (t.time() - iteration_time >= 1):
iteration_time = t.time()
file = open("/home/logan/scripts/state-files/take/current-time.txt", "w")
file.write(formatTime(time))
file.close()
time = decrementTime(time)
except KeyboardInterrupt:
break
file = open("/home/logan/scripts/state-files/take/current-time.txt", "w")
file.write("Not Timing")
if __name__ == "__main__":
main()