diff --git a/ext/libstrawberry-tagreader/tagreadertaglib.cpp b/ext/libstrawberry-tagreader/tagreadertaglib.cpp index 0a1f482c..98d74e9f 100644 --- a/ext/libstrawberry-tagreader/tagreadertaglib.cpp +++ b/ext/libstrawberry-tagreader/tagreadertaglib.cpp @@ -134,6 +134,7 @@ TagLib::String QStringToTaglibString(const QString &s) { namespace { +constexpr char kID3v2_AcoustID_Fingerprint[] = "TXXX:Acoustid Fingerprint"; constexpr char kID3v2_MusicBrainz_AlbumArtistID[] = "TXXX:MusicBrainz Album Artist Id"; constexpr char kID3v2_MusicBrainz_ArtistID[] = "TXXX:MusicBrainz Artist Id"; constexpr char kID3v2_MusicBrainz_OriginalArtistID[] = "TXXX:MusicBrainz Original Artist Id"; @@ -148,6 +149,7 @@ constexpr char kID3v2_MusicBrainz_WorkID[] = "TXXX:MusicBrainz Work Id"; constexpr char kMP4_OriginalYear_ID[] = "----:com.apple.iTunes:ORIGINAL YEAR"; constexpr char kMP4_FMPS_Playcount_ID[] = "----:com.apple.iTunes:FMPS_Playcount"; constexpr char kMP4_FMPS_Rating_ID[] = "----:com.apple.iTunes:FMPS_Rating"; +constexpr char kMP4_AcoustID_Fingerprint[] = "----:com.apple.iTunes:Acoustid Fingerprint"; constexpr char kMP4_MusicBrainz_AlbumArtistID[] = "----:com.apple.iTunes:MusicBrainz Album Artist Id"; constexpr char kMP4_MusicBrainz_ArtistID[] = "----:com.apple.iTunes:MusicBrainz Artist Id"; constexpr char kMP4_MusicBrainz_OriginalArtistID[] = "----:com.apple.iTunes:MusicBrainz Original Artist Id"; @@ -161,6 +163,7 @@ constexpr char kMP4_MusicBrainz_WorkID[] = "----:com.apple.iTunes:MusicBrainz Wo constexpr char kASF_OriginalDate_ID[] = "WM/OriginalReleaseTime"; constexpr char kASF_OriginalYear_ID[] = "WM/OriginalReleaseYear"; +constexpr char kASF_AcoustID_Fingerprint[] = "Acoustid/Fingerprint"; constexpr char kASF_MusicBrainz_AlbumArtistID[] = "MusicBrainz/Album Artist Id"; constexpr char kASF_MusicBrainz_ArtistID[] = "MusicBrainz/Artist Id"; constexpr char kASF_MusicBrainz_OriginalArtistID[] = "MusicBrainz/Original Artist Id"; @@ -391,6 +394,10 @@ bool TagReaderTagLib::ReadFile(const QString &filename, spb::tagreader::SongMeta } } + if (map.contains(kID3v2_AcoustID_Fingerprint)) { + TStringToStdString(map[kID3v2_AcoustID_Fingerprint].front()->toString(), song->mutable_acoustid_fingerprint()); + } + if (map.contains(kID3v2_MusicBrainz_AlbumArtistID)) { TStringToStdString(map[kID3v2_MusicBrainz_AlbumArtistID].front()->toString(), song->mutable_musicbrainz_album_artist_id()); } @@ -489,6 +496,10 @@ bool TagReaderTagLib::ReadFile(const QString &filename, spb::tagreader::SongMeta TStringToStdString(mp4_tag->comment(), song->mutable_comment()); + if (mp4_tag->contains(kMP4_AcoustID_Fingerprint)) { + TStringToStdString(mp4_tag->item(kMP4_AcoustID_Fingerprint).toStringList().toString(), song->mutable_acoustid_fingerprint()); + } + if (mp4_tag->contains(kMP4_MusicBrainz_AlbumArtistID)) { TStringToStdString(mp4_tag->item(kMP4_MusicBrainz_AlbumArtistID).toStringList().toString(), song->mutable_musicbrainz_album_artist_id()); } @@ -565,6 +576,10 @@ bool TagReaderTagLib::ReadFile(const QString &filename, spb::tagreader::SongMeta } } + if (attributes_map.contains(kASF_AcoustID_Fingerprint)) { + TStringToStdString(attributes_map[kASF_AcoustID_Fingerprint].front().toString(), song->mutable_acoustid_fingerprint()); + } + if (attributes_map.contains(kASF_MusicBrainz_AlbumArtistID)) { TStringToStdString(attributes_map[kASF_MusicBrainz_AlbumArtistID].front().toString(), song->mutable_musicbrainz_album_artist_id()); } @@ -686,6 +701,8 @@ void TagReaderTagLib::ParseOggTag(const TagLib::Ogg::FieldListMap &map, QString if (map.contains("LYRICS")) TStringToStdString(map["LYRICS"].front(), song->mutable_lyrics()); else if (map.contains("UNSYNCEDLYRICS")) TStringToStdString(map["UNSYNCEDLYRICS"].front(), song->mutable_lyrics()); + if (map.contains("ACOUSTID_FINGERPRINT")) TStringToStdString(map["ACOUSTID_FINGERPRINT"].front(), song->mutable_acoustid_fingerprint()); + if (map.contains("MUSICBRAINZ_ALBUMARTISTID")) TStringToStdString(map["MUSICBRAINZ_ALBUMARTISTID"].front(), song->mutable_musicbrainz_album_artist_id()); if (map.contains("MUSICBRAINZ_ARTISTID")) TStringToStdString(map["MUSICBRAINZ_ARTISTID"].front(), song->mutable_musicbrainz_artist_id()); if (map.contains("MUSICBRAINZ_ORIGINALARTISTID")) TStringToStdString(map["MUSICBRAINZ_ORIGINALARTISTID"].front(), song->mutable_musicbrainz_original_artist_id()); @@ -748,6 +765,8 @@ void TagReaderTagLib::ParseAPETag(const TagLib::APE::ItemListMap &map, QString * } } + if (map.contains("ACOUSTID_FINGERPRINT")) TStringToStdString(map["ACOUSTID_FINGERPRINT"].toString(), song->mutable_acoustid_fingerprint()); + if (map.contains("MUSICBRAINZ_ALBUMARTISTID")) TStringToStdString(map["MUSICBRAINZ_ALBUMARTISTID"].toString(), song->mutable_musicbrainz_album_artist_id()); if (map.contains("MUSICBRAINZ_ARTISTID")) TStringToStdString(map["MUSICBRAINZ_ARTISTID"].toString(), song->mutable_musicbrainz_artist_id()); if (map.contains("MUSICBRAINZ_ORIGINALARTISTID")) TStringToStdString(map["MUSICBRAINZ_ORIGINALARTISTID"].toString(), song->mutable_musicbrainz_original_artist_id());