]> code.delx.au - webdl/blobdiff - autograbber.py
Fixed unicode support
[webdl] / autograbber.py
index 9433d4ad2b1e61e442822a2f69dfd2eed9870e5d..c8c86b8583599fa65c037884b0f86dce7c8e9f79 100755 (executable)
@@ -7,20 +7,26 @@ import sys
 
 class DownloadList(object):
        def __init__(self, filename):
-               self.f = open(filename, "a+")
                self.seen_list = set()
-               for line in self.f:
-                       self.seen_list.add(line.strip())
+               try:
+                       self.f = open(filename, "r")
+                       for line in self.f:
+                               self.seen_list.add(line.decode("utf-8").strip())
+                       self.f.close()
+               except Exception, e:
+                       print >>sys.stderr, "Could not open:", filename, e
+               self.f = open(filename, "a")
        
        def has_seen(self, node):
                return node.title in self.seen_list
        
        def mark_seen(self, node):
                self.seen_list.add(node.title)
-               self.f.write(node.title + "\n")
+               self.f.write(node.title.encode("utf-8") + "\n")
+               self.f.flush()
 
 
-def match(download_list, node, pattern):
+def match(download_list, node, pattern, count=0):
        if node.can_download:
                if not download_list.has_seen(node):
                        if node.download():
@@ -29,10 +35,13 @@ def match(download_list, node, pattern):
                                print >>sys.stderr, "Failed to download!", node.title
                return
 
-       p = pattern[0]
-       for child in node.children:
+       if count >= len(pattern):
+               print "No match found for pattern:", "/".join(pattern)
+               return
+       p = pattern[count]
+       for child in node.get_children():
                if fnmatch.fnmatch(child.title, p):
-                       match(download_list, child, pattern[1:])
+                       match(download_list, child, pattern, count+1)
 
 
 def main():