feat(scanner): emit legacy PIDs in canonical base62 encoding

This commit is contained in:
Deluan 2026-07-19 21:44:39 -04:00
parent 38eb7c4b78
commit 8337b5a0b9
2 changed files with 12 additions and 4 deletions

View File

@ -9,17 +9,19 @@ import (
"github.com/navidrome/navidrome/conf"
"github.com/navidrome/navidrome/consts"
"github.com/navidrome/navidrome/model"
"github.com/navidrome/navidrome/model/id"
)
// These are the legacy ID functions that were used in the original Navidrome ID generation.
// They are kept here for backwards compatibility with existing databases.
func legacyTrackID(mf model.MediaFile, prependLibId bool) string {
id := mf.Path
key := mf.Path
if prependLibId && mf.LibraryID != model.DefaultLibraryID {
id = fmt.Sprintf("%d\\%s", mf.LibraryID, id)
key = fmt.Sprintf("%d\\%s", mf.LibraryID, key)
}
return fmt.Sprintf("%x", md5.Sum([]byte(id)))
sum := md5.Sum([]byte(key))
return id.Encode128(sum[:])
}
func legacyAlbumID(mf model.MediaFile, md Metadata, prependLibId bool) string {
@ -33,7 +35,8 @@ func legacyAlbumID(mf model.MediaFile, md Metadata, prependLibId bool) string {
if prependLibId && mf.LibraryID != model.DefaultLibraryID {
albumPath = fmt.Sprintf("%d\\%s", mf.LibraryID, albumPath)
}
return fmt.Sprintf("%x", md5.Sum([]byte(albumPath)))
sum := md5.Sum([]byte(albumPath))
return id.Encode128(sum[:])
}
func legacyMapAlbumArtistName(md Metadata) string {

View File

@ -218,6 +218,11 @@ var _ = Describe("getPID", func() {
})
Context("legacy specs", func() {
It("emits canonical 22-char base62 ids", func() {
mf := model.MediaFile{Path: "/music/a.mp3", LibraryID: 1}
// md5("/music/a.mp3") = e3b7fc2ae9447bbec37a13bf916e3cf6 re-encoded as base62
Expect(legacyTrackID(mf, false)).To(Equal("6VHl3uR4kss6sUPKA8Cwnk"))
})
Context("track_legacy", func() {
When("library ID is default (1)", func() {
It("should not prepend library ID even when prependLibId is true", func() {