foxygit / infodisplay Log in
commits tags

/kiosk/addons/sleep/routes.py · 1.2 KB

raw
import re
from flask import Blueprint, jsonify, request, abort
import db
import extensions
import scheduler as sched
from auth import login_required
from . import is_sleep_active

bp = Blueprint('sleep', __name__, url_prefix='/api/sleep')


@bp.route('', methods=['GET'])
@login_required
def get_sleep():
    state = db.get_state()
    return jsonify({
        'enabled': state.get('sleep_enabled', '0') == '1',
        'start':   state.get('sleep_start', '22:00'),
        'end':     state.get('sleep_end',   '07:00'),
    })


@bp.route('', methods=['POST'])
@login_required
def set_sleep():
    data = request.get_json()
    if not data:
        abort(400)
    enabled = bool(data.get('enabled', False))
    start   = str(data.get('start', '22:00'))
    end     = str(data.get('end',   '07:00'))
    if not re.match(r'^\d{2}:\d{2}$', start): start = '22:00'
    if not re.match(r'^\d{2}:\d{2}$', end):   end   = '07:00'
    db.set_state('sleep_enabled', '1' if enabled else '0')
    db.set_state('sleep_start',   start)
    db.set_state('sleep_end',     end)
    sched.reload_sleep_jobs()
    active = enabled and is_sleep_active(start, end)
    extensions.socketio.emit('sleep_toggle', {'active': active})
    return '', 204