dont try to get frontend informations when the eDVBServicePlay is a pvr service
[enigma2.git] / lib / service / event.cpp
index cfd2ac5f51fa96615aef3440e25e7b0f85d85e76..e76ea315968b3adbfa997f3837f8cb7eaa15d6c5 100644 (file)
@@ -5,6 +5,7 @@
 #include <dvbsi++/event_information_section.h>
 #include <dvbsi++/short_event_descriptor.h>
 #include <dvbsi++/extended_event_descriptor.h>
+#include <dvbsi++/linkage_descriptor.h>
 #include <dvbsi++/descriptor_tag.h>
 
 DEFINE_REF(eServiceEvent);
@@ -60,6 +61,9 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang, int tsidonid)
        {
                switch ((*desc)->getTag())
                {
+                       case LINKAGE_DESCRIPTOR:
+                               m_linkage_services.clear();
+                               break;
                        case SHORT_EVENT_DESCRIPTOR:
                        {
                                const ShortEventDescriptor *sed = (ShortEventDescriptor*)*desc;
@@ -99,6 +103,31 @@ bool eServiceEvent::loadLanguage(Event *evt, std::string lang, int tsidonid)
                                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;