diff --git a/src/client/subsonic.go b/src/client/subsonic.go index 1cd0772..8f2685b 100644 --- a/src/client/subsonic.go +++ b/src/client/subsonic.go @@ -141,9 +141,27 @@ func (c *Subsonic) SearchSongs(tracks []*models.Track) error { } songs := resp.SubsonicResponse.SearchResult3.Song + if len(songs) == 0 { - slog.Debug(fmt.Sprintf("[subsonic] no results found for %s", searchQuery)) - continue + if track.MusicBrainzTrackID != "" { + slog.Debug("[subsonic] using fallback MB TrackID search", "mbid", track.MusicBrainzTrackID) + reqParam := fmt.Sprintf("search3?query=%s&f=json", url.QueryEscape(track.MusicBrainzTrackID)) + body, err = c.subsonicRequest(reqParam) + if err != nil { + return err + } + + if err := util.ParseResp(body, &resp); err != nil { + return err + } + + songs = resp.SubsonicResponse.SearchResult3.Song + } + + if len(songs) == 0 { + slog.Debug(fmt.Sprintf("[subsonic] no results found for %s", searchQuery)) + continue + } } normalizedCleanTitle := util.NormalizeTitle(track.CleanTitle) for _, song := range songs { @@ -170,7 +188,7 @@ func (c *Subsonic) SearchSongs(tracks []*models.Track) error { } if !track.Present { - slog.Debug(fmt.Sprintf("[subsonic] multiple results for %s but none matched criteria", searchQuery)) + slog.Debug(fmt.Sprintf("[subsonic] no matching tracks for %s", searchQuery)) } } return nil diff --git a/src/main/main.go b/src/main/main.go index f8adcf3..7fe3d0d 100644 --- a/src/main/main.go +++ b/src/main/main.go @@ -153,7 +153,7 @@ func main() { slog.Error("failed making directory", "msg", err.Error()) } - if cfg.ServerCfg.Enabled || !cfg.Flags.PlaylistSet { + if cfg.ServerCfg.Enabled && !cfg.Flags.PlaylistSet { exploPath, err := os.Executable() if err != nil { diff --git a/src/util/metadata.go b/src/util/metadata.go index 8c9d48d..039ede8 100644 --- a/src/util/metadata.go +++ b/src/util/metadata.go @@ -41,19 +41,19 @@ func BuildffmpegMetadata(track models.Track) []string { metadata = addStringTag(metadata, "title", track.Title) metadata = addStringTag(metadata, "album", track.Album) - metadata = addStringTag(metadata, "album_artist", track.AlbumArtist) - metadata = addStringTag(metadata, "artist-sort", track.ArtistSort) + metadata = addStringTag(metadata, "albumartist", track.AlbumArtist) + metadata = addStringTag(metadata, "artistsort", track.ArtistSort) metadata = addStringTag(metadata, "date", track.OriginalDate) metadata = addStringTag(metadata, "genre", track.Genres) metadata = addStringTag(metadata, "TMED", track.Media) - metadata = addStringTag(metadata, "MusicBrainz Album Type", track.ReleaseType) - metadata = addStringTag(metadata, "MusicBrainz Album Status", track.ReleaseStatus) - metadata = addStringTag(metadata, "MusicBrainz Release Group Id", track.MusicBrainzReleaseGroupID) - metadata = addStringTag(metadata, "MusicBrainz Album Artist Id", track.MusicBrainzAlbumArtistID) - metadata = addStringTag(metadata, "MusicBrainz Track Id", track.MusicBrainzTrackID) - metadata = addStringTag(metadata, "MusicBrainz Album Id", track.MusicBrainzAlbumID) - metadata = addStringTag(metadata, "MusicBrainz Release Track Id", track.MusicBrainzReleaseTrackID) - metadata = addStringTag(metadata, "MusicBrainz Artist Id", track.MusicBrainzArtistID) + metadata = addStringTag(metadata, "MusicBrainz_AlbumType", track.ReleaseType) + metadata = addStringTag(metadata, "MusicBrainz_AlbumStatus", track.ReleaseStatus) + metadata = addStringTag(metadata, "MusicBrainz_ReleaseGroupId", track.MusicBrainzReleaseGroupID) + metadata = addStringTag(metadata, "MusicBrainz_AlbumArtistId", track.MusicBrainzAlbumArtistID) + metadata = addStringTag(metadata, "MusicBrainz_TrackId", track.MusicBrainzTrackID) + metadata = addStringTag(metadata, "MusicBrainz_AlbumId", track.MusicBrainzAlbumID) + metadata = addStringTag(metadata, "MusicBrainz_ReleaseTrackId", track.MusicBrainzReleaseTrackID) + metadata = addStringTag(metadata, "MusicBrainz_ArtistId", track.MusicBrainzArtistID) metadata = addIntTag(metadata, "originalyear", track.OriginalYear) metadata = addIntTag(metadata, "track", track.TrackNumber)