1#!/usr/bin/env python2
2import sqlite3
3import urlparse
4import urllib
5import os.path
6import datetime
7
8banshee   = sqlite3.connect(os.path.expanduser('~/.config/banshee-1/banshee.db'))
9gogglesmm = sqlite3.connect(os.path.expanduser('~/.local/share/gogglesmm/goggles.db'))
10bc = banshee.cursor()
11gc = gogglesmm.cursor()
12
13bc.execute('SELECT Uri, PlayCount,SkipCount, Rating, Score, LastPlayedStamp FROM CoreTracks')
14for row in bc:
15  rating    = row[3] * 51
16  playcount = row[1]
17  url       = urlparse.urlsplit(row[0])
18  if url.scheme == 'file' and (rating>0 or playcount>0) :
19
20    # Get path and filename
21    path = urllib.unquote(url.path)
22    dir,file = os.path.split(path)
23
24    # Get lastplayed date
25    if row[5]:
26      playdate    = long(row[5])
27      playdate_ns = playdate*1000000000
28    else:
29      playdate    = 0
30      playdate_ns = 0
31
32    # find track in gogglesmm
33    args = (dir,file,)
34    gc.execute('SELECT tracks.id FROM tracks,pathlist WHERE tracks.path == pathlist.id AND pathlist.name = ? AND tracks.mrl = ?',args)
35    id = gc.fetchone()
36
37    # Update track in gogglesmm if found
38    if id:
39      print 'Update playcount %d, rating %d, playdate %s for \'%s/%s\'' % (playcount,row[3],datetime.datetime.fromtimestamp(playdate),dir,file)
40      args = (playcount,rating,playdate_ns,id[0],)
41      gc.execute('UPDATE tracks SET playcount = playcount + ?, rating = ?, playdate = max(playdate,?) WHERE tracks.id == ?',args)
42      gogglesmm.commit()
43    else:
44      print 'Not found in database %s/%s' % (dir,file)
45
46gogglesmm.close();
47banshee.close();
48