commits
tags
import re
from flask import Blueprint, jsonify, request, abort
import db
import extensions
from auth import login_required
bp = Blueprint('clock', __name__, url_prefix='/api')
_HEX_COLOR = re.compile(r'^#[0-9a-fA-F]{6}$')
@bp.route('/clock', methods=['GET'])
def get_clock():
state = db.get_state()
return jsonify({
'enabled': state.get('clock_enabled', '0') == '1',
'style': state.get('clock_style', 'digital'),
'show_date': state.get('clock_show_date', '0') == '1',
'position': state.get('clock_position', 'top-right'),
'size': float(state.get('clock_size', '2')),
'color': state.get('clock_color', '#ffffff'),
'opacity': int(state.get('clock_opacity', '90')),
'schedule_mode': state.get('clock_schedule_mode', 'always'),
})
@bp.route('/clock', methods=['POST'])
@login_required
def set_clock():
data = request.get_json()
if not data:
abort(400)
enabled = bool(data.get('enabled', False))
style = 'analog' if data.get('style') == 'analog' else 'digital'
show_date = bool(data.get('show_date', False))
position = data.get('position', 'top-right')
if position not in {'top-left', 'top-right', 'bottom-left', 'bottom-right', 'center'}:
position = 'top-right'
size = max(1.0, min(5.0, float(data.get('size', 2))))
color = str(data.get('color', '#ffffff'))
if not _HEX_COLOR.match(color):
color = '#ffffff'
opacity = max(0, min(100, int(data.get('opacity', 90))))
schedule_mode = 'scheduled_only' if data.get('schedule_mode') == 'scheduled_only' else 'always'
db.set_state('clock_enabled', '1' if enabled else '0')
db.set_state('clock_style', style)
db.set_state('clock_show_date', '1' if show_date else '0')
db.set_state('clock_position', position)
db.set_state('clock_size', str(size))
db.set_state('clock_color', color)
db.set_state('clock_opacity', str(opacity))
db.set_state('clock_schedule_mode', schedule_mode)
payload = {
'enabled': enabled, 'style': style, 'show_date': show_date,
'position': position, 'size': size, 'color': color,
'opacity': opacity, 'schedule_mode': schedule_mode,
}
extensions.socketio.emit('clock_settings', payload)
return '', 204