Пример #1
0
    def do_GET(self):
        try:
            if self.client_address[0] == Settings.getIP_aTV():

                # serve "application.js" to aTV
                # disregard the path - it is different for different iOS versions
                if self.path.endswith("application.js"):
                    dprint(__name__, 1, "serving application.js")
                    f = open(curdir + sep + "assets" + sep + "application.js")
                    self.send_response(200)
                    self.send_header('Content-type', 'text/html')
                    self.end_headers()
                    self.wfile.write(f.read())
                    f.close()
                    return

                # serve "plexconnect.xml" to aTV
                if self.path.endswith("plexconnect.xml"):
                    fVer = self.headers['X-Apple-TV-Version'].split(
                        ".", 2)  # firmware version number
                    firmVersion = fVer[0] + "." + fVer[1]
                    dprint(__name__, 1, "aTV firmware: " + firmVersion)
                    if eval(firmVersion) >= 5.1:
                        dprint(__name__, 1, "serving plexconnect.xml")
                        f = open(curdir + sep + "assets" + sep +
                                 "plexconnect.xml"
                                 )  # Version 5.1 or above use top menu bar
                    else:
                        dprint(__name__, 1, "serving plexconnect_oldmenu.xml")
                        f = open(
                            curdir + sep + "assets" + sep +
                            "plexconnect_oldmenu.xml"
                        )  # Versions 5.0.2 or lower don't use top menu bar
                    self.send_response(200)
                    self.send_header('Content-type', 'text/html')
                    self.end_headers()
                    self.wfile.write(f.read())
                    f.close()
                    return

                # serve "*.jpg" - thumbnails for old-style mainpage
                if self.path.endswith(".jpg"):
                    dprint(__name__, 1, "serving *.jpg: " + self.path)
                    f = open(curdir + sep + "assets" + self.path, "rb")
                    self.send_response(200)
                    self.send_header('Content-type', 'image/jpeg')
                    self.end_headers()
                    self.wfile.write(f.read())
                    f.close()
                    return

                # serve Plex directory structure - make sure to keep the trailing "/"
                if self.path.endswith("/"):
                    dprint(__name__, 1, "serving .xml: " + self.path)
                    XML = XMLConverter.XML_PMS2aTV(self.client_address,
                                                   self.path)
                    self.send_response(200)
                    self.send_header('Content-type', 'text/html')
                    self.end_headers()
                    self.wfile.write(XML)
                    return

                # serve Plex media
                if self.path.endswith("&PlexConnect=Play"):
                    dprint(__name__, 1, "serving media: " + self.path)
                    XML = XMLConverter.XML_PlayVideo(
                        self.client_address,
                        self.path[:-len('&PlexConnect=Play')])
                    self.send_response(200)
                    self.send_header('Content-type', 'text/html')
                    self.end_headers()
                    self.wfile.write(XML)
                    return

                # unexpected request
                self.send_error(403, "Access denied: %s" % self.path)

            else:
                self.send_error(
                    403, "Not Serving Client %s" % self.client_address[0])
        except IOError:
            self.send_error(404, "File Not Found: %s" % self.path)