bool CTagLoaderTagLib::ParseASF(ASF::Tag *asf, EmbeddedArt *art, CMusicInfoTag& tag) { if (!asf) return false; tag.SetTitle(asf->title().to8Bit(true)); const ASF::AttributeListMap& attributeListMap = asf->attributeListMap(); for (ASF::AttributeListMap::ConstIterator it = attributeListMap.begin(); it != attributeListMap.end(); ++it) { if (it->first == "Author") SetArtist(tag, GetASFStringList(it->second)); else if (it->first == "WM/AlbumArtist") SetAlbumArtist(tag, GetASFStringList(it->second)); else if (it->first == "WM/AlbumTitle") tag.SetAlbum(it->second.front().toString().to8Bit(true)); else if (it->first == "WM/TrackNumber" || it->first == "WM/Track") { if (it->second.front().type() == ASF::Attribute::DWordType) tag.SetTrackNumber(it->second.front().toUInt()); else tag.SetTrackNumber(atoi(it->second.front().toString().toCString(true))); } else if (it->first == "WM/PartOfSet") tag.SetPartOfSet(atoi(it->second.front().toString().toCString(true))); else if (it->first == "WM/Genre") SetGenre(tag, GetASFStringList(it->second)); else if (it->first == "WM/AlbumArtistSortOrder") {} // Known unsupported, supress warnings else if (it->first == "WM/ArtistSortOrder") {} // Known unsupported, supress warnings else if (it->first == "WM/Script") {} // Known unsupported, supress warnings else if (it->first == "WM/Year") tag.SetYear(atoi(it->second.front().toString().toCString(true))); else if (it->first == "MusicBrainz/Artist Id") tag.SetMusicBrainzArtistID(GetASFStringList(it->second)); else if (it->first == "MusicBrainz/Album Id") tag.SetMusicBrainzAlbumID(it->second.front().toString().to8Bit(true)); else if (it->first == "MusicBrainz/Album Artist") SetAlbumArtist(tag, GetASFStringList(it->second)); else if (it->first == "MusicBrainz/Album Artist Id") tag.SetMusicBrainzAlbumArtistID(GetASFStringList(it->second)); else if (it->first == "MusicBrainz/Track Id") tag.SetMusicBrainzTrackID(it->second.front().toString().to8Bit(true)); else if (it->first == "MusicBrainz/Album Status") {} else if (it->first == "MusicBrainz/Album Type") {} else if (it->first == "MusicIP/PUID") {} else if (it->first == "replaygain_track_gain") tag.SetReplayGainTrackGain((int)(atof(it->second.front().toString().toCString(true)) * 100 + 0.5)); else if (it->first == "replaygain_album_gain") tag.SetReplayGainAlbumGain((int)(atof(it->second.front().toString().toCString(true)) * 100 + 0.5)); else if (it->first == "replaygain_track_peak") tag.SetReplayGainTrackPeak((float)atof(it->second.front().toString().toCString(true))); else if (it->first == "replaygain_album_peak") tag.SetReplayGainAlbumPeak((float)atof(it->second.front().toString().toCString(true))); else if (it->first == "WM/Picture") { // picture ASF::Picture pic = it->second.front().toPicture(); tag.SetCoverArtInfo(pic.picture().size(), pic.mimeType().toCString()); if (art) art->set((const uint8_t *)pic.picture().data(), pic.picture().size(), pic.mimeType().toCString()); } else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX) CLog::Log(LOGDEBUG, "unrecognized ASF tag name: %s", it->first.toCString(true)); } // artist may be specified in the ContentDescription block rather than using the 'Author' attribute. if (tag.GetArtist().empty()) tag.SetArtist(asf->artist().toCString(true)); tag.SetLoaded(true); return true; }
bool CTagLoaderTagLib::ParseTag(ASF::Tag *asf, EmbeddedArt *art, CMusicInfoTag& tag) { if (!asf) return false; ReplayGain replayGainInfo; tag.SetTitle(asf->title().to8Bit(true)); const ASF::AttributeListMap& attributeListMap = asf->attributeListMap(); for (ASF::AttributeListMap::ConstIterator it = attributeListMap.begin(); it != attributeListMap.end(); ++it) { if (it->first == "Author") SetArtist(tag, GetASFStringList(it->second)); else if (it->first == "WM/AlbumArtist") SetAlbumArtist(tag, GetASFStringList(it->second)); else if (it->first == "WM/AlbumTitle") tag.SetAlbum(it->second.front().toString().to8Bit(true)); else if (it->first == "WM/TrackNumber" || it->first == "WM/Track") { if (it->second.front().type() == ASF::Attribute::DWordType) tag.SetTrackNumber(it->second.front().toUInt()); else tag.SetTrackNumber(atoi(it->second.front().toString().toCString(true))); } else if (it->first == "WM/PartOfSet") tag.SetDiscNumber(atoi(it->second.front().toString().toCString(true))); else if (it->first == "WM/Genre") SetGenre(tag, GetASFStringList(it->second)); else if (it->first == "WM/Mood") tag.SetMood(it->second.front().toString().to8Bit(true)); else if (it->first == "WM/Composer") AddArtistRole(tag, "Composer", GetASFStringList(it->second)); else if (it->first == "WM/Conductor") AddArtistRole(tag, "Conductor", GetASFStringList(it->second)); //No ASF/WMA tag from Taglib for "ensemble" else if (it->first == "WM/Writer") AddArtistRole(tag, "Lyricist", GetASFStringList(it->second)); else if (it->first == "WM/ModifiedBy") AddArtistRole(tag, "Remixer", GetASFStringList(it->second)); else if (it->first == "WM/Engineer") AddArtistRole(tag, "Engineer", GetASFStringList(it->second)); else if (it->first == "WM/Producer") AddArtistRole(tag, "Producer", GetASFStringList(it->second)); else if (it->first == "WM/DJMixer") AddArtistRole(tag, "DJMixer", GetASFStringList(it->second)); else if (it->first == "WM/Mixer") AddArtistRole(tag, "mixer", GetASFStringList(it->second)); else if (it->first == "WM/Publisher") {} // Known unsupported, supress warnings else if (it->first == "WM/AlbumArtistSortOrder") {} // Known unsupported, supress warnings else if (it->first == "WM/ArtistSortOrder") {} // Known unsupported, supress warnings else if (it->first == "WM/Script") {} // Known unsupported, supress warnings else if (it->first == "WM/Year") tag.SetYear(atoi(it->second.front().toString().toCString(true))); else if (it->first == "MusicBrainz/Artist Id") tag.SetMusicBrainzArtistID(SplitMBID(GetASFStringList(it->second))); else if (it->first == "MusicBrainz/Album Id") tag.SetMusicBrainzAlbumID(it->second.front().toString().to8Bit(true)); else if (it->first == "MusicBrainz/Album Artist") SetAlbumArtist(tag, GetASFStringList(it->second)); else if (it->first == "MusicBrainz/Album Artist Id") tag.SetMusicBrainzAlbumArtistID(SplitMBID(GetASFStringList(it->second))); else if (it->first == "MusicBrainz/Track Id") tag.SetMusicBrainzTrackID(it->second.front().toString().to8Bit(true)); else if (it->first == "MusicBrainz/Album Status") {} else if (it->first == "MusicBrainz/Album Type") {} else if (it->first == "MusicIP/PUID") {} else if (it->first == "replaygain_track_gain") replayGainInfo.ParseGain(ReplayGain::TRACK, it->second.front().toString().toCString(true)); else if (it->first == "replaygain_album_gain") replayGainInfo.ParseGain(ReplayGain::ALBUM, it->second.front().toString().toCString(true)); else if (it->first == "replaygain_track_peak") replayGainInfo.ParsePeak(ReplayGain::TRACK, it->second.front().toString().toCString(true)); else if (it->first == "replaygain_album_peak") replayGainInfo.ParsePeak(ReplayGain::ALBUM, it->second.front().toString().toCString(true)); else if (it->first == "WM/Picture") { // picture ASF::Picture pic = it->second.front().toPicture(); tag.SetCoverArtInfo(pic.picture().size(), pic.mimeType().toCString()); if (art) art->set(reinterpret_cast<const uint8_t *>(pic.picture().data()), pic.picture().size(), pic.mimeType().toCString()); } else if (g_advancedSettings.m_logLevel == LOG_LEVEL_MAX) CLog::Log(LOGDEBUG, "unrecognized ASF tag name: %s", it->first.toCString(true)); } // artist may be specified in the ContentDescription block rather than using the 'Author' attribute. if (tag.GetArtist().empty()) tag.SetArtist(asf->artist().toCString(true)); if (asf->comment() != String::null) tag.SetComment(asf->comment().toCString(true)); tag.SetReplayGain(replayGainInfo); tag.SetLoaded(true); return true; }