diff --git a/scanner/scanner.go b/scanner/scanner.go index 77e87111..287d5714 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -463,8 +463,9 @@ func populateTrack(tx *db.DB, album *db.Album, track *db.Track, trags tagcommon. track.Size = size track.AlbumID = album.ID - track.TagTitle = trags.Title() - track.TagTitleUDec = decoded(trags.Title()) + tagTitle := tagcommon.MustTitle(trags) + track.TagTitle = tagTitle + track.TagTitleUDec = decoded(tagTitle) track.TagTrackArtist = tagcommon.MustArtist(trags) track.TagTrackNumber = trags.TrackNumber() track.TagDiscNumber = trags.DiscNumber() diff --git a/tags/tagcommon/tagcommmon.go b/tags/tagcommon/tagcommmon.go index 10da58d1..793af286 100644 --- a/tags/tagcommon/tagcommmon.go +++ b/tags/tagcommon/tagcommmon.go @@ -2,6 +2,7 @@ package tagcommon import ( "errors" + "path" ) var ErrUnsupported = errors.New("filetype unsupported") @@ -33,19 +34,31 @@ type Info interface { Length() int Bitrate() int + + AbsPath() string } const ( - FallbackAlbum = "Unknown Album" FallbackArtist = "Unknown Artist" FallbackGenre = "Unknown Genre" ) +func MustTitle(p Info) string { + if r := p.Title(); r != "" { + return r + } + + // return the file name for title name + return path.Base(p.AbsPath()) +} + func MustAlbum(p Info) string { if r := p.Album(); r != "" { return r } - return FallbackAlbum + + // return the dir name for album name + return path.Base(path.Dir(p.AbsPath())) } func MustArtist(p Info) string { diff --git a/tags/taglib/taglib.go b/tags/taglib/taglib.go index ba2ab827..7b54616a 100644 --- a/tags/taglib/taglib.go +++ b/tags/taglib/taglib.go @@ -28,12 +28,13 @@ func (TagLib) Read(absPath string) (tagcommon.Info, error) { defer f.Close() props := f.ReadAudioProperties() raw := f.ReadTags() - return &info{raw, props}, nil + return &info{raw, props, absPath}, nil } type info struct { - raw map[string][]string - props *audiotags.AudioProperties + raw map[string][]string + props *audiotags.AudioProperties + abspath string } // https://picard-docs.musicbrainz.org/downloads/MusicBrainz_Picard_Tag_Map.html @@ -60,6 +61,8 @@ func (i *info) ReplayGainAlbumPeak() float32 { return flt(first(find(i.raw, "rep func (i *info) Length() int { return i.props.Length } func (i *info) Bitrate() int { return i.props.Bitrate } +func (i *info) AbsPath() string { return i.abspath } + func first[T comparable](is []T) T { var z T for _, i := range is {