diff --git a/headphones.py b/headphones.py index 3d37d187..a1491d4a 100755 --- a/headphones.py +++ b/headphones.py @@ -15,7 +15,6 @@ import os FULL_PATH = os.path.dirname(os.path.abspath(__file__)) config_file = os.path.join(FULL_PATH, 'config.ini') -db = os.path.join(FULL_PATH, 'headphones.db') if os.path.exists(config_file): @@ -77,7 +76,7 @@ def serverstart(): #Start threads threadtool(cherrypy.engine).subscribe() - + cherrypy.engine.timeout_monitor.unsubscribe() cherrypy.quickstart(webServer.Headphones(), config = conf) diff --git a/itunesimport.py b/itunesimport.py new file mode 100644 index 00000000..96866621 --- /dev/null +++ b/itunesimport.py @@ -0,0 +1,61 @@ +from pyItunes import * +from configobj import ConfigObj +import musicbrainz2.webservice as ws +import musicbrainz2.model as m +import musicbrainz2.utils as u +import string +import time +import os +import sqlite3 +from headphones import FULL_PATH + +database = os.path.join(FULL_PATH, 'headphones.db') + + +def itunesImport(pathtoxml): + pl = XMLLibraryParser(pathtoxml) + l = Library(pl.dictionary) + lst = [] + for song in l.songs: + lst.append(song.artist) + rawlist = {}.fromkeys(lst).keys() + artistlist = [f for f in rawlist if f != None] + for name in artistlist: + artistResults = ws.Query().getArtists(ws.ArtistFilter(string.replace(name, '&', '%38'), limit=1)) + for result in artistResults: + artistid = u.extractUuid(result.artist.id) + inc = ws.ArtistIncludes(releases=(m.Release.TYPE_OFFICIAL, m.Release.TYPE_ALBUM), ratings=False, releaseGroups=False) + artist = ws.Query().getArtistById(artistid, inc) + conn=sqlite3.connect(database) + c=conn.cursor() + c.execute('CREATE TABLE IF NOT EXISTS artists (ArtistID TEXT UNIQUE, ArtistName TEXT, ArtistSortName TEXT, DateAdded TEXT, Status TEXT)') + c.execute('CREATE TABLE IF NOT EXISTS albums (ArtistID TEXT, ArtistName TEXT, AlbumTitle TEXT, AlbumASIN TEXT, ReleaseDate TEXT, DateAdded TEXT, AlbumID TEXT UNIQUE, Status TEXT)') + c.execute('CREATE TABLE IF NOT EXISTS tracks (ArtistID TEXT, ArtistName TEXT, AlbumTitle TEXT, AlbumASIN TEXT, AlbumID TEXT, TrackTitle TEXT, TrackDuration TEXT, TrackID TEXT)') + c.execute('SELECT ArtistID from artists') + artistlist = c.fetchall() + if any(artistid in x for x in artistlist): + pass + else: + c.execute('INSERT INTO artists VALUES( ?, ?, ?, CURRENT_DATE, ?)', (artistid, artist.name, artist.sortName, 'Active')) + for release in artist.getReleases(): + releaseid = u.extractUuid(release.id) + inc = ws.ReleaseIncludes(artist=True, releaseEvents= True, tracks= True, releaseGroup=True) + results = ws.Query().getReleaseById(releaseid, inc) + time.sleep(1) + for event in results.releaseEvents: + if event.country == 'US': + c.execute('INSERT INTO albums VALUES( ?, ?, ?, ?, ?, CURRENT_DATE, ?, ?)', (artistid, results.artist.name, results.title, results.asin, results.getEarliestReleaseDate(), u.extractUuid(results.id), 'Skipped')) + conn.commit() + c.execute('SELECT ReleaseDate, DateAdded from albums WHERE AlbumID="%s"' % u.extractUuid(results.id)) + latestrelease = c.fetchall() + if latestrelease[0][0] > latestrelease[0][1]: + c.execute('UPDATE albums SET Status = "Wanted" WHERE AlbumID="%s"' % u.extractUuid(results.id)) + else: + pass + for track in results.tracks: + c.execute('INSERT INTO tracks VALUES( ?, ?, ?, ?, ?, ?, ?, ?)', (artistid, results.artist.name, results.title, results.asin, u.extractUuid(results.id), track.title, track.duration, u.extractUuid(track.id))) + conn.commit() + c.close() + else: + pass + diff --git a/searcher.py b/searcher.py index b8f37b09..cb85303b 100644 --- a/searcher.py +++ b/searcher.py @@ -30,8 +30,9 @@ else: def searchNZB(albumid=None): - conn=sqlite3.connect(database) - c=conn.cursor() + if os.path.exists(database): + conn=sqlite3.connect(database) + c=conn.cursor() if albumid: c.execute('SELECT ArtistName, AlbumTitle, AlbumID, ReleaseDate from albums WHERE Status="Wanted" AND AlbumID="%s"' % albumid) diff --git a/threadtools.py b/threadtools.py index 7c74c3e3..57277a41 100644 --- a/threadtools.py +++ b/threadtools.py @@ -31,5 +31,7 @@ class threadtool(SimplePlugin): def run(self): import updater import searcher - self.sched.add_cron_job(updater.dbUpdate, hour=3) - self.sched.add_interval_job(searcher.searchNZB, hours=18) + import mover + #self.sched.add_cron_job(updater.dbUpdate, hour=3) + #self.sched.add_interval_job(searcher.searchNZB, hours=18) + #self.sched.add_interval_job(mover.moveFiles, minutes=10) diff --git a/webServer.py b/webServer.py index cb6edeb2..727683f7 100644 --- a/webServer.py +++ b/webServer.py @@ -286,10 +286,25 @@ class Headphones: page = [templates._header] page.append(templates._logobar) page.append(templates._nav) + page.append('''