add playlists

This commit is contained in:
iou1name 2025-02-11 16:13:46 -05:00
parent 3b7c40c115
commit 5210ca3102
4 changed files with 38 additions and 13 deletions

View File

@ -102,6 +102,14 @@ async def get_tracks(request, albumartist, album, date, playlist_name=""):
return tracks 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): def convert_filepath(path):
"""Convert a filepath to a URL.""" """Convert a filepath to a URL."""
path = config.server_homepage + '/library/' + path path = config.server_homepage + '/library/' + path

View File

@ -23,29 +23,31 @@ templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse) @app.get("/", response_class=HTMLResponse)
async def index(request: Request): async def index(request: Request):
artists = await db.get_artists(request) playlist_name = request.cookies.get('playlist', '')
context = {'request': request, 'artists': artists} 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) return templates.TemplateResponse('index.html', context)
@app.get("/rand_track/") @app.get("/rand_track/")
async def get_rand_track(request: Request): async def get_rand_track(request: Request, playlist: str = ''):
"""Return a random track.""" """Return a random track."""
track = await db.get_random_track(request) track = await db.get_random_track(request, playlist)
return track return track
@app.get("/albums/") @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.""" """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 return albums
@app.get("/tracks/") @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.""" """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 return tracks

View File

@ -41,16 +41,23 @@ function init() {
} }
async function get_rand_track() { 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(); let data = await res.json();
return data; return data;
} }
async function select_artist(event) { async function select_artist(event) {
let artist = event.target.value; let artist = event.target.value;
let playlist = document.querySelector('#playlist').value;
let q = new URLSearchParams(); let q = new URLSearchParams();
q.set('albumartist', artist); q.set('albumartist', artist);
q.set('playlist', playlist);
let res = await fetch("./albums/?" + q.toString()); let res = await fetch("./albums/?" + q.toString());
let data = await res.json(); let data = await res.json();
@ -61,13 +68,13 @@ async function select_album(event) {
let artist = document.querySelector('input[name=artist]:checked').value; let artist = document.querySelector('input[name=artist]:checked').value;
let album = document.querySelector('input[name=album]:checked').value; let album = document.querySelector('input[name=album]:checked').value;
let date = event.srcElement.parentElement.querySelector('.album_year').textContent; 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(); let q = new URLSearchParams();
q.set('albumartist', artist); q.set('albumartist', artist);
q.set('album', album); q.set('album', album);
q.set('date', date); q.set('date', date);
//q.set('playlist_name', playlist); q.set('playlist', playlist);
let res = await fetch("./tracks/?" + q.toString()); let res = await fetch("./tracks/?" + q.toString());
let data = await res.json(); let data = await res.json();
@ -127,6 +134,11 @@ function select_track(event) {
playTrack(); playTrack();
} }
function select_playlist(event) {
let playlist = document.querySelector('#playlist').value;
document.cookie = "playlist=" + playlist;
}
function clear_tracks() { function clear_tracks() {
let tracks = document.querySelector('#track_list'); let tracks = document.querySelector('#track_list');
while (tracks.firstChild) { while (tracks.firstChild) {

View File

@ -30,8 +30,11 @@
<div id="settings"> <div id="settings">
<div> <div>
<label for="playlist-select">Playlist:</label> <label for="playlist-select">Playlist:</label>
<select id="playlist-select"> <select id="playlist-select" onchange="select_playlist(event)">
<option>All Tracks</option> <option value="">All Tracks</option>
{% for playlist in playlists %}
<option value="{{ playlist }}"{% if playlist == request.cookies.get('playlist') %} selected{% endif %}>{{ playlist }}</option>
{% endfor %}
</select> </select>
</div> </div>
<div> <div>