2 from sqlite3 import dbapi2 as sqlite
3 from brisa.upnp.didl.didl_lite import *
4 from brisa.core import log
8 def __init__(self, path, websrv=None):
10 self.webserver = websrv
19 def get_webserver(self):
23 return sqlite.connect(self.db_path)
26 def get_file_path(self, id):
27 """ Returns the file path with this id."""
28 conn = self.get_conn()
32 c = conn.execute('SELECT path FROM files WHERE id=?', (id,))
33 path = str(c.fetchall()[0][0])
36 log.error('error retrieving file path: %s' % e)
42 def get_audio_item(self, id):
43 """ Returns the audio item (if exists) given its id."""
44 conn = self.get_conn()
45 url = '%s/audio_library/audio-' % self.webserver.get_listen_url()
46 c = conn.execute('SELECT files.path, audios.id, '\
47 'audios.title, audio_albums.name, '\
48 'audio_artists.name, audio_genres.name, '\
49 'audios.trackno FROM audios INNER JOIN '\
50 'audio_albums INNER JOIN audio_artists '\
51 'INNER JOIN audio_genres INNER JOIN files ON '\
52 'audios.album_id=audio_albums.id AND '\
53 'audios.genre_id=audio_genres.id AND '\
54 'audios.artist_id=audio_artists.id '\
55 'where files.id=? AND audios.id=?',
61 if not result or len(result) < 1:
65 track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2], genres=[r[5]],
66 artists=[r[4]], albums=[r[3]],
67 original_track_number=r[6])
68 track.add_resource(Resource('%s%d' % (url, r[1]), 'http-get:*:audio/%s:*' %
69 str(r[0]).split('.')[-1]))
74 def get_audio_all(self):
75 """ Returns all audio."""
76 conn = self.get_conn()
77 url = '%s/audio_library/audio-' % self.webserver.get_listen_url()
78 c = conn.execute('SELECT files.path, audios.id, '\
79 'audios.title, audio_albums.name, '\
80 'audio_artists.name, audio_genres.name, '\
81 'audios.trackno FROM audios INNER JOIN '\
82 'audio_albums INNER JOIN audio_artists '\
83 'INNER JOIN audio_genres INNER JOIN files ON '\
84 'audios.album_id=audio_albums.id AND '\
85 'audios.genre_id=audio_genres.id AND '\
86 'audios.artist_id=audio_artists.id AND '\
87 'audios.id = files.id', ())
92 track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
93 genres=[r[5]], artists=[r[4]], albums=[r[3]],
94 original_track_number=r[6])
95 track.add_resource(Resource('%s%d' % (url, r[1]),
96 'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
104 def get_audio_genres(self):
105 """ Returns all audio genres."""
106 conn = self.get_conn()
107 c = conn.execute('SELECT ? || id, name FROM audio_genres',
108 ('audio_library:genre-', ))
114 r = (r[0], 'Unknown Genre')
115 result.append(MusicGenre(**dict(zip(['id', 'title'], r))))
122 def get_audio_genre(self, id):
123 """ Returns an audio genre given its id."""
124 conn = self.get_conn()
125 url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
126 c = conn.execute('SELECT files.path, audios.id, '\
127 'audios.title, audio_albums.name, '\
128 'audio_artists.name, audio_genres.name, '\
129 'audios.trackno FROM audios INNER JOIN '\
130 'audio_albums INNER JOIN audio_artists '\
131 'INNER JOIN audio_genres INNER JOIN files ON '\
132 'audios.album_id=audio_albums.id AND '\
133 'audios.genre_id=audio_genres.id AND '\
134 'audios.artist_id=audio_artists.id AND '\
135 'audios.id = files.id WHERE audios.genre_id '\
140 track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
141 genres=[r[5]], artists=[r[4]], albums=[r[3]],
142 original_track_number=r[6])
143 track.add_resource(Resource('%s%d' % (url, r[1]),
144 'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
151 def get_audio_artists(self):
152 """ Returns all audio artists."""
153 conn = self.get_conn()
154 c = conn.execute('SELECT ? || id, name FROM audio_artists',
155 ('audio_library:artist-', ))
161 return [MusicArtist(**dict(zip(['id', 'title'], r))) for r in rows]
164 def get_audio_artist(self, id):
165 """ Returns an audio artist given its id."""
166 conn = self.get_conn()
167 url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
168 c = conn.execute('SELECT files.path, audios.id, '\
169 'audios.title, audio_albums.name, '\
170 'audio_artists.name, audio_genres.name, '\
171 'audios.trackno FROM audios INNER JOIN '\
172 'audio_albums INNER JOIN audio_artists '\
173 'INNER JOIN audio_genres INNER JOIN files ON '\
174 'audios.album_id=audio_albums.id AND '\
175 'audios.genre_id=audio_genres.id AND '\
176 'audios.artist_id=audio_artists.id AND '\
177 'audios.id = files.id WHERE audios.artist_id '\
183 track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
184 genres=[r[5]], artists=[r[4]], albums=[r[3]],
185 original_track_number=r[6])
186 track.add_resource(Resource('%s%d' % (url, r[1]), 'http-get:*:audio/%s:*' %
187 str(r[0]).split('.')[-1]))
195 def get_audio_albums(self):
196 """ Returns all audio albums."""
197 conn = self.get_conn()
198 c = conn.execute('SELECT ? || id, name FROM audio_albums',
199 ('audio_library:album-', ))
200 ret = [MusicAlbum(**dict(zip(['id', 'title'], r))) for r in c]
206 def get_audio_album(self, id):
207 """ Returns an audio album given its id."""
208 conn = self.get_conn()
209 url = '%s/%s/audio-' % (self.webserver.get_listen_url(), 'audio_library')
210 c = conn.execute('SELECT files.path, audios.id, '\
211 'audios.title, audio_albums.name, '\
212 'audio_artists.name, audio_genres.name, '\
213 'audios.trackno FROM audios INNER JOIN '\
214 'audio_albums INNER JOIN audio_artists '\
215 'INNER JOIN audio_genres INNER JOIN files ON '\
216 'audios.album_id=audio_albums.id AND '\
217 'audios.genre_id=audio_genres.id AND '\
218 'audios.artist_id=audio_artists.id AND '\
219 'audios.id = files.id WHERE audios.album_id '\
225 track = MusicTrack('audio_library:audio-%d' % r[1], '', r[2],
226 genres=[r[5]], artists=[r[4]], albums=[r[3]],
227 original_track_number=r[6])
228 track.add_resource(Resource('%s%d' % (url, r[1]),
229 'http-get:*:audio/%s:*' % str(r[0]).split('.')[-1]))
237 def get_playlists(self):
238 """ Returns all playlists."""
239 conn = self.get_conn()
240 url = '%s/audio_library/playlist-' % self.webserver.get_listen_url()
243 c = conn.execute('SELECT id, title FROM playlists', ())
246 playlist = PlaylistItem('audio_library:playlist-%d' % r[0], title=r[1])
247 playlist.add_resource(Resource('%s%d' % (url, r[0]),
248 'http-get:*:audio/mpegurl:*'))
256 def get_playlist(self, id):
257 """ Returns a single playlist item based on its id."""
258 conn = self.get_conn()
259 url = '%s/audio_library/playlist-' % self.webserver.get_listen_url()
260 c = conn.execute('SELECT title FROM playlists WHERE id=?', (id, ))
265 if not rows or len(rows) < 1:
268 playlist = PlaylistItem('audio_library:playlist-%d' % id, title=rows[0][0])
269 playlist.add_resource(Resource('%s%d' % (url, id),
270 'http-get:*:audio/mpegurl:*'))