static bool parse_chan_info(const QString &rawdata, IPTVChannelInfo &info, QString &channum, uint &lineNum) { // #EXTINF:0,2 - France 2 <-- duration,channum - channame // #EXTMYTHTV:xmltvid=C2.telepoche.com <-- optional line (myth specific) // #... <-- ignored comments // rtsp://maiptv.iptv.fr/iptvtv/201 <-- url QString name; QString xmltvid; while (true) { QString line = rawdata.section("\n", lineNum, lineNum); if (line.isEmpty()) return false; ++lineNum; if (line.startsWith("#")) { if (line.startsWith("#EXTINF:")) { parse_extinf(line.mid(line.indexOf(':')+1), channum, name); } else if (line.startsWith("#EXTMYTHTV:")) { QString data = line.mid(line.indexOf(':')+1); if (data.startsWith("xmltvid=")) { xmltvid = data.mid(data.indexOf('=')+1); } } else { // Just ignore other comments } } else { if (name.isEmpty()) return false; QString url = line; info = IPTVChannelInfo(name, url, xmltvid); return true; } } }
static bool parse_chan_info(const QString &rawdata, IPTVChannelInfo &info, QString &channum, uint &lineNum) { // #EXTINF:0,2 - France 2 <-- duration,channum - channame // #EXTMYTHTV:xmltvid=C2.telepoche.com <-- optional line (myth specific) // #EXTMYTHTV:bitrate=BITRATE <-- optional line (myth specific) // #EXTMYTHTV:fectype=FECTYPE <-- optional line (myth specific) // The FECTYPE can be rfc2733, rfc5109, or smpte2022 // #EXTMYTHTV:fecurl0=URL <-- optional line (myth specific) // #EXTMYTHTV:fecurl1=URL <-- optional line (myth specific) // #EXTMYTHTV:fecbitrate0=BITRATE <-- optional line (myth specific) // #EXTMYTHTV:fecbitrate1=BITRATE <-- optional line (myth specific) // #... <-- ignored comments // rtsp://maiptv.iptv.fr/iptvtv/201 <-- url QString name; QMap<QString,QString> values; while (true) { QString line = rawdata.section("\n", lineNum, lineNum); if (line.isEmpty()) return false; ++lineNum; if (line.startsWith("#")) { if (line.startsWith("#EXTINF:")) { parse_extinf(line.mid(line.indexOf(':')+1), channum, name); } else if (line.startsWith("#EXTMYTHTV:")) { QString data = line.mid(line.indexOf(':')+1); QString key = data.left(data.indexOf('=')); if (!key.isEmpty()) values[key] = data.mid(data.indexOf('=')+1); } continue; } if (name.isEmpty()) return false; QMap<QString,QString>::const_iterator it = values.begin(); for (; it != values.end(); ++it) { LOG(VB_GENERAL, LOG_INFO, QString("parse_chan_info [%1]='%2'") .arg(it.key()).arg(*it)); } info = IPTVChannelInfo( name, values["xmltvid"], line, values["bitrate"].toUInt(), values["fectype"], values["fecurl0"], values["fecbitrate0"].toUInt(), values["fecurl1"], values["fecbitrate1"].toUInt()); return true; } }