diff --git a/src/tivomirror/tivomirror b/src/tivomirror/tivomirror index f792d36..090844f 100755 --- a/src/tivomirror/tivomirror +++ b/src/tivomirror/tivomirror @@ -1,6 +1,6 @@ #!/usr/local/bin/python -# $Schlepperbande: src/tivomirror/tivomirror,v 1.53 2014/05/30 20:53:01 stb Exp $ +# $Schlepperbande: src/tivomirror/tivomirror,v 1.54 2014/05/31 11:42:06 stb Exp $ # # Stefans Script, um die Sendungen vom Tivo runterzuladen und in MPEG4 # zu transkodieren. @@ -45,7 +45,7 @@ includes['Castle'] = 1 includes['Cosmos: A Spacetime Odyssey'] = 1 includes['Family Guy'] = 1 includes['Hot in Cleveland'] = 1 -includes['Late Show With David Letterman'] = 1 +#includes['Late Show With David Letterman'] = 1 includes['Louie'] = 1 includes['Mad Men'] = 1 includes['Modern Family'] = 1 @@ -55,10 +55,10 @@ includes['NFL Football'] = 1 includes['Person of Interest'] = 1 includes['Sesame Street'] = 1 includes['The Big Bang Theory'] = 1 -includes['The Colbert Report'] = 1 -includes['The Daily Show With Jon Stewart'] = 1 -includes['The Late Late Show With Craig Ferguson'] = 1 -includes['The Tonight Show Starring Jimmy Fallon'] = 1 +#includes['The Colbert Report'] = 1 +#includes['The Daily Show With Jon Stewart'] = 1 +#includes['The Late Late Show With Craig Ferguson'] = 1 +#includes['The Tonight Show Starring Jimmy Fallon'] = 1 class flushfile(object): @@ -187,22 +187,43 @@ def get_cookie_by_name(cj, name): return [cookie for cookie in cj if cookie.name == name][0] -def gettoc(): +def loadtoc(offset): global session params = { 'Command': 'QueryContainer', 'Container': '/NowPlaying', 'Recurse': 'Yes', - 'ItemCount': '50' + 'ItemCount': '50', + 'AnchorOffset': offset } url = "https://{}/TiVoConnect".format(host) + print " offset %d" % (offset) r = session.get(url, params=params) if r.status_code != 200: r.raise_for_status() return r.text +def gettoc(): + offset = 0 + itemCount = 1 + dom = None + root = None + while itemCount > 0: + dom1 = xml.dom.minidom.parseString(loadtoc(offset)) + if dom == None: + dom = dom1 + root = dom.childNodes.item(0) + else: + for child in dom1.childNodes.item(0).childNodes: + if child.nodeName == "Item": + root.appendChild(child.cloneNode(True)) + itemCount = int(getElementText(dom1.documentElement.childNodes, "ItemCount")) + offset += itemCount + return dom + + def getText(nodelist): rc = "" for node in nodelist: @@ -216,6 +237,12 @@ def getTagText(element, tagname): except IndexError: return "" +def getElementText(nodes, name): + for node in nodes: + if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.nodeName == name: + return getText(node.childNodes) + return None + def getAvail(dir): s = os.statvfs(dir) return s.f_bsize * s.f_bavail @@ -299,9 +326,9 @@ def download_decode(item, mak): print "Problem setting timestamp: ", e -def savetoc(toc): +def savetoc(dom): fd=open("toc.xml", "w") - fd.write(toc) + fd.write(dom.toprettyxml()) fd.close() @@ -379,9 +406,8 @@ def main(): ignoreepisodetitle = True downloaddb = anydbm.open(os.path.expanduser("~") + "/.tivo-downloads", "c") print "*** Getting listing" - toc = gettoc() - savetoc(toc) - dom = xml.dom.minidom.parseString(toc) + dom = gettoc() + savetoc(dom) if len(remainder) == 1: if remainder[0] == "list":