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