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