X-Git-Url: https://code.delx.au/webdl/blobdiff_plain/3c12b3edc99a13976c445bb6a3667867c39afe07..b6ad3911d2593698d5ed405520aa2cc0e6ce2ea0:/autograbber.py diff --git a/autograbber.py b/autograbber.py index 61e2a5e..61b0673 100755 --- a/autograbber.py +++ b/autograbber.py @@ -1,30 +1,45 @@ -#!/usr/bin/env python +#!/usr/bin/python2 # vim:ts=4:sts=4:sw=4:noet from common import load_root_node import fnmatch +import os import sys +DOWNLOAD_HISTORY_FILES = [ + ".downloaded_auto.txt", + "downloaded_auto.txt", +] + class DownloadList(object): - def __init__(self, filename): - self.f = open(filename, "a+") + def __init__(self): self.seen_list = set() - for line in self.f: - self.seen_list.add(line.strip()) + for filename in DOWNLOAD_HISTORY_FILES: + if os.path.isfile(filename): + break + else: + filename = DOWNLOAD_HISTORY_FILES[0] + 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, count=0): if node.can_download: if not download_list.has_seen(node): - print "Downloading:", node.title if node.download(): download_list.mark_seen(node) else: @@ -35,22 +50,29 @@ def match(download_list, node, pattern, count=0): print "No match found for pattern:", "/".join(pattern) return p = pattern[count] - for child in node.children: + for child in node.get_children(): if fnmatch.fnmatch(child.title, p): match(download_list, child, pattern, count+1) -def main(): +def main(destdir, patternfile): + os.chdir(destdir) node = load_root_node() - download_list = DownloadList("downloaded_auto.txt") + download_list = DownloadList() - for search in sys.argv[1:]: - search = search.split("/") + for line in open(patternfile): + search = line.strip().split("/") match(download_list, node, search) if __name__ == "__main__": try: - main() + destdir = os.path.abspath(sys.argv[1]) + patternfile = os.path.abspath(sys.argv[2]) + except IndexError: + print >>sys.stderr, "Usage: %s destdir patternfile" % sys.argv[0] + sys.exit(1) + try: + main(destdir, patternfile) except (KeyboardInterrupt, EOFError): print "\nExiting..."