# HG changeset patch # User fabien # Date 1076279241 18000 # Node ID 85c8f5280d48a0f97f55d8148fc1b4121ad3c945 # Parent 13f56bb29b96cc514ef1343bed23e5051dcbb4fd [svn] Conversion of bestofimms to imms.py. diff -r 13f56bb29b96 -r 85c8f5280d48 bestofimms --- 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 = [] diff -r 13f56bb29b96 -r 85c8f5280d48 imms.py --- 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