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)  | 
