예제 #1
0
 def update():
     instance = int(request.args.get("instance"))
     if instance == 1:
         Updater().update()
     else:
         APIController().slave_command(instance, "updater", "update")
     return "OK"
예제 #2
0
 def restart_device():
     instance = int(request.args.get("instance"))
     if instance == 1:
         os.system('sudo reboot')
     else:
         APIController().slave_command(instance, "system", "restart_device")
     return "OK"
예제 #3
0
 def notify_next_episode(self, callback):
     if self.next_type is not None:
         Logger().write(
             LogVerbosity.Info,
             "Can continue with next episode: " + self.next_title)
         APIController().ui_request("SelectNextEpisode", callback, 60 * 60,
                                    self.next_title)
예제 #4
0
 def _send_ui_request(topic, data, timeout):
     Logger().write(LogVerbosity.Debug, "Sending ui request: " + topic + ", data: " + str(data))
     request_id = APIController().next_id()
     request = Request(request_id, topic, data, None, SlaveClientController._complete_request)
     SlaveClientController.requests.append(request)
     SlaveClientController.slave_ns.emit("ui_request", request_id, topic, data, timeout)
     return request
예제 #5
0
    def media_selection_required(self, files):
        if Settings.get_bool("slave"):
            data, = SlaveClientController.request_master(
                "get_history_for_url", 5, self.torrent.uri)
            if data:
                history = [
                    History(x['id'], x['imdb_id'], x['type'], x['title'],
                            x['image'], x['watched_at'], x['season'],
                            x['episode'], x['url'], x['media_file'],
                            x['played_for'], x['length'])
                    for x in json.loads(data)
                ]
            else:
                history = []
        else:
            history = Database().get_history_for_url(self.torrent.uri)

        for file in files:
            seen = [x for x in history if x.media_file == file.path]
            file.seen = len(seen) > 0
            if file.seen:
                seen = seen[-1]
                file.played_for = seen.played_for
                file.play_length = seen.length

        APIController().ui_request("SelectMediaFile", self.set_media_file,
                                   60 * 30, files)
예제 #6
0
 def _send_request(self, topic, data, room):
     Logger().write(LogVerbosity.Debug, "Sending request: " + topic + ", data: " + str(data))
     request_id = APIController().next_id()
     request_message = Request(request_id, topic, data, room, self._complete_request)
     self.requests.append(request_message)
     data = to_JSON(data)
     self.emit("request", (request_id, topic, data), room=room)
     return request_message
예제 #7
0
 def close_application():
     instance = int(request.args.get("instance"))
     if instance == 1:
         sys.exit()
     else:
         APIController().slave_command(instance, "system",
                                       "close_application")
     return "OK"
예제 #8
0
    def stop_player():
        instance = int(request.args.get("instance"))
        Logger().write(LogVerbosity.Info, "Stop playing on " + str(instance))

        if instance == 1:
            MediaManager().stop_play()
        else:
            APIController().slave_command(instance, "media", "stop_play")
        return "OK"
예제 #9
0
    def pause_resume_player():
        instance = int(request.args.get("instance"))
        Logger().write(LogVerbosity.Info, "Pause/resume on " + str(instance))

        if instance == 1:
            MediaManager().pause_resume()
        else:
            APIController().slave_command(instance, "media", "pause_resume")
        return "OK"
예제 #10
0
 def restart_application():
     instance = int(request.args.get("instance"))
     if instance == 1:
         python = sys.executable
         os.execl(python, python, *sys.argv)
     else:
         APIController().slave_command(instance, "system",
                                       "restart_application")
     return "OK"
예제 #11
0
    def seek():
        instance = int(request.args.get("instance"))
        position = int(request.args.get("position"))
        Logger().write(LogVerbosity.Info,
                       "Seek " + str(instance) + " to " + str(position))

        if instance == 1:
            MediaManager().seek(position)
        else:
            APIController().slave_command(instance, "media", "seek", position)
        return "OK"
예제 #12
0
 def get_update():
     instance = int(request.args.get("instance"))
     if instance == 1:
         return to_JSON(
             UpdateAvailable(Updater().check_version(),
                             Updater().last_version))
     else:
         result = APIController().slave_request(instance,
                                                "get_last_version", 10)
         if result is None:
             return to_JSON(UpdateAvailable(False, ""))
         return to_JSON(UpdateAvailable(result[0], result[1]))
예제 #13
0
    def change_volume():
        instance = int(request.args.get("instance"))
        volume = int(request.args.get("volume"))
        Logger().write(LogVerbosity.Info,
                       "Set volume on " + str(instance) + " to " + str(volume))

        if instance == 1:
            MediaManager().change_volume(volume)
        else:
            APIController().slave_command(instance, "media", "change_volume",
                                          volume)
        return "OK"
예제 #14
0
    def change_audio():
        instance = int(request.args.get("instance"))
        track = int(request.args.get("track"))
        Logger().write(LogVerbosity.Info,
                       "Set audio on " + str(instance) + " to " + str(track))

        if instance == 1:
            MediaManager().change_audio(track)
        else:
            APIController().slave_command(instance, "media", "change_audio",
                                          track)
        return "OK"
예제 #15
0
    def play_radio():
        radio_id = int(request.args.get("id"))
        radio = [x for x in Database().get_radios() if x.id == radio_id][0]
        instance = int(request.args.get("instance"))

        Logger().write(LogVerbosity.Info,
                       "Play radio " + radio.title + " on " + str(instance))
        if instance == 1:
            MediaManager().start_radio(radio.title, radio.url)
        else:
            APIController().slave_command(instance, "media", "start_radio",
                                          radio.title, radio.url)
        return "OK"
예제 #16
0
    def change_sub_delay():
        instance = int(request.args.get("instance"))
        delay = int(request.args.get("delay"))
        Logger().write(
            LogVerbosity.Info,
            "Set sub delay on " + str(instance) + " to " + str(delay))

        if instance == 1:
            MediaManager().change_subtitle_delay(delay)
        else:
            APIController().slave_command(instance, "media",
                                          "change_subtitle_delay", delay)
        return "OK"
예제 #17
0
    def play_youtube():
        instance = int(request.args.get("instance"))
        title = urllib.parse.unquote(request.args.get("title"))
        url = urllib.parse.unquote(request.args.get("url"))
        position = int(request.args.get("position"))

        Logger().write(LogVerbosity.Info,
                       "Play youtube " + title + " on " + str(instance))
        if instance == 1:
            MediaManager().start_youtube(title, url, position)
        else:
            APIController().slave_command(instance, "media", "start_youtube",
                                          title, url, position)
        return "OK"
예제 #18
0
    def on_ui_request(request_id, topic, data, timeout):
        slave = APIController.slaves.get_slave_by_sid(request.sid)
        if slave is None:
            Logger().write(LogVerbosity.Debug,
                           "Slave ui request for not initialized slave")
            disconnect()
            return

        Logger().write(LogVerbosity.Debug,
                       "Slave ui request " + topic + ": " + data)
        slave = APIController.slaves.get_slave_by_sid(request.sid)
        APIController().ui_request(
            topic,
            lambda *x: SlaveWebsocketController.slave_ui_request_callback(
                request_id, slave, x), timeout, json.loads(data))
예제 #19
0
    def on_get_current_requests():
        authenticated = [
            x for x in UIWebsocketController.clients if x.sid == request.sid
        ][0].authenticated
        if not authenticated:
            Logger().write(
                LogVerbosity.Info,
                "Unauthenticated socket request for current requests")
            return

        for client_request in APIController().ui_websocket_controller.requests:
            socketio.emit("request",
                          (client_request.request_id, client_request.topic,
                           to_JSON(client_request.data)),
                          namespace="/UI",
                          room=request.sid)
예제 #20
0
    def play_file():
        instance = int(request.args.get("instance"))
        position = int(request.args.get("position"))
        file = urllib.parse.unquote(request.args.get("path"))
        if sys.platform == "win32":
            file = "C:" + file

        Logger().write(LogVerbosity.Info,
                       "Play file " + file + " on " + str(instance))

        if instance == 1:
            MediaManager().start_file(file, position)
        else:
            APIController().slave_command(instance, "media", "start_file",
                                          file, position)
        return "OK"
예제 #21
0
    def play_url():
        instance = int(request.args.get("instance"))
        title = urllib.parse.unquote(request.args.get("title"))
        url = urllib.parse.unquote(request.args.get("url"))
        Logger().write(
            LogVerbosity.Info,
            "Play url " + title + "(" + url + ") on " + str(instance))

        if instance == 1:
            if url.startswith("magnet:"):
                MediaManager().start_torrent(title, url, None)
            else:
                MediaManager().start_url(title, url)
        else:
            APIController().slave_command(instance, "media", "start_url",
                                          title, url)
        return "OK"
예제 #22
0
    def play_torrent():
        instance = int(request.args.get("instance"))
        title = urllib.parse.unquote(request.args.get("title"))
        url = urllib.parse.unquote(request.args.get("url"))
        magnet_uri = TorrentController.get_magnet_url(url)
        if magnet_uri is None:
            Logger().write(LogVerbosity.Error,
                           "Failed to find torrent magnet uri")
            return "OK"

        Logger().write(LogVerbosity.Info,
                       "Play torrent " + title + " on " + str(instance))
        if instance == 1:
            MediaManager().start_torrent(title, magnet_uri)
        else:
            APIController().slave_command(instance, "media", "start_torrent",
                                          title, magnet_uri)
        return "OK"
예제 #23
0
    def play_episode():
        instance = int(request.args.get("instance"))
        title = urllib.parse.unquote(request.args.get("title"))
        movie_id = request.args.get("id")
        url = urllib.parse.unquote(request.args.get("url"))
        img = urllib.parse.unquote(request.args.get("img"))
        position = int(request.args.get("position"))
        season = int(request.args.get("season"))
        episode = int(request.args.get("episode"))

        Logger().write(LogVerbosity.Info,
                       "Play episode " + title + " on " + str(instance))
        if instance == 1:
            MediaManager().start_episode(movie_id, season, episode, title, url,
                                         img, position)
        else:
            APIController().slave_command(instance, "media", "start_episode",
                                          movie_id, season, episode, title,
                                          url, img, position)
        return "OK"
예제 #24
0
파일: start.py 프로젝트: JKorf/MediaPi
    def __init__(self):
        Logger().start(Settings.get_int("log_level"))
        sys.excepthook = self.handle_exception

        Logger().write(LogVerbosity.Info, "Starting")
        self.running = True

        self.version = datetime.fromtimestamp(
            self.get_latest_change()).strftime("%Y-%m-%d %H:%M:%S")
        self.is_slave = Settings.get_bool("slave")
        self.pi = sys.platform == "linux" or sys.platform == "linux2"

        Logger().write(
            LogVerbosity.Info, "Python version " + str(sys.version_info[0]) +
            "." + str(sys.version_info[1]) + "." + str(sys.version_info[2]))
        Logger().write(LogVerbosity.Info,
                       "MediaPlayer build [" + self.version + "]")
        Logger().write(LogVerbosity.Info, "Slave: " + str(self.is_slave))
        if self.is_slave:
            Logger().write(
                LogVerbosity.Info,
                "Master ip: " + str(Settings.get_string("master_ip")))
        Logger().write(LogVerbosity.Info, "Pi: " + str(self.pi))
        Logger().write(LogVerbosity.Info,
                       "UI: " + str(Settings.get_bool("UI")))

        Logger().write(LogVerbosity.Debug, "Initializing database")
        Database().init_database()

        Logger().write(LogVerbosity.Debug, "Initializing singletons")
        self.init_singletons()

        Logger().write(LogVerbosity.Debug, "Initializing sounds and folders")
        self.init_sound()
        self.init_folders()

        Logger().write(LogVerbosity.Debug, "Initializing API")
        APIController().start()

        Logger().write(LogVerbosity.Debug, "Initializing WiFi controller")
        WiFiController().check_wifi()

        Logger().write(LogVerbosity.Debug, "Initializing stats")
        Stats().start()
        Stats().set('start_time', current_time())

        Logger().write(LogVerbosity.Debug, "Initializing presence manager")
        PresenceManager().start()

        Logger().write(LogVerbosity.Debug, "Initializing rule manager")
        RuleManager().start()

        Logger().write(LogVerbosity.Debug, "Initializing TV manager")
        TVManager().start()

        if not self.is_slave:
            Logger().write(LogVerbosity.Debug, "Initializing TradeFriManager")
            TradfriManager().init()

            Logger().write(LogVerbosity.Debug,
                           "Initializing master file server")
            self.file_listener = StreamListener("MasterFileServer", 50015)
            self.file_listener.start_listening()

        Logger().write(LogVerbosity.Important, "Started")
        if Settings.get_bool("UI"):
            from UI.TV.GUI import App
            self.gui = App.initialize()
        else:
            while self.running:
                time.sleep(5)
예제 #25
0
 def on_ui_message(title, message):
     APIController().ui_message(title, message)
예제 #26
0
 def aborting_torrent(self, reason):
     APIController().ui_message("Aborting torrent", reason)
     self.stop_play()