feat: the library's folders are set in Admin › Library, and changing a folder moves its tracks with it, keeping their plays, likes and playlists (#6129)
release / govulncheck (push) Successful in 15s
release / web (push) Successful in 1m20s
release / go (push) Failing after 1m37s
release / integration (push) Failing after 4m56s
release / android (push) Successful in 5m1s
release / Build signed APK (releases and dev) (push) Successful in 5m13s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Skipped
release / Verify release artifacts (tag releases only) (push) Skipped
release / govulncheck (push) Successful in 15s
release / web (push) Successful in 1m20s
release / go (push) Failing after 1m37s
release / integration (push) Failing after 4m56s
release / android (push) Successful in 5m1s
release / Build signed APK (releases and dev) (push) Successful in 5m13s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Skipped
release / Verify release artifacts (tag releases only) (push) Skipped
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
-- name: GetLibrarySettings :one
|
||||
SELECT * FROM library_settings WHERE id = true;
|
||||
|
||||
-- name: UpdateLibraryScanPaths :one
|
||||
UPDATE library_settings
|
||||
SET scan_paths = sqlc.arg(scan_paths)::text[],
|
||||
updated_at = now()
|
||||
WHERE id = true
|
||||
RETURNING *;
|
||||
|
||||
-- A library folder that moved (#6129): every path under old_root is rewritten
|
||||
-- to the same place under new_root, so the tracks keep their ids and with them
|
||||
-- their plays, likes and playlists. updated_at is left alone on purpose: the
|
||||
-- scan compares it with each file's mtime, and the files have not changed.
|
||||
|
||||
-- name: RerootTrackPaths :execrows
|
||||
UPDATE tracks
|
||||
SET file_path = sqlc.arg(new_root)::text || substr(file_path, length(sqlc.arg(old_root)::text) + 1)
|
||||
WHERE starts_with(file_path, sqlc.arg(old_root)::text || '/');
|
||||
|
||||
-- name: RerootAlbumCoverPaths :execrows
|
||||
UPDATE albums
|
||||
SET cover_art_path = sqlc.arg(new_root)::text || substr(cover_art_path, length(sqlc.arg(old_root)::text) + 1)
|
||||
WHERE starts_with(cover_art_path, sqlc.arg(old_root)::text || '/');
|
||||
|
||||
-- name: RerootGrabDestinations :execrows
|
||||
UPDATE grabs
|
||||
SET destination = sqlc.arg(new_root)::text || substr(destination, length(sqlc.arg(old_root)::text) + 1)
|
||||
WHERE destination = sqlc.arg(old_root)::text
|
||||
OR starts_with(destination, sqlc.arg(old_root)::text || '/');
|
||||
|
||||
-- name: RerootImportRoot :execrows
|
||||
UPDATE acquisition_settings
|
||||
SET import_root = sqlc.arg(new_root)::text
|
||||
WHERE import_root = sqlc.arg(old_root)::text;
|
||||
|
||||
-- name: SampleTrackPathsUnder :many
|
||||
-- A few present tracks under a folder, to check a move before rewriting it.
|
||||
SELECT file_path FROM tracks
|
||||
WHERE starts_with(file_path, sqlc.arg(root)::text || '/') AND missing_since IS NULL
|
||||
ORDER BY random()
|
||||
LIMIT sqlc.arg(n)::int;
|
||||
|
||||
-- name: CountTracksUnder :one
|
||||
SELECT count(*) FROM tracks WHERE starts_with(file_path, sqlc.arg(root)::text || '/');
|
||||
Reference in New Issue
Block a user