import requests
import time
import threading
from core.DBManager import DBManager
from myutils.MyLogger_logger import LogHandler
from myutils.ConfigManager import myCongif

class ViewManager:

    def __init__(self):
        self.thcheck = False
        self.lock = threading.Lock()
        self.logger = LogHandler().get_logger("ViewManager")

    def check_rtsp_url(self,rtsp_url):  #通过发送http请求判断rtsp流的在线状态
        http_url = rtsp_url.replace("rtsp://", "http://")
        try:
            response = requests.options(http_url, timeout=5)
            if response.status_code == 200:
                return True
        except requests.RequestException:
            pass
        return False

    def check_all_urls(self):  #?
        strsql = "select ID,ulr from channel;"
        datas = self.mDBM.do_select(strsql)
        IDs = [row[0] for row in datas]
        urls = [row[1] for row in datas]
        #print(IDs,urls)
        for i in range(len(urls)):
            url = urls[i]
            ID = IDs[i]
            result = self.check_rtsp_url(url)
            iret = 1 if result else 0
            strsql = f"update channel set status={iret} where ID={ID};"
            self.logger.debug(strsql)
            self.mDBM.do_sql(strsql)

    def start_check_rtsp(self, interval=myCongif.get_data('RTSP_Check_Time')): #通过线程循环检查添加的RTSP地址在线情况
        def run():
            self.mDBM = DBManager()
            self.mDBM.connect()
            while True:
                self.check_all_urls()
                time.sleep(interval)

        if self.thcheck == False:
            thread = threading.Thread(target=run)
            thread.daemon = True
            thread.start()
            self.thcheck = True


mVManager = ViewManager()

if __name__ =='__main__':
    mVManager.start_check_rtsp()
    time.sleep(65)