diff -r 785c66feccd3 -r a26e907b8022 imms.py --- a/imms.py Sat Apr 03 13:00:44 2004 -0500 +++ b/imms.py Sun Dec 07 16:05:33 2008 -0500 @@ -1,33 +1,34 @@ import os.path from sys import stderr -import sqlite +from pysqlite2 import dbapi2 as sqlite from utils import sql_quote, unique _log = stderr def rating_to_color(rating): - i = rating - 75 + i = rating red = green = blue = 0 if i <= 25: red = 255 green = i * 255 / 25 - elif i <= 50: - red = (50-i) * 255 / 25 + elif i <= 75: + red = (75-i) * 255 / 50 green = 255 else: green = 255 - blue = (i-50) * 255 / 25 + blue = (i-75) * 255 / 25 + print >>stderr,"Rating:",rating,"R:",red,"G:",green,"B:",blue return "#%02x%02x%02x" % (red, green, blue) class IMMSDb: def __init__(self, dbname = None): if not dbname: - dbname = os.environ['HOME'] + '/.imms/imms.db' + dbname = os.environ['HOME'] + '/.imms/imms2.db' # autocommit = 1 disable autocommit! - self.cx = sqlite.connect(dbname, autocommit = 1, timeout = 5) + self.cx = sqlite.connect(dbname, timeout = 5) self.cu = self.cx.cursor() def get_library_entry(self, **kw): - qry = "SELECT path, uid, sid FROM Library"; + qry = "SELECT path, l.uid, l.sid FROM Library l NATURAL INNER JOIN Identify" first = 1 for key in kw.keys(): if first: @@ -36,7 +37,7 @@ else: qry += " AND " if key in ['uid', 'sid']: - qry += "%s = %d" % (key, kw[key]) + qry += "l.%s = %d" % (key, kw[key]) else: qry += "%s = '%s'" % (key, sql_quote(kw[key])) qry += ";" @@ -54,7 +55,7 @@ def erase_uid(self, uid): self.cu.execute("""BEGIN TRANSACTION; DELETE FROM Library WHERE uid = %d; - DELETE FROM Rating WHERE uid = %d; + DELETE FROM Ratings WHERE uid = %d; DELETE FROM Acoustic WHERE uid = %d; COMMIT;""" % (uid, uid, uid)) def erase_sid(self, sid): @@ -87,11 +88,11 @@ 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)) + self.cu.execute('''SELECT Ratings.uid, Ratings.rating + FROM Ratings + WHERE Ratings.rating >= %d + AND Ratings.rating <= %d + ORDER BY Ratings.rating;''' % (min, max)) return self.cu.fetchall() def get_acoustics(self, uids = None): qry = "SELECT uid, bpm, spectrum FROM Acoustic" @@ -151,13 +152,12 @@ res[sid].append(int(uid)) return res def get_ratings_and_paths(self, uids = None): - 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''' + qry = '''SELECT i.uid, rating, path, last + FROM Identify i NATURAL INNER JOIN Ratings NATURAL INNER JOIN Library NATURAL INNER JOIN Last''' if uids: - qry += ' AND (l.uid = %d' % (uids.pop()) + qry += ' WHERE (i.uid = %d' % (uids.pop()) for uid in uids: - qry += ' OR l.uid = %d' % uid + qry += ' OR i.uid = %d' % uid qry += ')' qry += ';' self.cu.execute(qry) @@ -178,7 +178,7 @@ return results def get_ratings_and_infos(self): self.cu.execute('''SELECT r.rating, i.artist, i.title - FROM Library l, Rating r, Info i + FROM Library l, Ratings r, Info i WHERE l.uid = r.uid AND l.sid = i.sid;''') return self.cu.fetchall() def clean_info(self): @@ -190,7 +190,7 @@ WHERE sid NOT IN (SELECT sid FROM Library);""") def clean_rating(self): - self.cu.execute("""DELETE FROM Rating + self.cu.execute("""DELETE FROM Ratings WHERE uid NOT IN (SELECT uid FROM Library);""") def clean_acoustic(self): @@ -267,7 +267,7 @@ map(self.check_uid, unique(deleted_uids)) map(self.check_sid, unique(deleted_sids)) ## def clean_rating(self): -## print >> _log, "Clean Rating" +## print >> _log, "Clean Ratings" ## rates = self.db.get_ratings() ## rates = unique(map(lambda x: x[0], rates)) ## map(self.check_uid, rates)