diff --git a/src/core/song.cpp b/src/core/song.cpp index 1dd4efa2c..884868fd9 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -142,7 +142,9 @@ const QString Song::kFtsUpdateSpec = Utilities::Updateify(Song::kFtsColumns).joi const QString Song::kManuallyUnsetCover = "(unset)"; const QString Song::kEmbeddedCover = "(embedded)"; -const QRegExp Song::kCoverRemoveDisc(" ?-? ((\\(|\\[)?)(Disc|CD) ?([0-9]{1,2})((\\)|\\])?)$"); +const QRegExp Song::kAlbumRemoveDisc(" ?-? ((\\(|\\[)?)(Disc|CD) ?([0-9]{1,2})((\\)|\\])?)$"); +const QRegExp Song::kAlbumRemoveMisc(" ?-? ((\\(|\\[)?)(Remastered) ?((\\)|\\])?)$"); +const QRegExp Song::kTitleRemoveMisc(" ?-? ((\\(|\\[)?)(Remastered|Live) ?((\\)|\\])?)$"); struct Song::Private : public QSharedData { @@ -820,7 +822,7 @@ void Song::InitFromFilePartial(const QString &filename) { void Song::InitArtManual() { QString album2 = d->album_; - album2.remove(Song::kCoverRemoveDisc); + album2.remove(Song::kAlbumRemoveDisc); //qLog(Debug) << __PRETTY_FUNCTION__ << d->artist_ << d->album_ << album2; diff --git a/src/core/song.h b/src/core/song.h index 555a4a4c3..ac6fc4bab 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -83,7 +83,9 @@ class Song { static const QString kManuallyUnsetCover; static const QString kEmbeddedCover; - static const QRegExp kCoverRemoveDisc; + static const QRegExp kAlbumRemoveDisc; + static const QRegExp kAlbumRemoveMisc; + static const QRegExp kTitleRemoveMisc; static const QRegExp kFilenameRemoveNonFatChars; static QString JoinSpec(const QString &table); diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index c1fd89b8a..5f6195c55 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -180,7 +180,8 @@ QString AlbumCoverChoiceController::LoadCoverFromURL(Song *song) { QString AlbumCoverChoiceController::SearchForCover(Song *song) { QString album = song->effective_album(); - album.remove(Song::kCoverRemoveDisc); + album.remove(Song::kAlbumRemoveDisc); + album.remove(Song::kAlbumRemoveMisc); // Get something sensible to stick in the search box QImage image = cover_searcher_->Exec(song->effective_albumartist(), album); @@ -305,7 +306,7 @@ void AlbumCoverChoiceController::SaveCover(Song *song, const QString &cover) { QString AlbumCoverChoiceController::SaveCoverInCache(const QString &artist, const QString &album, const QImage &image) { QString album2(album); - album2.remove(Song::kCoverRemoveDisc); + album2.remove(Song::kAlbumRemoveDisc); // Hash the artist and album into a filename for the image QString filename(Utilities::Sha1CoverHash(artist, album2).toHex() + ".jpg"); diff --git a/src/covermanager/albumcoverfetcher.cpp b/src/covermanager/albumcoverfetcher.cpp index ba5205854..9e6a7bd9d 100644 --- a/src/covermanager/albumcoverfetcher.cpp +++ b/src/covermanager/albumcoverfetcher.cpp @@ -50,7 +50,8 @@ quint64 AlbumCoverFetcher::FetchAlbumCover(const QString &artist, const QString CoverSearchRequest request; request.artist = artist; request.album = album; - request.album.remove(Song::kCoverRemoveDisc); + request.album.remove(Song::kAlbumRemoveDisc); + request.album.remove(Song::kAlbumRemoveMisc); request.search = false; request.id = next_id_++; request.fetchall = fetchall; @@ -65,7 +66,8 @@ quint64 AlbumCoverFetcher::SearchForCovers(const QString &artist, const QString CoverSearchRequest request; request.artist = artist; request.album = album; - request.album.remove(Song::kCoverRemoveDisc); + request.album.remove(Song::kAlbumRemoveDisc); + request.album.remove(Song::kAlbumRemoveMisc); request.search = true; request.id = next_id_++; request.fetchall = false; diff --git a/src/lyrics/lyricsfetcher.cpp b/src/lyrics/lyricsfetcher.cpp index 73985a32c..dc979cd47 100644 --- a/src/lyrics/lyricsfetcher.cpp +++ b/src/lyrics/lyricsfetcher.cpp @@ -25,12 +25,12 @@ #include #include "core/logging.h" +#include "core/song.h" #include "lyricsfetcher.h" #include "lyricsfetchersearch.h" const int LyricsFetcher::kMaxConcurrentRequests = 5; const QRegExp LyricsFetcher::kRemoveNonAlpha("[^a-zA-Z0-9\\d\\s]"); -const QRegExp LyricsFetcher::kRemoveFromTitle(" ?-? ((\\(|\\[)?)(Remastered|Live) ?((\\)|\\])?)$"); LyricsFetcher::LyricsFetcher(LyricsProviders *lyrics_providers, QObject *parent) : QObject(parent), @@ -50,10 +50,10 @@ quint64 LyricsFetcher::Search(const QString &artist, const QString &album, const request.artist = artist; request.album = album; request.album.remove(kRemoveNonAlpha); - request.album.remove(kRemoveFromTitle); + request.album.remove(Song::kTitleRemoveMisc); request.title = title; request.title.remove(kRemoveNonAlpha); - request.title.remove(kRemoveFromTitle); + request.title.remove(Song::kTitleRemoveMisc); request.id = next_id_++; AddRequest(request); diff --git a/src/lyrics/lyricsfetcher.h b/src/lyrics/lyricsfetcher.h index ef8627c71..e39c2ed54 100644 --- a/src/lyrics/lyricsfetcher.h +++ b/src/lyrics/lyricsfetcher.h @@ -65,7 +65,6 @@ class LyricsFetcher : public QObject { static const int kMaxConcurrentRequests; static const QRegExp kRemoveNonAlpha; - static const QRegExp kRemoveFromTitle; quint64 Search(const QString &artist, const QString &album, const QString &title); void Clear(); diff --git a/src/scrobbler/listenbrainzscrobbler.cpp b/src/scrobbler/listenbrainzscrobbler.cpp index f81e5e59b..fa0343778 100644 --- a/src/scrobbler/listenbrainzscrobbler.cpp +++ b/src/scrobbler/listenbrainzscrobbler.cpp @@ -334,7 +334,8 @@ void ListenBrainzScrobbler::UpdateNowPlaying(const Song &song) { if (!song.is_metadata_good()) return; QString album = song.album(); - album = album.remove(Song::kCoverRemoveDisc); + album = album.remove(Song::kAlbumRemoveDisc); + album = album.remove(Song::kAlbumRemoveMisc); QJsonObject object_track_metadata; object_track_metadata.insert("artist_name", QJsonValue::fromVariant(song.artist())); diff --git a/src/scrobbler/scrobblercache.cpp b/src/scrobbler/scrobblercache.cpp index c53084523..cd752bbea 100644 --- a/src/scrobbler/scrobblercache.cpp +++ b/src/scrobbler/scrobblercache.cpp @@ -182,9 +182,13 @@ ScrobblerCacheItem *ScrobblerCache::Add(const Song &song, const quint64 ×ta if (scrobbler_cache_.contains(timestamp)) return nullptr; QString album = song.album(); - album = album.remove(Song::kCoverRemoveDisc); + QString title = song.title(); - ScrobblerCacheItem *item = new ScrobblerCacheItem(song.artist(), album, song.title(), song.albumartist(), song.track(), song.length_nanosec(), timestamp); + album.remove(Song::kAlbumRemoveDisc); + album.remove(Song::kAlbumRemoveMisc); + title.remove(Song::kTitleRemoveMisc); + + ScrobblerCacheItem *item = new ScrobblerCacheItem(song.artist(), album, title, song.albumartist(), song.track(), song.length_nanosec(), timestamp); scrobbler_cache_.insert(timestamp, item); if (loaded_) DoInAMinuteOrSo(this, SLOT(WriteCache())); diff --git a/src/scrobbler/scrobblingapi20.cpp b/src/scrobbler/scrobblingapi20.cpp index 6c07870c7..e5628bd4f 100644 --- a/src/scrobbler/scrobblingapi20.cpp +++ b/src/scrobbler/scrobblingapi20.cpp @@ -384,7 +384,8 @@ void ScrobblingAPI20::UpdateNowPlaying(const Song &song) { if (!IsAuthenticated() || !song.is_metadata_good()) return; QString album = song.album(); - album = album.remove(Song::kCoverRemoveDisc); + album = album.remove(Song::kAlbumRemoveDisc); + album = album.remove(Song::kAlbumRemoveMisc); ParamList params = ParamList() << Param("method", "track.updateNowPlaying") diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index 7dd422f0d..3e8285d8b 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -792,6 +792,9 @@ Song TidalService::ParseSong(const int album_id_requested, const QJsonValue &val //qLog(Debug) << "id" << id << "track" << track << "disc" << disc << "title" << title << "album" << album << "artist" << artist << cover << allow_streaming << url; + title.remove(Song::kTitleRemoveMisc); + album.remove(Song::kAlbumRemoveMisc); + song.set_source(Song::Source_Tidal); song.set_id(song_id); song.set_album_id(album_id);