commits
tags
from datetime import datetime, timedelta
from apscheduler.schedulers.background import BackgroundScheduler
import db
scheduler = BackgroundScheduler()
_socketio = None
_current_index = 0
def init_scheduler(socketio):
global _socketio
_socketio = socketio
scheduler.start()
reload_jobs()
reload_sleep_jobs()
def reload_jobs():
global _current_index
_current_index = 0
try:
scheduler.remove_job('rotation')
except Exception:
pass
jobs = db.get_enabled_jobs()
if not jobs:
return
_emit_and_schedule(jobs[0])
def _advance():
global _current_index
jobs = db.get_enabled_jobs()
if not jobs:
return
_current_index = (_current_index + 1) % len(jobs)
_emit_and_schedule(jobs[_current_index])
def _emit_and_schedule(job):
if _socketio:
_socketio.emit('switch', {
'type': job['type'],
'source': job['source'],
'scheduled': True,
'shuffle': bool(job.get('shuffle')),
'show_chat': bool(job.get('show_chat')),
'transition_type': job.get('transition_type') or '',
'transition_duration': int(job.get('transition_duration') or 0),
})
db.set_current(job['type'], job['source'])
scheduler.add_job(
func=_advance,
trigger='date',
run_date=datetime.now() + timedelta(minutes=job['duration']),
id='rotation',
replace_existing=True
)
# --- Söv-läge ---
def _sleep_on():
if _socketio:
_socketio.emit('sleep_toggle', {'active': True})
def _sleep_off():
if _socketio:
_socketio.emit('sleep_toggle', {'active': False})
def reload_sleep_jobs():
for jid in ('sleep_on', 'sleep_off'):
try:
scheduler.remove_job(jid)
except Exception:
pass
state = db.get_state()
if state.get('sleep_enabled') != '1':
return
start = state.get('sleep_start', '22:00')
end = state.get('sleep_end', '07:00')
try:
sh, sm = map(int, start.split(':'))
eh, em = map(int, end.split(':'))
except Exception:
return
scheduler.add_job(_sleep_on, 'cron', hour=sh, minute=sm, id='sleep_on', replace_existing=True)
scheduler.add_job(_sleep_off, 'cron', hour=eh, minute=em, id='sleep_off', replace_existing=True)