commits
tags
import re
from flask import Blueprint, jsonify, request, abort
import db
import extensions
from auth import login_required
bp = Blueprint('youtube_livechat', __name__)
_HEX_COLOR = re.compile(r'^#[0-9a-fA-F]{6}$')
@bp.route('/api/yt_chat', methods=['GET'])
def get_yt_chat():
state = db.get_state()
return jsonify({
'enabled': state.get('yt_chat_enabled', '0') == '1',
'position': state.get('yt_chat_position', 'right'),
'width_pct': int(state.get('yt_chat_width_pct', '25')),
'height': int(state.get('yt_chat_height', '100')),
'bg_color': state.get('yt_chat_bg_color', '#000000'),
'bg_opacity': int(state.get('yt_chat_bg_opacity', '70')),
'text_color': state.get('yt_chat_text_color', '#ffffff'),
'font_size': int(state.get('yt_chat_font_size', '14')),
})
@bp.route('/api/yt_chat', methods=['POST'])
@login_required
def set_yt_chat():
data = request.get_json()
if not data:
abort(400)
enabled = bool(data.get('enabled', False))
position = 'left' if data.get('position') == 'left' else 'right'
width_pct = max(5, min(60, int(data.get('width_pct', 25))))
height = max(30, min(100, int(data.get('height', 100))))
bg_color = str(data.get('bg_color', '#000000'))
bg_opacity = max(0, min(100, int(data.get('bg_opacity', 70))))
text_color = str(data.get('text_color', '#ffffff'))
font_size = max(8, min(48, int(data.get('font_size', 14))))
if not _HEX_COLOR.match(bg_color): bg_color = '#000000'
if not _HEX_COLOR.match(text_color): text_color = '#ffffff'
db.set_state('yt_chat_enabled', '1' if enabled else '0')
db.set_state('yt_chat_position', position)
db.set_state('yt_chat_width_pct', str(width_pct))
db.set_state('yt_chat_height', str(height))
db.set_state('yt_chat_bg_color', bg_color)
db.set_state('yt_chat_bg_opacity', str(bg_opacity))
db.set_state('yt_chat_text_color', text_color)
db.set_state('yt_chat_font_size', str(font_size))
payload = {
'enabled': enabled, 'position': position,
'width_pct': width_pct, 'height': height,
'bg_color': bg_color, 'bg_opacity': bg_opacity,
'text_color': text_color, 'font_size': font_size,
}
extensions.socketio.emit('yt_chat_settings', payload)
return '', 204