add select_albums() functions
This commit is contained in:
parent
5c8c770f96
commit
375f79cf4b
21
database.py
21
database.py
@ -42,6 +42,27 @@ async def get_artists(request):
|
|||||||
return artists
|
return artists
|
||||||
|
|
||||||
|
|
||||||
|
async def get_albums(request, albumartist):
|
||||||
|
"""Return all albums associated with a particular albumartist."""
|
||||||
|
print(albumartist)
|
||||||
|
async with request.app.state.db_pool.acquire() as conn:
|
||||||
|
albums = await conn.fetch(
|
||||||
|
"SELECT DISTINCT ON (album, date) filepath, album, date "
|
||||||
|
"FROM track "
|
||||||
|
"WHERE albumartist = $1 ORDER BY date",
|
||||||
|
albumartist
|
||||||
|
)
|
||||||
|
albums_ = []
|
||||||
|
for album in albums:
|
||||||
|
album = dict(album)
|
||||||
|
fpath = album.pop('filepath')
|
||||||
|
cpath = os.path.join(os.path.dirname(fpath), 'folder-64x64.jpg')
|
||||||
|
album['cover_art_path'] = convert_filepath(cpath)
|
||||||
|
albums_.append(album)
|
||||||
|
return albums_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def convert_filepath(path):
|
def convert_filepath(path):
|
||||||
"""Convert a filepath to a URL."""
|
"""Convert a filepath to a URL."""
|
||||||
path = os.path.relpath(path, config.music_dir)
|
path = os.path.relpath(path, config.music_dir)
|
||||||
|
@ -35,6 +35,13 @@ async def get_rand_track(request: Request):
|
|||||||
return track
|
return track
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/albums/")
|
||||||
|
async def get_albums(request: Request, albumartist: str):
|
||||||
|
"""Return all albums associated with a particular albumartist."""
|
||||||
|
albums = await db.get_albums(request, albumartist)
|
||||||
|
return albums
|
||||||
|
|
||||||
|
|
||||||
@app.on_event("startup")
|
@app.on_event("startup")
|
||||||
async def startup():
|
async def startup():
|
||||||
app.state.db_pool = await asyncpg.create_pool(**config.db)
|
app.state.db_pool = await asyncpg.create_pool(**config.db)
|
||||||
|
@ -46,6 +46,54 @@ async function get_rand_track() {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function select_artist(event) {
|
||||||
|
let artist = event.target.value;
|
||||||
|
|
||||||
|
let q = new URLSearchParams();
|
||||||
|
q.set('albumartist', artist);
|
||||||
|
let res = await fetch("./albums/?" + q.toString());
|
||||||
|
let data = await res.json();
|
||||||
|
|
||||||
|
populate_albums(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function populate_albums(data) {
|
||||||
|
clear_albums();
|
||||||
|
clear_tracks();
|
||||||
|
for (let i = 0; i < data.length; i++) {
|
||||||
|
let album = document.importNode(document.querySelector('#album_template').content, true);
|
||||||
|
album.querySelector('label').setAttribute('for', 'album_' + i);
|
||||||
|
album.querySelector('input').setAttribute('id', 'album_' + i);
|
||||||
|
album.querySelector('input').setAttribute('value', data[i]['album']);
|
||||||
|
album.querySelector('img').setAttribute('src', data[i]['cover_art_path']);
|
||||||
|
album.querySelector('.album_name').textContent = data[i]['album'];
|
||||||
|
album.querySelector('.album_year').textContent = data[i]['date'];
|
||||||
|
|
||||||
|
document.querySelector('#album_list').appendChild(album);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear_tracks() {
|
||||||
|
let tracks = document.querySelector('#track_list');
|
||||||
|
while (tracks.firstChild) {
|
||||||
|
tracks.removeChild(tracks.lastChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear_albums() {
|
||||||
|
let albums = document.querySelector('#album_list');
|
||||||
|
while (albums.firstChild) {
|
||||||
|
albums.removeChild(albums.lastChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear_artists() {
|
||||||
|
let artists = document.querySelector('#artist_list');
|
||||||
|
while (artists.firstChild) {
|
||||||
|
artists.removeChild(artists.lastChild);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function nextTrack() {
|
async function nextTrack() {
|
||||||
track = await get_rand_track();
|
track = await get_rand_track();
|
||||||
player.src = track.source;
|
player.src = track.source;
|
||||||
@ -157,6 +205,7 @@ function volume_restore() {
|
|||||||
document.querySelector('#vol-off-btn').style.display = 'none';
|
document.querySelector('#vol-off-btn').style.display = 'none';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- visualizer ---
|
||||||
function select_visualizer(event) {
|
function select_visualizer(event) {
|
||||||
if (event.target.value == 'bar_graph') {
|
if (event.target.value == 'bar_graph') {
|
||||||
bar_graph();
|
bar_graph();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user