diff options
author | zyp <zyp@localhost> | 2006-01-26 20:07:15 +0100 |
---|---|---|
committer | zyp <zyp@localhost> | 2006-01-26 20:07:15 +0100 |
commit | 21559e9f4bd58b1504cc0fda7b0dceee0c833862 (patch) | |
tree | 119240a883b5bda7e4c11f60dc39206e87b1e04f /anidb_add.py |
[project @ zyp-20060126190715-557e941315671b81]
[project @ 18]
Moved disccat and pyanidb to the right location.
Added pyqtmpc and ophidia.
Diffstat (limited to 'anidb_add.py')
-rw-r--r-- | anidb_add.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/anidb_add.py b/anidb_add.py new file mode 100644 index 0000000..c2fb1cf --- /dev/null +++ b/anidb_add.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +import ConfigParser, os, sys, thread, time, getpass, anidb, ed2k + +num_threads = 0 + +def hash_file(name): + if not os.access(name, os.R_OK): + print 'Invalid file: %s' % (name) + return + size = os.stat(name).st_size + hash = ed2k.file_hash(name) + print 'Hashed: ed2k://|file|%s|%d|%s|' % (name, size, hash) + return name, size, hash + +def hash_thread(filelist, hashlist): + global num_threads + num_threads += 1 + try: + while filelist: + h = hash_file(filelist.pop(0)) + if h: + hashlist.append(h) + except IndexError: + pass + num_threads -= 1 + +def auth(): + try: + c = ConfigParser.ConfigParser() + c.read(os.path.expanduser('~/.pyanidb.conf')) + username = c.get('auth', 'username') + password = c.get('auth', 'password') + except: + username = raw_input('Username: ') + password = getpass.getpass() + return username, password + +username, password = auth() + +try: + a = anidb.AniDB(username, password) + t = a.ping() + if t: + print 'AniDB is reachable, %.3fs' % (t) + else: + print 'AniDB is unreachable.' + sys.exit(1) + a.auth() + print 'Logged in as user %s.' % (username) + if a.new_version: + print 'New version available.' + + filelist = sys.argv[1:] + hashlist = [] + + thread.start_new_thread(hash_thread, (filelist, hashlist)) + + while hashlist or num_threads or filelist: + if not hashlist: + time.sleep(0.1) + continue + name, size, hash = hashlist.pop(0) + try: + while 1: + try: + a.add_hash(size, hash) + except anidb.AniDBTimeout: + print 'Connection timed out, retrying.' + continue + break + except anidb.AniDBUnknownFile: + print 'Unknown file: %s' % (name) + continue + print 'Added file: %s' % (name) + print 'All operations finished.' +except anidb.AniDBUserError: + print 'Invalid username/password.' + sys.exit(1) +except anidb.AniDBTimeout: + print 'Connection timed out.' + sys.exit(1) +except anidb.AniDBError, e: + print 'Fatal error:', e + sys.exit(1) |