100 lines
3.4 KiB
Plaintext
100 lines
3.4 KiB
Plaintext
|
#!/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()
|