add a zfacade.py
authorAdriano Couto <couto862@gmail.com>
Fri, 29 May 2009 21:45:59 +0000 (17:45 -0400)
committerAdriano Couto <couto862@gmail.com>
Fri, 29 May 2009 21:45:59 +0000 (17:45 -0400)
zukebox_server/src/plugins/audio_library/zfacade.py [new file with mode: 0755]

diff --git a/zukebox_server/src/plugins/audio_library/zfacade.py b/zukebox_server/src/plugins/audio_library/zfacade.py
new file mode 100755 (executable)
index 0000000..57f6857
--- /dev/null
@@ -0,0 +1,272 @@
+
+from sqlite3 import dbapi2 as sqlite
+from brisa.upnp.didl.didl_lite import *
+from brisa.core import log
+
+class ZFacade:
+       
+       def __init__(self, path, websrv=None):
+               self.db_path = path
+               self.webserver = websrv
+               
+       def exit(self):
+               self.webserver = None
+
+       def get_path(self):
+               print self.db_path
+               return self.db_path
+
+       def get_webserver(self):
+               return self.webserver
+
+       def get_conn(self):
+               return sqlite.connect(self.db_path)
+
+
+       def get_file_path(self, id):
+               """ Returns the file path with this id."""
+               conn = self.get_conn()
+               path = ''
+
+               try:
+                       c = conn.execute('SELECT path FROM files WHERE id=?', (id,))
+                       path = str(c.fetchall()[0][0])
+                       c.close()
+               except Exception, e:
+                       log.error('error retrieving file path: %s' % e)
+
+               conn.close()
+               return path
+
+
+       def get_audio_item(self, id):
+               """ Returns the audio item (if exists) given its id."""
+               conn = self.get_conn()
+               url = '%s/audio_library/audio-' % self.webserver.get_listen_url()
+               c = conn.execute('SELECT files.path, audios.id, '\
+                               'audios.title, audio_albums.name, '\
+                               'audio_artists.name, audio_genres.name, '\
+                               'audios.trackno FROM audios INNER JOIN '\
+                               'audio_albums INNER JOIN audio_artists '\
+                               'INNER JOIN audio_genres INNER JOIN files ON '\
+                               'audios.album_id=audio_albums.id AND '\
+                               'audios.genre_id=audio_genres.id AND '\
+                               'audios.artist_id=audio_artists.id '\
+                               'where files.id=? AND audios.id=?',
+                               (id, id))
+               result = c.fetchall()
+               c.close()
+               conn.close()
+
+               if not result or len(result) < 1:
+                       return []
+
+               r = result[0]
+               track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2], genres=[r[5]],
+                                       artists=[r[4]], albums=[r[3]],
+                                               original_track_number=r[6])
+               track.add_resource(Resource('%s%d' % (url, r[1]), 'http-get:*:audio/%s:*' %
+                                               str(r[0]).split('.')[-1]))
+
+               return [track]
+
+
+       def get_audio_all(self):
+               """ Returns all audio."""
+               conn = self.get_conn()
+               url = '%s/audio_library/audio-' % self.webserver.get_listen_url()
+               c = conn.execute('SELECT files.path, audios.id, '\
+                               'audios.title, audio_albums.name, '\
+                               'audio_artists.name, audio_genres.name, '\
+                               'audios.trackno FROM audios INNER JOIN '\
+                               'audio_albums INNER JOIN audio_artists '\
+                               'INNER JOIN audio_genres INNER JOIN files ON '\
+                               'audios.album_id=audio_albums.id AND '\
+                               'audios.genre_id=audio_genres.id AND '\
+                               'audios.artist_id=audio_artists.id AND '\
+                               'audios.id = files.id', ())
+
+               ans = []
+
+               for r in c:
+                       track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
+                                       genres=[r[5]], artists=[r[4]], albums=[r[3]],
+                                       original_track_number=r[6])
+                       track.add_resource(Resource('%s%d' % (url, r[1]),
+                                       'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
+                       ans.append(track)
+
+               c.close()
+               conn.close()
+               return ans
+
+
+       def get_audio_genres(self):
+               """ Returns all audio genres."""
+               conn = self.get_conn()
+               c = conn.execute('SELECT ? || id, name FROM audio_genres',
+                               ('audio_library:genre-', ))
+
+               result = []
+
+               for r in c:
+                       if r[1] == 'genre':
+                               r = (r[0], 'Unknown Genre')
+                       result.append(MusicGenre(**dict(zip(['id', 'title'], r))))
+
+               c.close()
+               conn.close()
+               return result
+
+
+       def get_audio_genre(self, id):
+               """ Returns an audio genre given its id."""
+               conn = self.get_conn()
+               url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
+               c = conn.execute('SELECT files.path, audios.id, '\
+                               'audios.title, audio_albums.name, '\
+                               'audio_artists.name, audio_genres.name, '\
+                               'audios.trackno FROM audios INNER JOIN '\
+                               'audio_albums INNER JOIN audio_artists '\
+                               'INNER JOIN audio_genres INNER JOIN files ON '\
+                               'audios.album_id=audio_albums.id AND '\
+                               'audios.genre_id=audio_genres.id AND '\
+                               'audios.artist_id=audio_artists.id AND '\
+                               'audios.id = files.id WHERE audios.genre_id '\
+                               '= ?', (id, ))
+               ans = []
+
+               for r in c:
+                       track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
+                               genres=[r[5]], artists=[r[4]], albums=[r[3]],
+                               original_track_number=r[6])
+                       track.add_resource(Resource('%s%d' % (url, r[1]),
+                               'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
+                       ans.append(track)
+
+               c.close()
+               conn.close()
+               return ans
+
+       def get_audio_artists(self):
+               """ Returns all audio artists."""
+               conn = self.get_conn()
+               c = conn.execute('SELECT ? || id, name FROM audio_artists',
+                               ('audio_library:artist-', ))
+
+               rows = c.fetchall()
+               c.close()
+               conn.close()
+
+               return [MusicArtist(**dict(zip(['id', 'title'], r))) for r in rows]
+
+
+       def get_audio_artist(self, id):
+               """ Returns an audio artist given its id."""
+               conn = self.get_conn()
+               url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
+               c = conn.execute('SELECT files.path, audios.id, '\
+                               'audios.title, audio_albums.name, '\
+                               'audio_artists.name, audio_genres.name, '\
+                               'audios.trackno FROM audios INNER JOIN '\
+                               'audio_albums INNER JOIN audio_artists '\
+                               'INNER JOIN audio_genres INNER JOIN files ON '\
+                               'audios.album_id=audio_albums.id AND '\
+                               'audios.genre_id=audio_genres.id AND '\
+                               'audios.artist_id=audio_artists.id AND '\
+                               'audios.id = files.id WHERE audios.artist_id '\
+                               '= ?', (id, ))
+
+               ans = []
+
+               for r in c:
+                       track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
+                               genres=[r[5]], artists=[r[4]], albums=[r[3]],
+                               original_track_number=r[6])
+                       track.add_resource(Resource('%s%d' % (url, r[1]), 'http-get:*:audio/%s:*' %
+                               str(r[0]).split('.')[-1]))
+                       ans.append(track)
+
+               c.close()
+               conn.close()
+               return ans
+
+
+       def get_audio_albums(self):
+               """ Returns all audio albums."""
+               conn = self.get_conn()
+               c = conn.execute('SELECT ? || id, name FROM audio_albums',
+                               ('audio_library:album-', ))
+               ret = [MusicAlbum(**dict(zip(['id', 'title'], r))) for r in c]
+               c.close()
+               conn.close()
+               return ret
+
+
+       def get_audio_album(self, id):
+               """ Returns an audio album given its id."""
+               conn = self.get_conn()
+               url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
+               c = conn.execute('SELECT files.path, audios.id, '\
+                               'audios.title, audio_albums.name, '\
+                               'audio_artists.name, audio_genres.name, '\
+                               'audios.trackno FROM audios INNER JOIN '\
+                               'audio_albums INNER JOIN audio_artists '\
+                               'INNER JOIN audio_genres INNER JOIN files ON '\
+                               'audios.album_id=audio_albums.id AND '\
+                               'audios.genre_id=audio_genres.id AND '\
+                               'audios.artist_id=audio_artists.id AND '\
+                               'audios.id = files.id WHERE audios.album_id '\
+                               '= ?', (id, ))
+
+               ans = []
+
+               for r in c:
+                       track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
+                               genres=[r[5]], artists=[r[4]], albums=[r[3]],
+                               original_track_number=r[6])
+                       track.add_resource(Resource('%s%d' % (url, r[1]),
+                               'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
+                       ans.append(track)
+
+               c.close()
+               conn.close()
+               return ans
+
+
+       def get_playlists(self):
+               """ Returns all playlists."""
+               conn = self.get_conn()
+               url = '%s/audio_library/playlist-' % self.webserver.get_listen_url()
+               ans = []
+
+               c = conn.execute('SELECT id, title FROM playlists', ())
+
+               for r in c:
+                               playlist = PlaylistItem('audio_library:playlist-%d' % r[0], title=r[1])
+                       playlist.add_resource(Resource('%s%d' % (url, r[0]),
+                                               'http-get:*:audio/mpegurl:*'))
+                       ans.append(playlist)
+
+               c.close()
+               conn.close()
+               return ans
+
+
+       def get_playlist(self, id):
+               """ Returns a single playlist item based on its id."""
+               conn = self.get_conn()
+               url = '%s/audio_library/playlist-' % self.webserver.get_listen_url()
+               c = conn.execute('SELECT title FROM playlists WHERE id=?', (id, ))
+               rows = c.fetchall()
+               c.close()
+               conn.close()
+
+               if not rows or len(rows) < 1:
+                       return []
+
+               playlist = PlaylistItem('audio_library:playlist-%d' % id, title=rows[0][0])
+               playlist.add_resource(Resource('%s%d' % (url, id),
+                                       'http-get:*:audio/mpegurl:*'))
+
+               return [playlist]