def msg(self, players):
        msg = getXMLHeader()
        self.updatePlayerState()
        msg += '<MediaContainer commandID="INSERTCOMMANDID"'

        if players:
            self.getVolume()
            maintype = "music"
            for p in players.values():
                maintype = p.get("type")
            self.mainlocation = "fullScreen" + maintype[0:1].upper() + maintype[1:].lower()
        else:
            self.mainlocation = "navigation"
        msg += ' location="%s">' % self.mainlocation

        msg += "<Timeline seekRange='0-0' state='stopped' time='0' type='music'></Timeline>"
        msg += "<Timeline seekRange='0-0' state='stopped' time='0' type='photo'></Timeline>"
        msg += self.getTimelineXML(self.getVideoPlayerId(players), "video")
        msg += "\r\n</MediaContainer>"
        return msg
Beispiel #2
0
    def msg(self, players):
        msg = getXMLHeader()
        self.updatePlayerState()
        msg += '<MediaContainer commandID="INSERTCOMMANDID"'

        if players:
            self.getVolume()
            maintype = "music"
            for p in players.values():
                maintype = p.get('type')
            self.mainlocation = "fullScreen" + maintype[0:1].upper(
            ) + maintype[1:].lower()
        else:
            self.mainlocation = "navigation"
        msg += ' location="%s">' % self.mainlocation

        msg += "<Timeline seekRange='0-0' state='stopped' time='0' type='music'></Timeline>"
        msg += "<Timeline seekRange='0-0' state='stopped' time='0' type='photo'></Timeline>"
        msg += self.getTimelineXML(self.getVideoPlayerId(players), "video")
        msg += "\r\n</MediaContainer>"
        return msg
	def answer_request(self):
		printl("", self, "S")

		try:
			request_path=self.path[1:]
			request_path=re.sub(r"\?.*","",request_path)

			printl("request path is: [%s]" % request_path, self, "D")

			# first we get all params form url
			params = self.getParams()

			data = {"command": "updateCommandId", "uuid": self.headers.get('X-Plex-Client-Identifier', self.client_address[0]), "commandID": params.get('commandID', False)}
			self.playerCallback(data)
			self.resetCallback()

			if request_path == "player/timeline/subscribe":
				self.response(getOKMsg(), getPlexHeaders())

				protocol = params.get('protocol', False)
				host = self.client_address[0]
				port = params.get('port', False)
				uuid = self.headers.get('X-Plex-Client-Identifier', "")
				commandID = params.get('commandID', 0)

				printl("host: " + str(host), self, "D")
				printl("protocol: " + str(protocol), self, "D")
				printl("port: " + str(port), self, "D")
				printl("uuid: " + str(uuid), self, "D")
				printl("commandID: " + str(commandID), self, "D")

				data = {"command": "addSubscriber", "protocol": protocol, "host": host, "port": port, "uuid": uuid, "commandID": commandID}
				#subMgr.addSubscriber(protocol, host, port, uuid, commandID)
				self.playerCallback(data)
				self.resetCallback()

			elif "player/timeline/unsubscribe" in request_path:
				self.response(getOKMsg(), getPlexHeaders())
				uuid = self.headers.get('X-Plex-Client-Identifier', False) or self.client_address[0]
				data = {"command": "removeSubscriber", "uuid": uuid}
				#subMgr.removeSubscriber(uuid)
				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "resources":
				responseContent = getXMLHeader()
				responseContent += str(self.getResourceXml())
				self.response(responseContent, getPlexHeaders())

			elif request_path == "player/timeline/poll":
				commandID = params.get('commandID', 0)
				self.subMgr = SubscriptionManager()
				try:
					e2params = self.session.current_dialog.getPlayerState()
					if e2params:
						self.subMgr.progressFromEnigma2 = e2params['progress']
						self.subMgr.playerStateFromEnigma2 = e2params["state"]
						self.subMgr.durationFromEnigma2 = e2params["duration"]
						self.subMgr.lastkey = e2params["lastKey"]

					self.answerPoll(commandID)
					sleep(1)
				except:
					print "no params"
					self.answerPoll(commandID)
					sleep(1)

			elif request_path == "player/playback/setParameters":
				volume = params["volume"]
				data = {"command": "setVolume", "volume": volume}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/pause":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "pause"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/play":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "play"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/stop":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "stop"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/skipNext":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "skipNext"}
				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/skipPrevious":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "skipPrevious"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/stepForward":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "stepForward"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/stepBack":
				self.response(getOKMsg(), getPlexHeaders())
				data = {"command": "stepBack"}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/seekTo":
				self.response(getOKMsg(), getPlexHeaders())
				offset =  params["offset"]
				data = {"command": "seekTo", "offset": offset}

				self.playerCallback(data)
				self.resetCallback()

			elif request_path == "player/playback/playMedia":
				self.response(getOKMsg(), getPlexHeaders())

				self.currentAddress = params.get('address', self.client_address[0])
				self.currentKey = params['key']
				self.currentPort = params['port']
				self.currentProtocol = params.get('protocol', "http")
				self.currentCompleteAddress = self.currentAddress + ":" + self.currentPort

				if "offset" in params:
					offset = int(params["offset"])
				else:
					offset = 0

				machineIdentifier = params["machineIdentifier"]
				printl("target machineIdentifier: " + str(machineIdentifier), self, "D")

				for serverConfig in config.plugins.dreamplex.Entries:
					printl("current machineIdentifier: " + str(serverConfig.machineIdentifier.value), self, "D")

					if machineIdentifier in serverConfig.machineIdentifier.value:

						printl("we have a match ...", self, "D")
						self.g_serverConfig = serverConfig

						self.plexInstance = Singleton().getPlexInstance(PlexLibrary(self.session, self.g_serverConfig, self.currentCompleteAddress, machineIdentifier))

						listViewList, mediaContainer = self.plexInstance.getMixedContentFromSection(self.currentProtocol + "://" + self.currentAddress + ":" + self.currentPort + self.currentKey, fromRemotePlayer=True)

						autoPlayMode = False

						if offset > 0:
							forceResume = True
						else:
							forceResume = False

						resumeMode = False # this is always false because the ios and android app ask itself if we want to resume :-) no need to ask second time

						playbackMode = self.g_serverConfig.playbackType.value
						currentIndex = 0
						libraryName = "Mixed"
						splittedData = self.currentKey.split("/")
						subtitleData = self.plexInstance.getSelectedSubtitleDataById(self.currentCompleteAddress, splittedData[-1])

						data = {"command": "playMedia", "currentKey": self.currentKey, "listViewList": listViewList, "mediaContainer": mediaContainer, "autoPlayMode": autoPlayMode, "forceResume":  forceResume, "resumeMode": resumeMode, "playbackMode": playbackMode, "currentIndex": currentIndex, "libraryName": libraryName, "subtitleData": subtitleData }

						self.playerCallback(data)
						self.resetCallback()

					else:
						printl("no match ...", self, "D")

			else:
				self.response(getOKMsg(), getPlexHeaders())
		except:
				traceback.print_exc()
				self.wfile.close()

				printl("", self, "C")
				return
		try:
			self.wfile.close()
		except:
			pass

		printl("", self, "C")
Beispiel #4
0
    def answer_request(self):
        printl("", self, "S")

        try:
            request_path = self.path[1:]
            request_path = re.sub(r"\?.*", "", request_path)

            printl("request path is: [%s]" % request_path, self, "D")

            # first we get all params form url
            params = self.getParams()

            data = {
                "command":
                "updateCommandId",
                "uuid":
                self.headers.get('X-Plex-Client-Identifier',
                                 self.client_address[0]),
                "commandID":
                params.get('commandID', False)
            }
            self.playerCallback(data)
            self.resetCallback()

            if request_path == "player/timeline/subscribe":
                self.response(getOKMsg(), getPlexHeaders())

                protocol = params.get('protocol', False)
                host = self.client_address[0]
                port = params.get('port', False)
                uuid = self.headers.get('X-Plex-Client-Identifier', "")
                commandID = params.get('commandID', 0)

                printl("host: " + str(host), self, "D")
                printl("protocol: " + str(protocol), self, "D")
                printl("port: " + str(port), self, "D")
                printl("uuid: " + str(uuid), self, "D")
                printl("commandID: " + str(commandID), self, "D")

                data = {
                    "command": "addSubscriber",
                    "protocol": protocol,
                    "host": host,
                    "port": port,
                    "uuid": uuid,
                    "commandID": commandID
                }
                #subMgr.addSubscriber(protocol, host, port, uuid, commandID)
                self.playerCallback(data)
                self.resetCallback()

            elif "player/timeline/unsubscribe" in request_path:
                self.response(getOKMsg(), getPlexHeaders())
                uuid = self.headers.get('X-Plex-Client-Identifier',
                                        False) or self.client_address[0]
                data = {"command": "removeSubscriber", "uuid": uuid}
                #subMgr.removeSubscriber(uuid)
                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "resources":
                responseContent = getXMLHeader()
                responseContent += str(self.getResourceXml())
                self.response(responseContent, getPlexHeaders())

            elif request_path == "player/timeline/poll":
                commandID = params.get('commandID', 0)
                self.subMgr = SubscriptionManager()
                try:
                    e2params = self.session.current_dialog.getPlayerState()
                    if e2params:
                        self.subMgr.progressFromEnigma2 = e2params['progress']
                        self.subMgr.playerStateFromEnigma2 = e2params["state"]
                        self.subMgr.durationFromEnigma2 = e2params["duration"]
                        self.subMgr.lastkey = e2params["lastKey"]

                    self.answerPoll(commandID)
                    sleep(1)
                except:
                    print "no params"
                    self.answerPoll(commandID)
                    sleep(1)

            elif request_path == "player/playback/setParameters":
                volume = params["volume"]
                data = {"command": "setVolume", "volume": volume}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/pause":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "pause"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/play":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "play"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/stop":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "stop"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/skipNext":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "skipNext"}
                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/skipPrevious":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "skipPrevious"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/stepForward":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "stepForward"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/stepBack":
                self.response(getOKMsg(), getPlexHeaders())
                data = {"command": "stepBack"}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/seekTo":
                self.response(getOKMsg(), getPlexHeaders())
                offset = params["offset"]
                data = {"command": "seekTo", "offset": offset}

                self.playerCallback(data)
                self.resetCallback()

            elif request_path == "player/playback/playMedia":
                self.response(getOKMsg(), getPlexHeaders())

                self.currentAddress = params.get('address',
                                                 self.client_address[0])
                self.currentKey = params['key']
                self.currentPort = params['port']
                self.currentProtocol = params.get('protocol', "http")
                self.currentCompleteAddress = self.currentAddress + ":" + self.currentPort

                if "offset" in params:
                    offset = int(params["offset"])
                else:
                    offset = 0

                machineIdentifier = params["machineIdentifier"]
                printl("target machineIdentifier: " + str(machineIdentifier),
                       self, "D")

                for serverConfig in config.plugins.dreamplex.Entries:
                    printl(
                        "current machineIdentifier: " +
                        str(serverConfig.machineIdentifier.value), self, "D")

                    if machineIdentifier in serverConfig.machineIdentifier.value:

                        printl("we have a match ...", self, "D")
                        self.g_serverConfig = serverConfig

                        self.plexInstance = Singleton().getPlexInstance(
                            PlexLibrary(self.session, self.g_serverConfig,
                                        self.currentCompleteAddress,
                                        machineIdentifier))

                        listViewList, mediaContainer = self.plexInstance.getMixedContentFromSection(
                            self.currentProtocol + "://" +
                            self.currentAddress + ":" + self.currentPort +
                            self.currentKey,
                            fromRemotePlayer=True)

                        autoPlayMode = False

                        if offset > 0:
                            forceResume = True
                        else:
                            forceResume = False

                        resumeMode = False  # this is always false because the ios and android app ask itself if we want to resume :-) no need to ask second time

                        playbackMode = self.g_serverConfig.playbackType.value
                        currentIndex = 0
                        libraryName = "Mixed"
                        splittedData = self.currentKey.split("/")
                        subtitleData = self.plexInstance.getSelectedSubtitleDataById(
                            self.currentCompleteAddress, splittedData[-1])

                        data = {
                            "command": "playMedia",
                            "currentKey": self.currentKey,
                            "listViewList": listViewList,
                            "mediaContainer": mediaContainer,
                            "autoPlayMode": autoPlayMode,
                            "forceResume": forceResume,
                            "resumeMode": resumeMode,
                            "playbackMode": playbackMode,
                            "currentIndex": currentIndex,
                            "libraryName": libraryName,
                            "subtitleData": subtitleData
                        }

                        self.playerCallback(data)
                        self.resetCallback()

                    else:
                        printl("no match ...", self, "D")

            else:
                self.response(getOKMsg(), getPlexHeaders())
        except:
            traceback.print_exc()
            self.wfile.close()

            printl("", self, "C")
            return
        try:
            self.wfile.close()
        except:
            pass

        printl("", self, "C")