// check if the key is contained in the key<=>frameID mapping
ByteVector frameID = keyToFrameID(key);
if(!frameID.isNull()) {
- if(frameID[0] == 'T'){ // text frame
+ // Apple proprietary WFED (Podcast URL) is in fact a text frame.
+ if(frameID[0] == 'T' || frameID == "WFED"){ // text frame
TextIdentificationFrame *frame = new TextIdentificationFrame(frameID, String::UTF8);
frame->setText(values);
return frame;
// Other frames
{ "COMM", "COMMENT" },
//{ "USLT", "LYRICS" }, handled specially
+ // Apple iTunes proprietary frames
+ { "PCST", "PODCAST" },
+ { "TCAT", "PODCASTCATEGORY" },
+ { "TDES", "PODCASTDESC" },
+ { "TGID", "PODCASTID" },
+ { "WFED", "PODCASTURL" },
};
static const TagLib::uint txxxFrameTranslationSize = 8;
// workaround until this function is virtual
if(id == "TXXX")
return dynamic_cast< const UserTextIdentificationFrame* >(this)->asProperties();
- else if(id[0] == 'T')
+ // Apple proprietary WFED (Podcast URL) is in fact a text frame.
+ else if(id[0] == 'T' || id == "WFED")
return dynamic_cast< const TextIdentificationFrame* >(this)->asProperties();
else if(id == "WXXX")
return dynamic_cast< const UserUrlLinkFrame* >(this)->asProperties();
// Text Identification (frames 4.2)
- if(frameID.startsWith("T")) {
+ // Apple proprietary WFED (Podcast URL) is in fact a text frame.
+ if(frameID.startsWith("T") || frameID == "WFED") {
TextIdentificationFrame *f = frameID != "TXXX"
? new TextIdentificationFrame(data, header)
convertFrame("WPB", "WPUB", header);
convertFrame("WXX", "WXXX", header);
+ // Apple iTunes nonstandard frames
+ convertFrame("PCS", "PCST", header);
+ convertFrame("TCT", "TCAT", header);
+ convertFrame("TDR", "TDRL", header);
+ convertFrame("TDS", "TDES", header);
+ convertFrame("TID", "TGID", header);
+ convertFrame("WFD", "WFED", header);
+
break;
}