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