105 lines
3.3 KiB
Python
Executable File
105 lines
3.3 KiB
Python
Executable File
import cmd
|
|
import os
|
|
import sys
|
|
import time
|
|
import subprocess
|
|
from datetime import datetime, timedelta
|
|
|
|
alarms_queue = list()
|
|
class Fete(cmd.Cmd):
|
|
intro = "Willkommen zum Logging und Alarm Skript Ihres Vertrauens. \nBei Fragen help oder ? benutzen."
|
|
use_rawinput = False
|
|
|
|
def do_log(self, toLog):
|
|
"Log message with current timestamp"
|
|
log = open("log.txt", "a")
|
|
datetime_obj = datetime.now()
|
|
log_message = datetime_obj.strftime("%x") +", " + datetime_obj.strftime("%X") +" Uhr: "+ toLog
|
|
print( log_message )
|
|
# log als was besseres als txt, aber meh
|
|
log.write(log_message + "\n")
|
|
|
|
def do_alarm(self, args):
|
|
"set an alarm in x minutes for y, example: alarm 30 Cocktail wants stuff"
|
|
alarms = open("alarms.txt", "a")
|
|
args_arr = args.split()
|
|
print("\a")
|
|
if len(args_arr) < 2:
|
|
print("Heeer! Dir fehlt ein Argument. ")
|
|
return
|
|
try:
|
|
delta = int(args_arr[0])
|
|
except ValueError:
|
|
print("Das erste Argument muss ne Ganzzahl sein!")
|
|
return
|
|
args_arr.pop(0)
|
|
text = ' '.join(args_arr)
|
|
alarm_time = datetime.now() + timedelta(minutes = delta)
|
|
print("Alarm set for " + alarm_time.strftime("%X") + " " + text)
|
|
alarms.write(alarm_time.strftime("%x") + " " +alarm_time.strftime("%X") + " ~ " + text + "\n")
|
|
global alarms_queue
|
|
alarms_queue.append((alarm_time,text))
|
|
|
|
def do_readAlarms(self, minutes):
|
|
"read alarms from file into alarm queue that haven't happened or should have happened in the last x minutes (default=5)"
|
|
try:
|
|
if minutes:
|
|
delta = int(minutes)
|
|
else:
|
|
delta = 5
|
|
except ValueError:
|
|
print("Zeit bitte in ganzen Minuten!")
|
|
return
|
|
earliest_alarm_time = datetime.now() - timedelta(minutes = delta)
|
|
alarms = open("alarms.txt", "r").readlines()
|
|
for line in alarms:
|
|
line_sep = line.split(" ~ ")
|
|
alarm_time = datetime.strptime(line_sep[0], "%m/%d/%y %H:%M:%S")
|
|
if alarm_time > earliest_alarm_time:
|
|
global alarms_queue
|
|
alarms_queue.append((alarm_time,line_sep[1]))
|
|
|
|
|
|
class NonblockingStdin:
|
|
def __init__(self, stdin, idle_callback):
|
|
self._stdin = stdin
|
|
self._idle_callback = idle_callback
|
|
os.set_blocking(self._stdin.fileno(), False)
|
|
|
|
def readline(self):
|
|
buffer = ""
|
|
char = self._stdin.read(1)
|
|
while char != "\n":
|
|
buffer += char
|
|
char = self._stdin.read(1)
|
|
if char == "":
|
|
time.sleep(0.1)
|
|
self._idle_callback()
|
|
|
|
return buffer
|
|
|
|
|
|
def alarm():
|
|
alarms_copy = alarms_queue
|
|
for alarm_read in alarms_copy:
|
|
if datetime.now() >= alarm_read[0]:
|
|
subprocess.call(['mpv', './alarm.mp3'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
print("\n\n")
|
|
print(alarm_read[1])
|
|
print("")
|
|
alarms_queue.remove(alarm_read)
|
|
|
|
|
|
|
|
def main():
|
|
|
|
wrapped = NonblockingStdin(sys.stdin, alarm)
|
|
|
|
fete = Fete(stdin=wrapped)
|
|
|
|
fete.cmdloop()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|