mirror of
https://github.com/gabehf/Koito.git
synced 2026-04-22 20:11:50 -07:00
* add dev branch container to workflow * correctly set the default range of ActivityGrid * fix: set name/short_name to koito (#61) * fix dev container push workflow * fix: race condition with using getComputedStyle primary color for dynamic activity grid darkening (#76) * Fix race condition with using getComputedStyle primary color for dynamic activity grid darkening Instead just use the color from the current theme directly. Tested works on initial load and theme changes. Fixes https://github.com/gabehf/Koito/issues/75 * Rework theme provider to provide the actual Theme object throughtout the app, in addition to the name Split name out of the Theme struct to simplify custom theme saving/reading * fix: set first artist listed as primary by default (#81) * feat: add server-side configuration with default theme (#90) * docs: add example for usage of the main listenbrainz instance (#71) * docs: add example for usage of the main listenbrainz instance * Update scrobbler.md --------- Co-authored-by: Gabe Farrell <90876006+gabehf@users.noreply.github.com> * feat: add server-side cfg and default theme * fix: repair custom theme --------- Co-authored-by: m0d3rnX <jesper@posteo.de> * docs: add default theme cfg option to docs * feat: add ability to manually scrobble track (#91) * feat: add button to manually scrobble from ui * fix: ensure timestamp is in the past, log fix * test: add integration test * feat: add first listened to dates for media items (#92) * fix: ensure error checks for ErrNoRows * feat: add now playing endpoint and ui (#93) * wip * feat: add now playing * fix: set default theme when config is not set * feat: fetch images from subsonic server (#94) * fix: useQuery instead of useEffect for now playing * feat: custom artist separator regex (#95) * Fix race condition with using getComputedStyle primary color for dynamic activity grid darkening Instead just use the color from the current theme directly. Tested works on initial load and theme changes. Fixes https://github.com/gabehf/Koito/issues/75 * Rework theme provider to provide the actual Theme object throughtout the app, in addition to the name Split name out of the Theme struct to simplify custom theme saving/reading * feat: add server-side configuration with default theme (#90) * docs: add example for usage of the main listenbrainz instance (#71) * docs: add example for usage of the main listenbrainz instance * Update scrobbler.md --------- Co-authored-by: Gabe Farrell <90876006+gabehf@users.noreply.github.com> * feat: add server-side cfg and default theme * fix: repair custom theme --------- Co-authored-by: m0d3rnX <jesper@posteo.de> * fix: rebase errors --------- Co-authored-by: pet <128837728+againstpetra@users.noreply.github.com> Co-authored-by: mlandry <mike.landry@gmail.com> Co-authored-by: m0d3rnX <jesper@posteo.de>
129 lines
No EOL
3.4 KiB
SQL
129 lines
No EOL
3.4 KiB
SQL
-- name: InsertTrack :one
|
|
INSERT INTO tracks (musicbrainz_id, release_id, duration)
|
|
VALUES ($1, $2, $3)
|
|
RETURNING *;
|
|
|
|
-- name: AssociateArtistToTrack :exec
|
|
INSERT INTO artist_tracks (artist_id, track_id, is_primary)
|
|
VALUES ($1, $2, $3)
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- name: GetTrack :one
|
|
SELECT
|
|
t.*,
|
|
get_artists_for_track(t.id) AS artists,
|
|
r.image
|
|
FROM tracks_with_title t
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE t.id = $1 LIMIT 1;
|
|
|
|
-- name: GetTrackByMbzID :one
|
|
SELECT * FROM tracks_with_title
|
|
WHERE musicbrainz_id = $1 LIMIT 1;
|
|
|
|
-- name: GetAllTracksFromArtist :many
|
|
SELECT t.*
|
|
FROM tracks_with_title t
|
|
JOIN artist_tracks at ON t.id = at.track_id
|
|
WHERE at.artist_id = $1;
|
|
|
|
-- name: GetTrackByTitleAndArtists :one
|
|
SELECT t.*
|
|
FROM tracks_with_title t
|
|
JOIN artist_tracks at ON at.track_id = t.id
|
|
WHERE t.title = $1
|
|
AND at.artist_id = ANY($2::int[])
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.duration, t.release_id
|
|
HAVING COUNT(DISTINCT at.artist_id) = cardinality($2::int[]);
|
|
|
|
-- name: GetTopTracksPaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: GetTopTracksByArtistPaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
JOIN artist_tracks at ON at.track_id = t.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND at.artist_id = $5
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: GetTopTracksInReleasePaginated :many
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
COUNT(*) AS listen_count,
|
|
get_artists_for_track(t.id) AS artists
|
|
FROM listens l
|
|
JOIN tracks_with_title t ON l.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND t.release_id = $5
|
|
GROUP BY t.id, t.title, t.musicbrainz_id, t.release_id, r.image
|
|
ORDER BY listen_count DESC, t.id
|
|
LIMIT $3 OFFSET $4;
|
|
|
|
-- name: CountTopTracks :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
WHERE l.listened_at BETWEEN $1 AND $2;
|
|
|
|
-- name: CountTopTracksByArtist :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
JOIN artist_tracks at ON l.track_id = at.track_id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND at.artist_id = $3;
|
|
|
|
-- name: CountTopTracksByRelease :one
|
|
SELECT COUNT(DISTINCT l.track_id) AS total_count
|
|
FROM listens l
|
|
JOIN tracks t ON l.track_id = t.id
|
|
WHERE l.listened_at BETWEEN $1 AND $2
|
|
AND t.release_id = $3;
|
|
|
|
-- name: UpdateTrackMbzID :exec
|
|
UPDATE tracks SET musicbrainz_id = $2
|
|
WHERE id = $1;
|
|
|
|
-- name: UpdateTrackDuration :exec
|
|
UPDATE tracks SET duration = $2
|
|
WHERE id = $1;
|
|
|
|
-- name: UpdateReleaseForAll :exec
|
|
UPDATE tracks SET release_id = $2
|
|
WHERE release_id = $1;
|
|
|
|
-- name: UpdateTrackPrimaryArtist :exec
|
|
UPDATE artist_tracks SET is_primary = $3
|
|
WHERE artist_id = $1 AND track_id = $2;
|
|
|
|
-- name: DeleteTrack :exec
|
|
DELETE FROM tracks WHERE id = $1; |