def main(): listener = events.listener('download-subtitle', 'list-subtitles') while True: event = yield from listener.wait() if event is None: break if event.type == 'list-subtitles': subtitles = yield from from_opensubtitles(event.path) languages = sorted(set(s.lang for s in subtitles)) log.info("Available languages for {}: {}", event.path, languages) yield from events.broadcast('available-subtitles', path=event.path, languages=languages) else: result = yield from download_subtitles(event.path, event.language) if result: yield from events.broadcast('subtitle-downloaded', path=str(result), video_path=event.path, language=event.language)
def set_subtitle(self, sid): if isinstance(sid, str) and sid.startswith("download_"): offset = len("download_") lang = sid[offset:] yield from events.broadcast("download-subtitle", path=self.client.path, language=lang) return log.info("Setting subtitle to {}", sid) self.client.sub = sid
def handle_websocket(self, websocket, path): client = ":".join(map(str, websocket.writer.get_extra_info("peername"))) log.info("New client {}", client) yield from events.broadcast("new-client", private=True) while True: message = yield from websocket.recv() if message is None: return message = json.loads(message) method, arguments = message["command"], message.get("arguments", {}) yield from self._run_command(method, arguments)
def update_track_info(self): yield from asyncio.gather( self.broadcast_available_subtitles(), self.broadcast_available_audio(), self.broadcast_subtitle(), broadcast_player_property("selected_audio", str(self.audio)), events.broadcast("list-subtitles", path=self.client.path), ) if ( self.sub != 0 and self.audio_language() != "unk" and self.audio_language() == self.sub_language() and not int(Config.get("player", "subtitles for matching audio")) ): log.info("Disabling subtitle as it's the same as the language") self.client.sub = 0
def broadcast_player_property(attribute, value): yield from events.broadcast(type="player", attribute=attribute, value=value)