diff --git a/database.py b/database.py index 339062d..0d4f80c 100644 --- a/database.py +++ b/database.py @@ -102,6 +102,14 @@ async def get_tracks(request, albumartist, album, date, playlist_name=""): return tracks +async def get_playlists(request): + """Return all playlists in the database.""" + async with request.app.state.db_pool.acquire() as conn: + playlists = await conn.fetch("SELECT name FROM playlist") + playlists = [p['name'] for p in playlists] + return playlists + + def convert_filepath(path): """Convert a filepath to a URL.""" path = config.server_homepage + '/library/' + path diff --git a/pyrite.py b/pyrite.py index db3d5ca..07489f4 100644 --- a/pyrite.py +++ b/pyrite.py @@ -23,29 +23,31 @@ templates = Jinja2Templates(directory="templates") @app.get("/", response_class=HTMLResponse) async def index(request: Request): - artists = await db.get_artists(request) - context = {'request': request, 'artists': artists} + playlist_name = request.cookies.get('playlist', '') + artists = await db.get_artists(request, playlist_name) + playlists = await db.get_playlists(request) + context = {'request': request, 'artists': artists, 'playlists': playlists} return templates.TemplateResponse('index.html', context) @app.get("/rand_track/") -async def get_rand_track(request: Request): +async def get_rand_track(request: Request, playlist: str = ''): """Return a random track.""" - track = await db.get_random_track(request) + track = await db.get_random_track(request, playlist) return track @app.get("/albums/") -async def get_albums(request: Request, albumartist: str): +async def get_albums(request: Request, albumartist: str, playlist: str = ''): """Return all albums associated with a particular albumartist.""" - albums = await db.get_albums(request, albumartist) + albums = await db.get_albums(request, albumartist, playlist) return albums @app.get("/tracks/") -async def get_tracks(request: Request, albumartist: str, album: str, date: str): +async def get_tracks(request: Request, albumartist: str, album: str, date: str, playlist: str = ''): """Select an album and return all associated tracks.""" - tracks = await db.get_tracks(request, albumartist, album, date) + tracks = await db.get_tracks(request, albumartist, album, date, playlist) return tracks diff --git a/static/pyrite.js b/static/pyrite.js index 3be431e..f8e2e10 100644 --- a/static/pyrite.js +++ b/static/pyrite.js @@ -41,16 +41,23 @@ function init() { } async function get_rand_track() { - let res = await fetch("./rand_track/") + let playlist = document.querySelector('#playlist').value; + + let q = new URLSearchParams(); + q.set('playlist', playlist); + + let res = await fetch("./rand_track/?" + q.toString()) let data = await res.json(); return data; } async function select_artist(event) { let artist = event.target.value; + let playlist = document.querySelector('#playlist').value; let q = new URLSearchParams(); q.set('albumartist', artist); + q.set('playlist', playlist); let res = await fetch("./albums/?" + q.toString()); let data = await res.json(); @@ -61,13 +68,13 @@ async function select_album(event) { let artist = document.querySelector('input[name=artist]:checked').value; let album = document.querySelector('input[name=album]:checked').value; let date = event.srcElement.parentElement.querySelector('.album_year').textContent; - //let playlist = document.querySelector('#playlist').value; + let playlist = document.querySelector('#playlist').value; let q = new URLSearchParams(); q.set('albumartist', artist); q.set('album', album); q.set('date', date); - //q.set('playlist_name', playlist); + q.set('playlist', playlist); let res = await fetch("./tracks/?" + q.toString()); let data = await res.json(); @@ -127,6 +134,11 @@ function select_track(event) { playTrack(); } +function select_playlist(event) { + let playlist = document.querySelector('#playlist').value; + document.cookie = "playlist=" + playlist; +} + function clear_tracks() { let tracks = document.querySelector('#track_list'); while (tracks.firstChild) { diff --git a/templates/index.html b/templates/index.html index 2d10250..faa5ca8 100644 --- a/templates/index.html +++ b/templates/index.html @@ -30,8 +30,11 @@
- + + {% for playlist in playlists %} + + {% endfor %}