equal
  deleted
  inserted
  replaced
  
    
    
|         |      1 #!/usr/bin/python | 
|         |      2  | 
|         |      3 import sqlite | 
|         |      4 from htmltmpl import TemplateManager, TemplateProcessor | 
|         |      5 import os | 
|         |      6 import ID3 | 
|         |      7 from sys import stderr | 
|         |      8 from ogg.vorbis import VorbisFile | 
|         |      9  | 
|         |     10 _imms_db = os.environ['HOME'] + '/.imms/imms.db' | 
|         |     11 _template = __file__ + '.tmpl' | 
|         |     12  | 
|         |     13 def rating_to_color(rating): | 
|         |     14 	i = rating - 75 | 
|         |     15     	if i <= 25: | 
|         |     16        		red = 255 | 
|         |     17 		green = i * 255 / 25 | 
|         |     18 		blue = 0 | 
|         |     19 	elif i <= 50: | 
|         |     20 		red = (50-i) * 255 / 25 | 
|         |     21 		green = 255 | 
|         |     22 		blue = 0 | 
|         |     23 	else: | 
|         |     24 		red = 0 | 
|         |     25 		green = 255 | 
|         |     26 		blue = (i-50) * 255 / 25 | 
|         |     27 	return "#%02X%02X%02X" % (red, green, blue) | 
|         |     28  | 
|         |     29 def grab_tunes(): | 
|         |     30 	sql = sqlite.connect(_imms_db, autocommit = 1) | 
|         |     31 	cu = sql.cursor() | 
|         |     32 	cu.execute(''' SELECT r.rating, l.path | 
|         |     33 		FROM Library l, Rating r | 
|         |     34 		WHERE r.uid = l.uid AND r.rating >= 125 | 
|         |     35 		ORDER BY r.rating DESC;''') | 
|         |     36 	return map(lambda x: { | 
|         |     37 		'rating' : x[0], | 
|         |     38 		'path': x[1]}, | 
|         |     39 		cu.fetchall() ) | 
|         |     40  | 
|         |     41 def check_tunes(tunes): | 
|         |     42 	res = [] | 
|         |     43 	for tune in tunes: | 
|         |     44 		song = tune['path'] | 
|         |     45 		try: | 
|         |     46 			os.stat(song) | 
|         |     47 		except: | 
|         |     48 			continue | 
|         |     49 		tune['color'] = rating_to_color(tune['rating']) | 
|         |     50 		if song[-4:] == '.mp3': | 
|         |     51 			id3 = ID3.ID3(song) | 
|         |     52 			try: | 
|         |     53 				tune['path'] = \ | 
|         |     54 					id3['ARTIST'] + \ | 
|         |     55 					' - ' + id3['TITLE'] | 
|         |     56 			except: | 
|         |     57 				pass | 
|         |     58 		elif song[-4:] == '.ogg': | 
|         |     59 			vf = VorbisFile(song) | 
|         |     60 			vc = vf.comment() | 
|         |     61 			try: | 
|         |     62 				tune['path'] = \ | 
|         |     63 					vc['ARTIST'][0] + \ | 
|         |     64 					u' - ' + vc['TITLE'][0] | 
|         |     65 			except: | 
|         |     66 				pass | 
|         |     67 		res.append(tune) | 
|         |     68 	return res | 
|         |     69  | 
|         |     70  | 
|         |     71 def output_web(): | 
|         |     72 	tproc = TemplateProcessor() | 
|         |     73 	tmpl = TemplateManager().prepare(_template) | 
|         |     74 	tproc.set('Bestof', check_tunes(grab_tunes())) | 
|         |     75 	print tproc.process(tmpl) | 
|         |     76  | 
|         |     77 if __name__ == '__main__': | 
|         |     78 	output_web() |