added beeping and timeout notification

This commit is contained in:
Christoph J. Scherr 2023-04-18 20:30:49 +02:00
parent 36e6302cfa
commit 30655c26fc
Signed by: PlexSheep
GPG Key ID: 25B4ACF7D88186CC
1 changed files with 40 additions and 5 deletions

View File

@ -1,4 +1,7 @@
#!/bin/env python3 #!/bin/env python3
import beepy # pip install beepy
from multiprocessing import Process
import argparse
import time import time
import datetime import datetime
import sys import sys
@ -6,23 +9,55 @@ import time
class stopwatch: class stopwatch:
def __init__(self) -> None:
beep_at: int
beep_at_time: datetime.datetime
has_beeped: bool = False
start_time: datetime.datetime
enable_sound: bool = False
def __init__(self, beep_at, enable_sound) -> None:
self.start_time = datetime.datetime.now().replace(microsecond=0) self.start_time = datetime.datetime.now().replace(microsecond=0)
if enable_sound:
print("Warning:\tonce the beep time is reached, a sound will play.")
self.enable_sound = enable_sound
if not beep_at <= 0:
self.beep_at = beep_at
self.beep_at_time = self.start_time + datetime.timedelta(minutes=beep_at)
print("Start time:\t%s\nWill beep at:\t%s\nBeeping Time:\t%sm" % (self.start_time, self.beep_at_time, beep_at))
else:
self.beep_at = 0
print("Start time:\t%s" % self.start_time)
print('='*120)
def display(self) -> None: def display(self) -> None:
print("started at:\t%s" % self.start_time) text2 = ""
while True: while True:
now = datetime.datetime.now().replace(microsecond=0) now = datetime.datetime.now().replace(microsecond=0)
elapsed = (now - self.start_time) elapsed = (now - self.start_time)
text0 = ("\rcurrent:\t%s" % now) text0 = ("\rcurrent:\t%s" % now)
text1 = ("elapsed:\t%s" % elapsed) text1 = ("elapsed:\t%s" % elapsed)
sys.stdout.write('\r' + str(text0+"\t\t"+text1) + "\t" * 3) if elapsed.seconds / 60 >= self.beep_at and not self.has_beeped and not self.beep_at == 0:
text0 += '\a'
text2 = "🔔Beep!🔔"
self.has_beeped = True
if self.enable_sound:
p = Process(target=beepy.beep, kwargs={"sound": "success"})
p.start()
sys.stdout.write('\r' + str(text0+"\t\t"+text1+"\t\t"+text2) + "\t" * 3)
sys.stdout.flush() sys.stdout.flush()
time.sleep(1) time.sleep(0.1)
def main(): def main():
parser = argparse.ArgumentParser(prog="stopwatch", description='Simple CLI stopwatch.')
parser.add_argument('-b', '--beep', metavar='N', type=float, nargs='+',
help='beep after x minutes', default=[0])
parser.add_argument('-s', '--sound',
action='store_true')
args = parser.parse_args()
try: try:
timer = stopwatch() timer = stopwatch(args.beep[0], enable_sound=args.sound)
timer.display() timer.display()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass