Example #1
0
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)
Example #2
0
    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
Example #3
0
    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)
Example #4
0
    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
Example #5
0
def broadcast_player_property(attribute, value):
    yield from events.broadcast(type="player", attribute=attribute, value=value)