#!/usr/bin/python3 import sys import threading import time import os import pychromecast from pychromecast.controllers.media import MediaStatusListener from pychromecast.controllers.receiver import CastStatusListener from pychromecast import quick_play CAST_NAME="Chromecast" print("emergency-button") def clear_stdin(): os.set_blocking(sys.stdin.fileno(), False) try: while True: sys.stdin.read() except: pass finally: os.set_blocking(sys.stdin.fileno(), True) cv = threading.Condition() media_status = None class MyMediaStatusListener(MediaStatusListener): def __init__(self, name, cast): self.name = name self.cast = cast def new_media_status(self, status): global media_status media_status = status with cv: cv.notify_all() def load_media_failed(self, item, error_code): pass season1 = [ 235861, 235862, 235863, 235867, 235865, 235868, 235866, 235864, ] season2 = [ 248407, 248402, 248405, 248404, 248406, 248408, 248409, 248410, ] season3 = [ 366624, 366626, 366627, 366625, 366629, 366632, 366631, 366633, 366635, 366634, 366630, 366628, ] all_fantus = season1 + season2 + season3 def play_fantus(chromecast): with open("fantus-counter.txt", "r") as counterf: counter = int(counterf.read()) with open("drtoken.txt", "r") as tokenf: dr_tokens = tokenf.read() media_id = all_fantus[counter % len(all_fantus)] app_name = "drtv" app_data = { "media_id": media_id, "is_live": False, "dr_tokens": dr_tokens, "current_time": -1, "autoplay": True, "chainplay_countdown": -1, } quick_play.quick_play(chromecast, app_name, app_data) counter += 1 with open("fantus-counter.txt", "w") as counterf: counterf.write(str(counter)) chromecasts, browser = pychromecast.get_listed_chromecasts( friendly_names=[CAST_NAME] ) if not chromecasts: print(f'No chromecast with name "{CAST_NAME}" discovered') print(chromecasts) sys.exit(1) chromecast = chromecasts[0] # Start socket client's worker thread and wait for initial status update chromecast.wait() if chromecast.status.display_name != "DRTV": play_fantus(chromecast) clear_stdin() sys.exit(0) listenerMedia = MyMediaStatusListener(chromecast.name, chromecast) chromecast.media_controller.register_status_listener(listenerMedia) with cv: cv.wait(5) if media_status: if media_status.title == "Minibørnene": if media_status.player_is_paused: chromecast.media_controller.play() elif media_status.player_is_playing: chromecast.media_controller.pause() else: pass else: play_fantus(chromecast) clear_stdin()