def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] # If you are running 8.3 software you want to enable hack83 # in the config file if config.getHack83(): print '=' * 73 query, hackPath = self.hack(handler, query, subcname) hackPath = '/'.join(hackPath) print 'Tivo said:', subcname, '|| Hack said:', hackPath debug_write(__name__, fn_attr(), ['Tivo said: ', subcname, ' || Hack said: ', hackPath]) subcname = hackPath if not query: debug_write(__name__, fn_attr(), ['sending 302 redirect page']) handler.send_response(302) handler.send_header('Location ', 'http://' + handler.headers.getheader('host') + '/TiVoConnect?Command=QueryContainer&' + 'AnchorItem=Hack8.3&Container=' + hackPath) handler.end_headers() return # End hack mess cname = subcname.split('/')[0] if not handler.server.containers.has_key(cname) or \ not self.get_local_path(handler, query): handler.send_response(404) handler.end_headers() return container = handler.server.containers[cname] precache = container.get('precache', 'False').lower() == 'true' files, total, start = self.get_files(handler, query, self.video_file_filter) videos = [] local_base_path = self.get_local_base_path(handler, query) for file in files: mtime = datetime.fromtimestamp(os.stat(file).st_mtime) video = VideoDetails() video['captureDate'] = hex(int(time.mktime(mtime.timetuple()))) video['name'] = os.path.split(file)[1] video['path'] = file video['part_path'] = file.replace(local_base_path, '', 1) video['title'] = os.path.split(file)[1] video['is_dir'] = self.__isdir(file) if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(file) else: if precache or len(files) == 1 or file in transcode.info_cache: video['valid'] = transcode.supported_format(file) if video['valid']: video.update(self.__metadata_full(file, tsn)) else: video['valid'] = True video.update(self.__metadata_basic(file)) videos.append(video) handler.send_response(200) handler.end_headers() t = Template(file=os.path.join(SCRIPTDIR,'templates', 'container.tmpl')) t.container = cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = handler.tivos handler.wfile.write(t)
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] useragent = handler.headers.getheader('User-Agent', '') if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container force_alpha = container.getboolean('force_alpha') use_html = query.get('Format', [''])[0].lower() == 'text/html' files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = int(time.time()) ltime = time.localtime(mtime) video['captureDate'] = hex(mtime) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.basename(f.name) video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.basename(f.name) video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if len(files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update(self.metadata_full(f.name, tsn)) if len(files) == 1: video['captureDate'] = hex(isogm(video['time'])) else: video['valid'] = True video.update(metadata.basic(f.name)) if self.use_ts(tsn, f.name): video['mime'] = 'video/x-tivo-mpeg-ts' else: video['mime'] = 'video/x-tivo-mpeg' video['textSize'] = metadata.human_size(f.size) videos.append(video) logger.debug('mobileagent: %d useragent: %s' % (useragent.lower().find('mobile'), useragent.lower())) use_mobile = useragent.lower().find('mobile') > 0 if use_html: if use_mobile: t = Template(HTML_CONTAINER_TEMPLATE_MOBILE, filter=EncodeUnicode) else: t = Template(HTML_CONTAINER_TEMPLATE, filter=EncodeUnicode) else: t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos t.tivo_names = config.tivo_names if use_html: handler.send_html(str(t)) else: handler.send_xml(str(t))
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] cname = subcname.split('/')[0] if (not cname in handler.server.containers or not self.get_local_path(handler, query)): handler.send_error(404) return container = handler.server.containers[cname] precache = container.get('precache', 'False').lower() == 'true' force_alpha = container.get('force_alpha', 'False').lower() == 'true' files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = int(time.time()) ltime = time.localtime(mtime) video['captureDate'] = hex(mtime) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.split(f.name)[1] video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.split(f.name)[1] video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if precache or len(files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update(self.metadata_full(f.name, tsn)) else: video['valid'] = True video.update(metadata.basic(f.name)) video['textSize'] = ( '%.3f GB' % (float(f.size) / (1024 ** 3)) ) videos.append(video) t = Template(CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos t.tivo_names = config.tivo_names handler.send_response(200) handler.send_header('Content-Type', 'text/xml') handler.send_header('Expires', '0') handler.end_headers() handler.wfile.write(t)
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container force_alpha = container.getboolean('force_alpha') ar = container.get('allow_recurse', 'auto').lower() if ar == 'auto': allow_recurse = not tsn or tsn[0] < '7' else: allow_recurse = ar in ('1', 'yes', 'true', 'on') files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha, allow_recurse) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = time.time() ltime = time.localtime(mtime) video['captureDate'] = hex(int(mtime)) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.basename(f.name) video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.basename(f.name) video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if len(files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update(self.metadata_full(f.name, tsn, mtime=mtime)) if len(files) == 1: video['captureDate'] = hex(isogm(video['time'])) else: video['valid'] = True video.update(metadata.basic(f.name, mtime)) if self.use_ts(tsn, f.name): video['mime'] = 'video/x-tivo-mpeg-ts' else: video['mime'] = 'video/x-tivo-mpeg' video['textSize'] = metadata.human_size(f.size) videos.append(video) t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos handler.send_xml(str(t))
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container force_alpha = container.getboolean('force_alpha') ar = container.get('allow_recurse', 'auto').lower() if ar == 'auto': allow_recurse = not tsn or tsn[0] < '7' else: allow_recurse = ar in ('1', 'yes', 'true', 'on') files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha, allow_recurse) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = time.time() ltime = time.localtime(mtime) video['captureDate'] = hex(int(mtime)) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.basename(f.name) video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.basename(f.name) video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if len(files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update( self.metadata_full(f.name, tsn, mtime=mtime)) if len(files) == 1: video['captureDate'] = hex(isogm(video['time'])) else: video['valid'] = True video.update(metadata.basic(f.name, mtime)) if self.use_ts(tsn, f.name): video['mime'] = 'video/x-tivo-mpeg-ts' else: video['mime'] = 'video/x-tivo-mpeg' video['textSize'] = metadata.human_size(f.size) videos.append(video) t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos handler.send_xml(str(t))
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container precache = container.get('precache', 'False').lower() == 'true' force_alpha = container.get('force_alpha', 'False').lower() == 'true' use_html = query.get('Format', [''])[0].lower() == 'text/html' files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = int(time.time()) ltime = time.localtime(mtime) video['captureDate'] = hex(mtime) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.basename(f.name) video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.basename(f.name) video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if precache or len( files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update(self.metadata_full(f.name, tsn)) if len(files) == 1: video['captureDate'] = hex(isogm(video['time'])) else: video['valid'] = True video.update(metadata.basic(f.name)) if config.hasTStivo(tsn): video['mime'] = 'video/x-tivo-mpeg-ts' else: video['mime'] = 'video/x-tivo-mpeg' video['textSize'] = ('%.3f GB' % (float(f.size) / (1024**3))) videos.append(video) if use_html: t = Template(HTML_CONTAINER_TEMPLATE, filter=EncodeUnicode) else: t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos t.tivo_names = config.tivo_names if use_html: handler.send_html(str(t)) else: handler.send_xml(str(t))
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container force_alpha = container.getboolean('force_alpha') ar = container.get('allow_recurse', 'auto').lower() if ar == 'auto': allow_recurse = not tsn or tsn[0] < '7' else: allow_recurse = ar in ('1', 'yes', 'true', 'on') use_html = query.get('Format', [''])[0].lower() == 'text/html' files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha, allow_recurse) videos = [] local_base_path = self.get_local_base_path(handler, query) resort = False for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning('Bad file time on ' + unicode(f.name, 'utf-8')) mtime = time.time() ltime = time.localtime(mtime) video['captureDate'] = hex(int(mtime)) video['textDate'] = time.strftime('%b %d, %Y', ltime) video['name'] = os.path.basename(f.name) video['path'] = f.name video['part_path'] = f.name.replace(local_base_path, '', 1) if not video['part_path'].startswith(os.path.sep): video['part_path'] = os.path.sep + video['part_path'] video['title'] = os.path.basename(f.name) video['is_dir'] = f.isdir if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(f.name) else: if len(files) == 1 or f.name in transcode.info_cache: video['valid'] = transcode.supported_format(f.name) if video['valid']: video.update(self.metadata_full(f.name, tsn, mtime=mtime)) if len(files) == 1: video['captureDate'] = hex(isogm(video['time'])) else: video['valid'] = True video.update(metadata.basic(f.name, mtime)) if 'time' in video and video['time'] != '': if video['time'].lower() == 'oad': video['time'] = video['originalAirDate'] resort = True try: video['captureDate'] = hex(isogm(video['time'])) video['textDate'] = time.strftime('%b %d, %Y', time.localtime(isogm(video['time']))) resort = True except: logger.warning('Bad time format: "' + video['time'] + '", using current time') if self.use_ts(tsn, f.name): video['mime'] = 'video/x-tivo-mpeg-ts' else: video['mime'] = 'video/x-tivo-mpeg' video['textSize'] = metadata.human_size(f.size) videos.append(video) if use_html: t = Template(HTML_CONTAINER_TEMPLATE, filter=EncodeUnicode) else: t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) sortby = query.get('SortOrder', ['Normal'])[0].lower() t.sortby = sortby if use_html and resort: if sortby == 'capturedate': logger.info('re-sorting by captureDate, reverse=True') videos.sort(key=itemgetter('captureDate'), reverse=True) elif sortby == '!capturedate': logger.info('re-sorting by captureDate, reverse=False') videos.sort(key=itemgetter('captureDate'), reverse=False) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos if use_html: handler.send_html(str(t)) else: handler.send_xml(str(t))
def QueryContainer(self, handler, query): tsn = handler.headers.getheader('tsn', '') subcname = query['Container'][0] # If you are running 8.3 software you want to enable hack83 # in the config file if config.getHack83(): print '=' * 73 query, hackPath = self.hack(handler, query, subcname) hackPath = '/'.join(hackPath) print 'Tivo said:', subcname, '|| Hack said:', hackPath debug_write(__name__, fn_attr(), ['Tivo said: ', subcname, ' || Hack said: ', hackPath]) subcname = hackPath if not query: debug_write(__name__, fn_attr(), ['sending 302 redirect page']) handler.send_response(302) handler.send_header( 'Location ', 'http://' + handler.headers.getheader('host') + '/TiVoConnect?Command=QueryContainer&' + 'AnchorItem=Hack8.3&Container=' + hackPath) handler.end_headers() return # End hack mess cname = subcname.split('/')[0] if not handler.server.containers.has_key(cname) or \ not self.get_local_path(handler, query): handler.send_response(404) handler.end_headers() return container = handler.server.containers[cname] precache = container.get('precache', 'False').lower() == 'true' files, total, start = self.get_files(handler, query, self.video_file_filter) videos = [] local_base_path = self.get_local_base_path(handler, query) for file in files: mtime = datetime.fromtimestamp(os.stat(file).st_mtime) video = VideoDetails() video['captureDate'] = hex(int(time.mktime(mtime.timetuple()))) video['name'] = os.path.split(file)[1] video['path'] = file video['part_path'] = file.replace(local_base_path, '', 1) video['title'] = os.path.split(file)[1] video['is_dir'] = self.__isdir(file) if video['is_dir']: video['small_path'] = subcname + '/' + video['name'] video['total_items'] = self.__total_items(file) else: if precache or len(files) == 1 or file in transcode.info_cache: video['valid'] = transcode.supported_format(file) if video['valid']: video.update(self.__metadata_full(file, tsn)) else: video['valid'] = True video.update(self.__metadata_basic(file)) videos.append(video) handler.send_response(200) handler.end_headers() t = Template( file=os.path.join(SCRIPTDIR, 'templates', 'container.tmpl')) t.container = cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = handler.tivos handler.wfile.write(t)
def QueryContainer(self, handler, query): tsn = handler.headers.getheader("tsn", "") subcname = query["Container"][0] if not self.get_local_path(handler, query): handler.send_error(404) return container = handler.container force_alpha = container.get("force_alpha", "False").lower() == "true" use_html = query.get("Format", [""])[0].lower() == "text/html" files, total, start = self.get_files(handler, query, self.video_file_filter, force_alpha) videos = [] local_base_path = self.get_local_base_path(handler, query) for f in files: video = VideoDetails() mtime = f.mdate try: ltime = time.localtime(mtime) except: logger.warning("Bad file time on " + unicode(f.name, "utf-8")) mtime = int(time.time()) ltime = time.localtime(mtime) video["captureDate"] = hex(mtime) video["textDate"] = time.strftime("%b %d, %Y", ltime) video["name"] = os.path.basename(f.name) video["path"] = f.name video["part_path"] = f.name.replace(local_base_path, "", 1) if not video["part_path"].startswith(os.path.sep): video["part_path"] = os.path.sep + video["part_path"] video["title"] = os.path.basename(f.name) video["is_dir"] = f.isdir if video["is_dir"]: video["small_path"] = subcname + "/" + video["name"] video["total_items"] = self.__total_items(f.name) else: if len(files) == 1 or f.name in transcode.info_cache: video["valid"] = transcode.supported_format(f.name) if video["valid"]: video.update(self.metadata_full(f.name, tsn)) if len(files) == 1: video["captureDate"] = hex(isogm(video["time"])) else: video["valid"] = True video.update(metadata.basic(f.name)) if self.use_ts(tsn, f.name): video["mime"] = "video/x-tivo-mpeg-ts" else: video["mime"] = "video/x-tivo-mpeg" video["textSize"] = "%.3f GB" % (float(f.size) / (1024 ** 3)) videos.append(video) if use_html: t = Template(HTML_CONTAINER_TEMPLATE, filter=EncodeUnicode) else: t = Template(XML_CONTAINER_TEMPLATE, filter=EncodeUnicode) t.container = handler.cname t.name = subcname t.total = total t.start = start t.videos = videos t.quote = quote t.escape = escape t.crc = zlib.crc32 t.guid = config.getGUID() t.tivos = config.tivos t.tivo_names = config.tivo_names if use_html: handler.send_html(str(t)) else: handler.send_xml(str(t))