[svn] Conversion of bestofimms to imms.py.
--- a/bestofimms Sun Feb 08 16:55:24 2004 -0500
+++ b/bestofimms Sun Feb 08 17:27:21 2004 -0500
@@ -1,13 +1,12 @@
#!/usr/bin/python
-import sqlite
+import imms
from htmltmpl import TemplateManager, TemplateProcessor
import os
import ID3
from sys import stderr
from ogg.vorbis import VorbisFile
-_imms_db = os.environ['HOME'] + '/.imms/imms.db'
_template = __file__ + '.tmpl'
def rating_to_color(rating):
@@ -26,17 +25,27 @@
blue = (i-50) * 255 / 25
return "#%02X%02X%02X" % (red, green, blue)
+def sort_rating(x, y):
+ return x['rating']-y['rating']
+
def grab_tunes():
- sql = sqlite.connect(_imms_db, autocommit = 1)
- cu = sql.cursor()
- cu.execute(''' SELECT r.rating, l.path
- FROM Library l, Rating r
- WHERE r.uid = l.uid AND r.rating >= 125
- ORDER BY r.rating DESC;''')
- return map(lambda x: {
- 'rating' : x[0],
- 'path': x[1]},
- cu.fetchall() )
+ db = imms.IMMSDb()
+ rates = db.get_ratings(125)
+ uids = map(lambda x: x[0], rates)
+ files = db.get_paths(uids)
+ d = {}
+ for fn in files:
+ d[fn[0]] = fn[2]
+ res = []
+ for rate in rates:
+ try:
+ t = { 'rating': rate[1],
+ 'path' : d[rate[0]] }
+ res.append(t)
+ except KeyError:
+ pass
+ res.sort(lambda x, y: -sort_rating(x, y))
+ return res
def check_tunes(tunes):
res = []
--- a/imms.py Sun Feb 08 16:55:24 2004 -0500
+++ b/imms.py Sun Feb 08 17:27:21 2004 -0500
@@ -12,7 +12,7 @@
self.cx = sqlite.connect(dbname, autocommit = 1,
timeout = 2, encoding = ('utf-8', 'replace'))
self.cu = self.cx.cursor()
- def get_library_entries(self, **kw):
+ def get_library_entry(self):
qry = "SELECT path, uid, sid FROM Library";
first = 1
for key in kw.keys():
@@ -51,13 +51,33 @@
def erase_path(self, path):
self.cu.execute("DELETE FROM Library WHERE path = '%s';" \
% quote_sql(path))
- def get_ratings(self, min = 0, max = 250):
+ def get_paths(self, uids = None, sids = None):
+ qry = "SELECT uid, sid, path FROM Library"
+ first = 1
+ for uid in uids:
+ if first:
+ qry += ' WHERE'
+ first = 0
+ else:
+ qry += ' OR'
+ qry += " uid = %d" % uid
+ for uid in uids:
+ if first:
+ qry += ' WHERE'
+ first = 0
+ else:
+ qry += ' OR'
+ qry += " sid = %d" % uid
+ qry += ';'
+ self.cu.execute(qry)
+ return self.cu.fetchall()
+ def get_ratings(self, min = 0, max = 150):
self.cu.execute('''SELECT Rating.uid, Rating.rating
FROM Rating
WHERE Rating.rating >= %d
AND Rating.rating <= %d
ORDER BY Rating.rating;''' % (min, max))
- return cu.fetchall()
+ return self.cu.fetchall()
def get_acoustics(self, uids = None):
qry = "SELECT uid, bpm. spectrum FROM Acoustic"
first = 1
@@ -70,7 +90,7 @@
qry += " uid = %d" % uid
qry += ';'
self.cu.execute(qry)
- return cu.fetchall()
+ return self.cu.fetchall()
def get_infos(self, sids = None):
qry = "SELECT sid, artist, title FROM Infos"
first = 1
@@ -83,7 +103,7 @@
qry += " sid = %d" % id
qry += ';'
self.cu.execute(qry)
- return cu.fetchall()
+ return self.cu.fetchall()
def get_last(self, sids = None):
qry = "SELECT sid, last FROM Last"
first = 1
@@ -96,26 +116,25 @@
qry += " sid = %d" % id
qry += ';'
self.cu.execute(qry)
- return cu.fetchall()
+ return self.cu.fetchall()
def get_uid_by_path(self, path):
entries = self.get_library_entries(path = path)
return map(lambda x: x[1], entries)
def get_ratings_and_info(self, uids = None):
- cu = self.cx.cursor()
qry = '''SELECT l.uid, r.rating, l.path, ls.last
- FROM Library l, Rating r, Last ls
- WHERE l.uid = r.uid AND l.sid = ls.sid'''
+ FROM Library l, Rating r, Last ls
+ WHERE l.uid = r.uid AND l.sid = ls.sid'''
if uids:
qry += ' AND (l.uid = %d' % (uids.pop())
for uid in uids:
qry += ' OR l.uid = %d' % uid
qry += ')'
qry += ';'
- cu.execute(qry)
+ self.cu.execute(qry)
# Better to fetch everything since locking can really mess
# things in imms plugin.
results = {}
- tune = cu.fetchone()
+ tune = self.cu.fetchone()
while tune:
try:
uid = int(tune[0])
@@ -129,5 +148,5 @@
'last' : int(tune[3])}
except UnicodeDecodeError:
print tune[2]
- tune = cu.fetchone()
+ tune = self.cu.fetchone()
return results