X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/31d233dcc551b3c18cf4025ddfdc080dbd408db9..20fdb2a2af40da98427a702a03a79b1fbec3d7af:/lib/service/event.cpp diff --git a/lib/service/event.cpp b/lib/service/event.cpp index 36446797..e76ea315 100644 --- a/lib/service/event.cpp +++ b/lib/service/event.cpp @@ -1,9 +1,11 @@ #include #include +#include #include #include #include #include +#include #include DEFINE_REF(eServiceEvent); @@ -52,20 +54,25 @@ std::string ISOtbl[MAX_LANG][2] = }; /* search for the presence of language from given EIT event descriptors*/ -bool eServiceEvent::loadLanguage(Event *evt, std::string lang) +bool eServiceEvent::loadLanguage(Event *evt, std::string lang, int tsidonid) { bool retval=0; for (DescriptorConstIterator desc = evt->getDescriptors()->begin(); desc != evt->getDescriptors()->end(); ++desc) { switch ((*desc)->getTag()) { + case LINKAGE_DESCRIPTOR: + m_linkage_services.clear(); + break; case SHORT_EVENT_DESCRIPTOR: { const ShortEventDescriptor *sed = (ShortEventDescriptor*)*desc; - if (lang.empty() || sed->getIso639LanguageCode() == lang) + const std::string &cc = sed->getIso639LanguageCode(); + int table=encodingHandler.getCountryCodeDefaultMapping(cc); + if (lang.empty() || cc == lang) { - m_event_name = convertDVBUTF8(sed->getEventName()); - m_short_description = convertDVBUTF8(sed->getText()); + m_event_name = convertDVBUTF8(sed->getEventName(), table, tsidonid); + m_short_description = convertDVBUTF8(sed->getText(), table, tsidonid); retval=1; } break; @@ -73,11 +80,14 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang) case EXTENDED_EVENT_DESCRIPTOR: { const ExtendedEventDescriptor *eed = (ExtendedEventDescriptor*)*desc; - if (lang.empty() || eed->getIso639LanguageCode() == lang) + const std::string &cc = eed->getIso639LanguageCode(); + int table=encodingHandler.getCountryCodeDefaultMapping(cc); + if (lang.empty() || cc == lang) { - m_extended_description += convertDVBUTF8(eed->getText()); + m_extended_description += convertDVBUTF8(eed->getText(), table, tsidonid); retval=1; } +#if 0 const ExtendedEventList *itemlist = eed->getItems(); for (ExtendedEventConstIterator it = itemlist->begin(); it != itemlist->end(); ++it) { @@ -86,16 +96,44 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang) m_extended_description += ' '; m_extended_description += convertDVBUTF8((*it)->getItem()); } +#endif break; } default: break; } } + if ( retval == 1 ) + { + for (DescriptorConstIterator desc = evt->getDescriptors()->begin(); desc != evt->getDescriptors()->end(); ++desc) + { + switch ((*desc)->getTag()) + { + case LINKAGE_DESCRIPTOR: + { + const LinkageDescriptor *ld = (LinkageDescriptor*)*desc; + if ( ld->getLinkageType() == 0xB0 ) + { + linkage_service s; + s.onid = ld->getOriginalNetworkId(); + s.tsid = ld->getTransportStreamId(); + s.sid = ld->getServiceId(); + const PrivateDataByteVector *privateData = + ld->getPrivateDataBytes(); + s.description.assign((const char*)&((*privateData)[0]), privateData->size()); + m_linkage_services.push_back(s); + } + break; + } + } + } + } + if ( m_extended_description.find(m_short_description) == 0 ) + m_short_description=""; return retval; } -RESULT eServiceEvent::parseFrom(Event *evt) +RESULT eServiceEvent::parseFrom(Event *evt, int tsidonid) { uint16_t stime_mjd = evt->getStartTimeMjd(); uint32_t stime_bcd = evt->getStartTimeBcd(); @@ -111,11 +149,11 @@ RESULT eServiceEvent::parseFrom(Event *evt) std::string country="de_DE"; // TODO use local data here for (int i=0; i < MAX_LANG; i++) if (country==ISOtbl[i][0]) - if (loadLanguage(evt,ISOtbl[i][1])) + if (loadLanguage(evt, ISOtbl[i][1], tsidonid)) return 0; - if (loadLanguage(evt,"eng")) + if (loadLanguage(evt, "eng", tsidonid)) return 0; - if (loadLanguage(evt,std::string())) + if (loadLanguage(evt, std::string(), tsidonid)) return 0; return 0; }