Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.
package metadata
import (
"cmp"
"crypto/md5"
"fmt"
"strings"
"github.com/navidrome/navidrome/conf"
"github.com/navidrome/navidrome/consts"
"github.com/navidrome/navidrome/model"
)
// 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) string {
return fmt.Sprintf("%x", md5.Sum([]byte(mf.Path)))
}
func legacyAlbumID(md Metadata) string {
releaseDate := legacyReleaseDate(md)
albumPath := strings.ToLower(fmt.Sprintf("%s\\%s", legacyMapAlbumArtistName(md), legacyMapAlbumName(md)))
if !conf.Server.Scanner.GroupAlbumReleases {
if len(releaseDate) != 0 {
albumPath = fmt.Sprintf("%s\\%s", albumPath, releaseDate)
return fmt.Sprintf("%x", md5.Sum([]byte(albumPath)))
func legacyMapAlbumArtistName(md Metadata) string {
values := []string{
md.String(model.TagAlbumArtist),
"",
md.String(model.TagTrackArtist),
consts.UnknownArtist,
if md.Bool(model.TagCompilation) {
values[1] = consts.VariousArtists
return cmp.Or(values...)
func legacyMapAlbumName(md Metadata) string {
return cmp.Or(
md.String(model.TagAlbum),
consts.UnknownAlbum,
// Keep the TaggedLikePicard logic for backwards compatibility
func legacyReleaseDate(md Metadata) string {
_, _, releaseDate := md.mapDates()
return string(releaseDate)