A decentralized music tracking and discovery platform built on AT Protocol 🎵
listenbrainz spotify atproto lastfm musicbrainz scrobbling

fix(musicbrainz): add cleanTitle function to sanitize track names in search and hydrate handlers

Changed files
+26
musicbrainz
+26
musicbrainz/main.go
··· 7 "net/http" 8 "os" 9 "os/signal" 10 "time" 11 12 "github.com/labstack/echo/v4" ··· 71 return c.JSON(http.StatusBadRequest, map[string]string{"error": "invalid request"}) 72 } 73 74 resp, _ := s.mb.SearchMusicBrainz(c.Request().Context(), req) 75 76 return c.JSON(http.StatusOK, resp) ··· 83 return c.JSON(http.StatusBadRequest, map[string]string{"error": "invalid request"}) 84 } 85 86 resp, _ := musicbrainz.HydrateTrack(s.mb, req) 87 88 return c.JSON(http.StatusOK, resp) 89 }
··· 7 "net/http" 8 "os" 9 "os/signal" 10 + "strings" 11 "time" 12 13 "github.com/labstack/echo/v4" ··· 72 return c.JSON(http.StatusBadRequest, map[string]string{"error": "invalid request"}) 73 } 74 75 + req.Track = cleanTitle(req.Track) 76 resp, _ := s.mb.SearchMusicBrainz(c.Request().Context(), req) 77 78 return c.JSON(http.StatusOK, resp) ··· 85 return c.JSON(http.StatusBadRequest, map[string]string{"error": "invalid request"}) 86 } 87 88 + req.Name = cleanTitle(req.Name) 89 resp, _ := musicbrainz.HydrateTrack(s.mb, req) 90 91 return c.JSON(http.StatusOK, resp) 92 } 93 + 94 + func cleanTitle(title string) string { 95 + removePatterns := []string{ 96 + " - Album Version (Edited)", 97 + " - Album Version (Explicit)", 98 + " - Album Version", 99 + " (Album Version (Edited))", 100 + " (Album Version (Explicit))", 101 + " (Album Version)", 102 + " - Edited", 103 + " - Explicit", 104 + " - Radio Edit", 105 + " (Edited)", 106 + " (Explicit)", 107 + " (Radio Edit)", 108 + } 109 + 110 + for _, pattern := range removePatterns { 111 + title = strings.ReplaceAll(title, pattern, "") 112 + } 113 + 114 + return strings.TrimSpace(title) 115 + }