diff --git a/app.py b/app.py index bed4d35..fdf51a6 100644 --- a/app.py +++ b/app.py @@ -9,21 +9,24 @@ app = Flask(__name__) activeAlarms = dict() previousAlarms = dict() logs = list() +todos_dict = dict() preprocessed = False alarmIndex = 0 def preprocess(): - print('start init alarms and logs') #versuch beide files zu laden, wenn das fehlschlägt, initiiere beide files als json try: alarmsFile = json.load(open('alarms.json')) logsFile = json.load(open('logs.json')) + todoFile = json.load(open('todos.json')) except: alarmsFile = list() logsFile = list() + todoFile = list() json.dump(alarmsFile, open('alarms.json','w'), indent=2) json.dump(logsFile, open('logs.json','w'), indent=2) + json.dump(todoFile, open('todos.json','w'), indent=2) # schreib alle alarme im File in previousAlarms, wenn sie älter als 2 mins sind # alle anderen in active alarms for (alarm) in alarmsFile: @@ -34,6 +37,12 @@ def preprocess(): global alarmIndex if(int(alarm)>alarmIndex): alarmIndex = int(alarm) + + for todo in todoFile: + todos_dict[todo] = todoFile[todo] + if todoFile[todo]['done'] and todo in activeAlarms: + previousAlarms[id] = activeAlarms[id] + activeAlarms.pop(id) # lies alle log aus dem file ein for log in logsFile: logs.append(log) @@ -43,8 +52,6 @@ def preprocess(): @app.route("/", methods=('GET', 'POST')) def index(): - # wenn die logs leer sind, gehen wir davon aus, dass noch nicht initialisiert wurde - # alarme werden gedoppelt, sollten schon welche da sein if not preprocessed: preprocess() @@ -67,12 +74,9 @@ def setAlarm(): alarmIndex += 1 activeAlarms[alarmIndex]({'datetime':datetime.strftime(time,"%d.%m.%Y %H:%M"),'message':content}) - # ja, wir schreiben einfach das ganze File neu, ist aber einfacher allAlarms = activeAlarms+previousAlarms with open('alarms.json', 'w') as f: json.dump(allAlarms, f, indent=2) - - # Closing file f.close() return redirect(url_for('index')) @@ -84,15 +88,13 @@ def sendLog(): logs.append(log) with open('logs.json', 'w') as f: json.dump(logs, f, indent=2) - - # Closing file f.close() return redirect(url_for('index')) +# sounds the alarm @app.route('/alarms', methods=('GET','POST')) def alarm(): - # needs update to dict if request.method == 'GET': return json.dumps(activeAlarms) @@ -100,8 +102,8 @@ def alarm(): print('ALARM') subprocess.call(['mpv','./alarm.mp3'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) data = json.loads(request.data.decode('UTF-8')) - previousAlarms.append(data) - activeAlarms.remove(data) + previousAlarms[data] = activeAlarms[data] + activeAlarms.pop(data) return redirect(url_for('index')) @app.route('/deletealarm', methods=('GET','POST')) @@ -112,35 +114,57 @@ def deleteAlarm(): previousAlarms[id] = alarm activeAlarms.pop(id) return redirect(url_for('index')) - + +# invert todo checkbox +# if alarm attached to checkbox -> move to previous or active alarm accordingly +@app.route('/checktodo', methods=('GET','POST')) +def checktodo(): + if request.method == 'POST': + id = request.data.decode('UTF-8') + todos_dict[id] = {'done': not todos_dict[id]['done'], 'message': todos_dict[id]['message']} + if id in activeAlarms: + previousAlarms[id] = activeAlarms[id] + activeAlarms.pop(id) + elif id in previousAlarms: + activeAlarms[id] = previousAlarms[id] + previousAlarms.pop(id) + with open('todos.json', 'w') as f: + json.dump(todos_dict, f, indent=2) + return render_template('todo.html', todos = todos_dict, alarms = activeAlarms) + @app.route('/upload', methods=('GET','POST')) def upload(): # if upload successful back to index # else show error und bleib auf der Seite if request.method == 'POST': - # try: - data = json.load(request.files['alarmFile'].stream) - for alarm in data: - print(alarm) + data = json.load(request.files['alarmFile'].stream) + for alarm in data: + content = alarm["message"] + global alarmIndex + alarmIndex += 1 + if alarm["type"] != "checkbox": time = datetime.combine(datetime.today(),datetime.strptime(alarm["time"], "%H:%M").time()) if time