bool CTagLoaderTagLib::ParseAPETag(APE::Tag *ape, EmbeddedArt *art, CMusicInfoTag& tag) { if (!ape) return false; const APE::ItemListMap itemListMap = ape->itemListMap(); for (APE::ItemListMap::ConstIterator it = itemListMap.begin(); it != itemListMap.end(); ++it) { if (it->first == "ARTIST") SetArtist(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ALBUM ARTIST") SetAlbumArtist(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ALBUM") tag.SetAlbum(it->second.toString().to8Bit(true)); else if (it->first == "TITLE") tag.SetTitle(it->second.toString().to8Bit(true)); else if (it->first == "TRACKNUMBER") tag.SetTrackNumber(it->second.toString().toInt()); else if (it->first == "DISCNUMBER") tag.SetPartOfSet(it->second.toString().toInt()); else if (it->first == "YEAR") tag.SetYear(it->second.toString().toInt()); else if (it->first == "GENRE") SetGenre(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "COMMENT") tag.SetComment(it->second.toString().to8Bit(true)); else if (it->first == "ENCODEDBY") {} else if (it->first == "COMPILATION") tag.SetCompilation(it->second.toString().toInt() == 1); else if (it->first == "LYRICS") tag.SetLyrics(it->second.toString().to8Bit(true)); else if (it->first == "REPLAYGAIN_TRACK_GAIN") tag.SetReplayGainTrackGain((int)(atof(it->second.toString().toCString(true)) * 100 + 0.5)); else if (it->first == "REPLAYGAIN_ALBUM_GAIN") tag.SetReplayGainAlbumGain((int)(atof(it->second.toString().toCString(true)) * 100 + 0.5)); else if (it->first == "REPLAYGAIN_TRACK_PEAK") tag.SetReplayGainTrackPeak((float)atof(it->second.toString().toCString(true))); else if (it->first == "REPLAYGAIN_ALBUM_PEAK") tag.SetReplayGainAlbumPeak((float)atof(it->second.toString().toCString(true))); else if (it->first == "MUSICBRAINZ_ARTISTID") tag.SetMusicBrainzArtistID(it->second.toString().to8Bit(true)); else if (it->first == "MUSICBRAINZ_ALBUMARTISTID") tag.SetMusicBrainzAlbumArtistID(it->second.toString().to8Bit(true)); else if (it->first == "MUSICBRAINZ_ALBUMID") tag.SetMusicBrainzAlbumID(it->second.toString().to8Bit(true)); else if (it->first == "MUSICBRAINZ_TRACKID") tag.SetMusicBrainzTrackID(it->second.toString().to8Bit(true)); else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX) CLog::Log(LOGDEBUG, "unrecognized APE tag: %s", it->first.toCString(true)); } return true; }
bool CTagLoaderTagLib::ParseTag(APE::Tag *ape, EmbeddedArt *art, CMusicInfoTag& tag) { if (!ape) return false; ReplayGain replayGainInfo; const APE::ItemListMap itemListMap = ape->itemListMap(); for (APE::ItemListMap::ConstIterator it = itemListMap.begin(); it != itemListMap.end(); ++it) { if (it->first == "ARTIST") SetArtist(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ARTISTS") SetArtistHints(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ALBUMARTIST" || it->first == "ALBUM ARTIST") SetAlbumArtist(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ALBUMARTISTS" || it->first == "ALBUM ARTISTS") SetAlbumArtistHints(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "ALBUM") tag.SetAlbum(it->second.toString().to8Bit(true)); else if (it->first == "TITLE") tag.SetTitle(it->second.toString().to8Bit(true)); else if (it->first == "TRACKNUMBER" || it->first == "TRACK") tag.SetTrackNumber(it->second.toString().toInt()); else if (it->first == "DISCNUMBER" || it->first == "DISC") tag.SetDiscNumber(it->second.toString().toInt()); else if (it->first == "YEAR") tag.SetYear(it->second.toString().toInt()); else if (it->first == "GENRE") SetGenre(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "MOOD") tag.SetMood(it->second.toString().to8Bit(true)); else if (it->first == "COMMENT") tag.SetComment(it->second.toString().to8Bit(true)); else if (it->first == "CUESHEET") tag.SetCueSheet(it->second.toString().to8Bit(true)); else if (it->first == "ENCODEDBY") {} else if (it->first == "COMPOSER") AddArtistRole(tag, "Composer", StringListToVectorString(it->second.toStringList())); else if (it->first == "CONDUCTOR") AddArtistRole(tag, "Conductor", StringListToVectorString(it->second.toStringList())); else if ((it->first == "BAND") || (it->first == "ENSEMBLE")) AddArtistRole(tag, "Orchestra", StringListToVectorString(it->second.toStringList())); else if (it->first == "LYRICIST") AddArtistRole(tag, "Lyricist", StringListToVectorString(it->second.toStringList())); else if (it->first == "MIXARTIST") AddArtistRole(tag, "Remixer", StringListToVectorString(it->second.toStringList())); else if (it->first == "ARRANGER") AddArtistRole(tag, "Arranger", StringListToVectorString(it->second.toStringList())); else if (it->first == "ENGINEER") AddArtistRole(tag, "Engineer", StringListToVectorString(it->second.toStringList())); else if (it->first == "PRODUCER") AddArtistRole(tag, "Producer", StringListToVectorString(it->second.toStringList())); else if (it->first == "DJMIXER") AddArtistRole(tag, "DJMixer", StringListToVectorString(it->second.toStringList())); else if (it->first == "MIXER") AddArtistRole(tag, "Mixer", StringListToVectorString(it->second.toStringList())); else if (it->first == "PERFORMER") // Picard uses PERFORMER tag as musician credits list formatted "name (instrument)" AddArtistInstrument(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "LABEL") {} // Publisher. Known unsupported, supress warnings else if (it->first == "COMPILATION") tag.SetCompilation(it->second.toString().toInt() == 1); else if (it->first == "LYRICS") tag.SetLyrics(it->second.toString().to8Bit(true)); else if (it->first == "REPLAYGAIN_TRACK_GAIN") replayGainInfo.ParseGain(ReplayGain::TRACK, it->second.toString().toCString(true)); else if (it->first == "REPLAYGAIN_ALBUM_GAIN") replayGainInfo.ParseGain(ReplayGain::ALBUM, it->second.toString().toCString(true)); else if (it->first == "REPLAYGAIN_TRACK_PEAK") replayGainInfo.ParsePeak(ReplayGain::TRACK, it->second.toString().toCString(true)); else if (it->first == "REPLAYGAIN_ALBUM_PEAK") replayGainInfo.ParsePeak(ReplayGain::ALBUM, it->second.toString().toCString(true)); else if (it->first == "MUSICBRAINZ_ARTISTID") tag.SetMusicBrainzArtistID(SplitMBID(StringListToVectorString(it->second.toStringList()))); else if (it->first == "MUSICBRAINZ_ALBUMARTISTID") tag.SetMusicBrainzAlbumArtistID(SplitMBID(StringListToVectorString(it->second.toStringList()))); else if (it->first == "MUSICBRAINZ_ALBUMARTIST") SetAlbumArtist(tag, StringListToVectorString(it->second.toStringList())); else if (it->first == "MUSICBRAINZ_ALBUMID") tag.SetMusicBrainzAlbumID(it->second.toString().to8Bit(true)); else if (it->first == "MUSICBRAINZ_TRACKID") tag.SetMusicBrainzTrackID(it->second.toString().to8Bit(true)); else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX) CLog::Log(LOGDEBUG, "unrecognized APE tag: %s", it->first.toCString(true)); } tag.SetReplayGain(replayGainInfo); return true; }