kopia lustrzana https://github.com/dgtlmoon/changedetection.io
59 wiersze
2.5 KiB
Python
59 wiersze
2.5 KiB
Python
from flask_socketio import emit
|
|
from loguru import logger
|
|
from blinker import signal
|
|
|
|
|
|
def register_watch_operation_handlers(socketio, datastore):
|
|
"""Register Socket.IO event handlers for watch operations"""
|
|
|
|
@socketio.on('watch_operation')
|
|
def handle_watch_operation(data):
|
|
"""Handle watch operations like pause, mute, recheck via Socket.IO"""
|
|
try:
|
|
op = data.get('op')
|
|
uuid = data.get('uuid')
|
|
|
|
logger.debug(f"Socket.IO: Received watch operation '{op}' for UUID {uuid}")
|
|
|
|
if not op or not uuid:
|
|
emit('operation_result', {'success': False, 'error': 'Missing operation or UUID'})
|
|
return
|
|
|
|
# Check if watch exists
|
|
if not datastore.data['watching'].get(uuid):
|
|
emit('operation_result', {'success': False, 'error': 'Watch not found'})
|
|
return
|
|
|
|
watch = datastore.data['watching'][uuid]
|
|
|
|
# Perform the operation
|
|
if op == 'pause':
|
|
watch.toggle_pause()
|
|
logger.info(f"Socket.IO: Toggled pause for watch {uuid}")
|
|
elif op == 'mute':
|
|
watch.toggle_mute()
|
|
logger.info(f"Socket.IO: Toggled mute for watch {uuid}")
|
|
elif op == 'recheck':
|
|
# Import here to avoid circular imports
|
|
from changedetectionio.flask_app import update_q
|
|
from changedetectionio import queuedWatchMetaData
|
|
from changedetectionio import worker_handler
|
|
|
|
worker_handler.queue_item_async_safe(update_q, queuedWatchMetaData.PrioritizedItem(priority=1, item={'uuid': uuid}))
|
|
logger.info(f"Socket.IO: Queued recheck for watch {uuid}")
|
|
else:
|
|
emit('operation_result', {'success': False, 'error': f'Unknown operation: {op}'})
|
|
return
|
|
|
|
# Send signal to update UI
|
|
watch_check_update = signal('watch_check_update')
|
|
if watch_check_update:
|
|
watch_check_update.send(watch_uuid=uuid)
|
|
|
|
# Send success response to client
|
|
emit('operation_result', {'success': True, 'operation': op, 'uuid': uuid})
|
|
|
|
except Exception as e:
|
|
logger.error(f"Socket.IO error in handle_watch_operation: {str(e)}")
|
|
emit('operation_result', {'success': False, 'error': str(e)})
|