from flask import Blueprint, jsonify, request from hardware.mitvs_module import turn_on_display, turn_off_display, turn_on_all_displays, turn_off_all_displays, mitv_controller from utils.logger_config import logger from api.utils import login_required, ping_ip import threading import concurrent.futures mitv_bp = Blueprint('mitv', __name__) @mitv_bp.route('/api/mitv/turn_on', methods=['POST']) @login_required def turn_on_display_api(): """唤醒指定ID的电视""" try: data = request.get_json() if not data or 'kodi_id' not in data: return jsonify({ "success": False, "message": "缺少 kodi_id 参数" }), 400 kodi_id = data['kodi_id'] if not isinstance(kodi_id, int) or kodi_id < 0: return jsonify({ "success": False, "message": "kodi_id 必须是大于等于0的整数" }), 400 def task(): try: turn_on_display(kodi_id) except Exception as e: logger.error(f"异步唤醒电视异常 (ID: {kodi_id}): {str(e)}") threading.Thread(target=task).start() return jsonify({ "success": True, "message": f"已发送唤醒指令给电视 (ID: {kodi_id}) - 异步执行" }) except Exception as e: logger.error(f"唤醒电视异常: {str(e)}") return jsonify({ "success": False, "message": f"唤醒电视失败: {str(e)}" }), 500 @mitv_bp.route('/api/mitv/turn_off', methods=['POST']) @login_required def turn_off_display_api(): """息屏指定ID的电视""" try: data = request.get_json() if not data or 'kodi_id' not in data: return jsonify({ "success": False, "message": "缺少 kodi_id 参数" }), 400 kodi_id = data['kodi_id'] if not isinstance(kodi_id, int) or kodi_id < 0: return jsonify({ "success": False, "message": "kodi_id 必须是大于等于0的整数" }), 400 def task(): try: turn_off_display(kodi_id) except Exception as e: logger.error(f"异步息屏电视异常 (ID: {kodi_id}): {str(e)}") threading.Thread(target=task).start() return jsonify({ "success": True, "message": f"已发送息屏指令给电视 (ID: {kodi_id}) - 异步执行" }) except Exception as e: logger.error(f"息屏电视异常: {str(e)}") return jsonify({ "success": False, "message": f"息屏电视失败: {str(e)}" }), 500 @mitv_bp.route('/api/mitv/turn_on_all', methods=['POST']) @login_required def turn_on_all_displays_api(): """唤醒所有电视""" try: def task(): try: turn_on_all_displays() except Exception as e: logger.error(f"异步唤醒所有电视异常: {str(e)}") threading.Thread(target=task).start() return jsonify({ "success": True, "message": "已发送唤醒指令给所有电视 - 异步执行" }) except Exception as e: logger.error(f"唤醒所有电视异常: {str(e)}") return jsonify({ "success": False, "message": f"唤醒所有电视失败: {str(e)}" }), 500 @mitv_bp.route('/api/mitv/turn_off_all', methods=['POST']) @login_required def turn_off_all_displays_api(): """息屏所有电视""" try: def task(): try: turn_off_all_displays() except Exception as e: logger.error(f"异步息屏所有电视异常: {str(e)}") threading.Thread(target=task).start() return jsonify({ "success": True, "message": "已发送息屏指令给所有电视 - 异步执行" }) except Exception as e: logger.error(f"息屏所有电视异常: {str(e)}") return jsonify({ "success": False, "message": f"息屏所有电视失败: {str(e)}" }), 500 from application.self_check_service import check_mitv_status # 电视进行自检 # 通过ping 所有电视ip进行,返回一个数组,数组中包括是否正常、电视IP。 @mitv_bp.route('/api/mitv/self_check', methods=['POST']) @login_required def self_check_api(): """电视进行自检""" try: results = check_mitv_status() return jsonify({ "success": True, "message": "电视自检完成", "data": results }) except Exception as e: logger.error(f"电视进行自检异常: {str(e)}") return jsonify({ "success": False, "message": f"电视进行自检失败: {str(e)}" }), 500