summaryrefslogtreecommitdiff
path: root/anidb.py
diff options
context:
space:
mode:
Diffstat (limited to 'anidb.py')
-rw-r--r--anidb.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/anidb.py b/anidb.py
new file mode 100644
index 0000000..62258c9
--- /dev/null
+++ b/anidb.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+import pyanidb, pyanidb.hash
+import ConfigParser, optparse, os, sys, getpass, multihash
+
+# Config.
+
+config = {}
+try:
+ cp = ConfigParser.ConfigParser()
+ cp.read(os.path.expanduser('~/.pyanidb.conf'))
+ for option in cp.options('pyanidb'):
+ config[option] = cp.get('pyanidb', option)
+except:
+ pass
+
+# Options.
+
+op = optparse.OptionParser()
+
+op.add_option('-u', '--username', help = 'AniDB username.',
+ action = 'store', dest = 'username', default = config.get('username'))
+op.add_option('-p', '--password', help = 'AniDB password.',
+ action = 'store', dest = 'password', default = config.get('password'))
+
+op.add_option('-r', '--recursive', help = 'Recurse into directories.',
+ action = 'store_true', dest = 'recursive', default = False)
+op.add_option('-s', '--suffix', help = 'File suffix for recursive matching.',
+ action = 'append', dest = 'suffix', default = config['suffix'].split())
+
+op.add_option('-a', '--add', help = 'Add files to mylist.',
+ action = 'store_true', dest = 'add', default = False)
+
+options, args = op.parse_args(sys.argv[1:])
+
+# Defaults.
+
+options.login = options.add
+
+# Authorization.
+
+if options.login:
+ if not options.username:
+ options.username = raw_input('Username: ')
+ if not options.password:
+ options.passord = getpass.getpass()
+ a = pyanidb.AniDB(options.username, options.password)
+ try:
+ a.auth()
+ print 'Logged in as user %s.' % (options.username)
+ if a.new_version:
+ print 'New version available.'
+ except pyanidb.AniDBUserError:
+ print 'Invalid username/password.'
+ sys.exit(1)
+ except pyanidb.AniDBTimeout:
+ print 'Connection timed out.'
+ sys.exit(1)
+ except pyanidb.AniDBError, e:
+ print 'Fatal error:', e
+ sys.exit(1)
+
+# Input files.
+
+files = []
+for name in args:
+ if not os.access(name, os.R_OK):
+ print 'Invalid file: %s' % (name)
+ elif os.path.isfile(name):
+ files.append(name)
+ elif os.path.isdir(name):
+ if not options.recursive:
+ print 'Is a directory: %s' % (name)
+ else:
+ for root, subdirs, subfiles in os.walk(name):
+ subdirs.sort()
+ subfiles.sort()
+ files += [os.path.join(root, file) for file in subfiles if sum([file.endswith('.' + suffix) for suffix in options.suffix])]
+
+# Hashing.
+
+for filename, hash in pyanidb.hash.hash_files(files):
+ size = os.path.getsize(filename)
+ print 'Hashed: ed2k://|file|%s|%d|%s|' % (filename, size, hash.ed2k())
+
+ # Adding
+
+ if options.add:
+ try:
+ while 1:
+ try:
+ a.add_hash(size, hash.ed2k())
+ except pyanidb.AniDBTimeout:
+ print 'Connection timed out, retrying.'
+ continue
+ break
+ print 'Added file: %s' % (filename)
+ except pyanidb.AniDBUnknownFile:
+ print 'Unknown file: %s' % (filename)
+
+# Finished.
+
+print 'All operations finished.'