X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/cbaa4012ef5481091ac9b206e29e4c396859abe2..e4034b7fce157a23fcd2668a59ccc7a32d19ac84:/lib/service/event.cpp diff --git a/lib/service/event.cpp b/lib/service/event.cpp index d8f49f7e..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,31 +80,60 @@ 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(); - const ExtendedEventConstIterator it = itemlist->begin(); - int num=0; - while(it != itemlist->end()) + for (ExtendedEventConstIterator it = itemlist->begin(); it != itemlist->end(); ++it) { - eDebug("%d %s : %s", ++num, - convertDVBUTF8((*it)->getItem()).c_str(), - convertDVBUTF8((*it)->getItemDescription()).c_str()); + m_extended_description += '\n'; + m_extended_description += convertDVBUTF8((*it)->getItemDescription()); + m_extended_description += ' '; + m_extended_description += convertDVBUTF8((*it)->getItem()); } - // TODO handling for extended event items? ( producer... ) +#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(); @@ -113,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; }