diff options
Diffstat (limited to 'anidb_add')
-rw-r--r-- | anidb_add | 73 |
1 files changed, 20 insertions, 53 deletions
@@ -1,40 +1,7 @@ #!/usr/bin/env python -import pyanidb as anidb -import ConfigParser, os, sys, thread, time, getpass, multihash - -num_threads = 0 - -def file_hash(name): - e = multihash.Ed2k() - f = open(name) - data = f.read(32768) - while data: - e.update(data) - data = f.read(32768) - f.close() - return e.digest() - -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 = 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 +import pyanidb, pyanidb.hash +import ConfigParser, os, sys, getpass, multihash def auth(): try: @@ -50,7 +17,7 @@ def auth(): username, password = auth() try: - a = anidb.AniDB(username, password) + a = pyanidb.AniDB(username, password) #t = a.ping() #if t: # print 'AniDB is reachable, %.3fs' % (t) @@ -62,35 +29,35 @@ try: 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) + files = [] + for name in sys.argv[1:]: + if os.access(name, os.R_OK): + files.append(name) + else: + print 'Invalid file: %s' % (name) + for filename, hash in pyanidb.hash.hash_files(files): + hash = hash.ed2k() + size = os.stat(filename).st_size + print 'Hashed: ed2k://|file|%s|%d|%s|' % (filename, size, hash) try: while 1: try: a.add_hash(size, hash) - except anidb.AniDBTimeout: + except pyanidb.AniDBTimeout: print 'Connection timed out, retrying.' continue break - except anidb.AniDBUnknownFile: - print 'Unknown file: %s' % (name) + except pyanidb.AniDBUnknownFile: + print 'Unknown file: %s' % (filename) continue - print 'Added file: %s' % (name) + print 'Added file: %s' % (filename) print 'All operations finished.' -except anidb.AniDBUserError: +except pyanidb.AniDBUserError: print 'Invalid username/password.' sys.exit(1) -except anidb.AniDBTimeout: +except pyanidb.AniDBTimeout: print 'Connection timed out.' sys.exit(1) -except anidb.AniDBError, e: +except pyanidb.AniDBError, e: print 'Fatal error:', e sys.exit(1) |