void eChannelInfo::getServiceInfo( const eServiceReferenceDVB& service ) { closeEIT(); delete eit; eit=0; // eService *service=eServiceInterface::getInstance()->addRef(service); if (!service.path.size()) { DescriptionForEPGSearch = ""; cdescr.show(); cname.setFlags(RS_FADE); cname.resize( eSize( clientrect.width()/8*7-4, clientrect.height()/3) ); int opos=service.getDVBNamespace().get()>>16; if ( eSystemInfo::getInstance()->getFEType() == eSystemInfo::feSatellite ) copos.setText(eString().sprintf("%d.%d\xC2\xB0%c", abs(opos / 10), abs(opos % 10), opos>0?'E':'W') ); EITEvent *e = 0; e = eEPGCache::getInstance()->lookupEvent(service); if (e && eListBoxEntryService::nownextEPG) { time_t t = e->start_time+e->duration+61; delete e; e = eEPGCache::getInstance()->lookupEvent((const eServiceReferenceDVB&)service,t); } if (e) // data is in cache... { ParseEITInfo(e); delete e; } else // we parse the eit... { cname.setText(_("no data for this service avail")); eDVBServiceController *sapi=eDVB::getInstance()->getServiceAPI(); if (!sapi) return; eServiceReferenceDVB &ref = sapi->service; int type = ((service.getTransportStreamID()==ref.getTransportStreamID()) && (service.getOriginalNetworkID()==ref.getOriginalNetworkID())) ? EIT::tsActual:EIT::tsOther; eit = new EIT( EIT::typeNowNext, service.getServiceID().get(), type ); CONNECT( eit->tableReady, eChannelInfo::EITready ); eit->start(); } } else
static int searchforEvent(EITEvent *ev, const eString &search, eString &titlefound, eServiceReferenceDVB &new_ref, int intExactMatch, int intCaseSensitive, int genre) { eString title; eString sFind; int intFound = 0; // Genre Suchkriterium schlägt immer Titelsuche ;) if ( genre != 0) { int Range = 0; switch (genre) { case 32: Range = 36; break; case 48: Range = 51; break; case 64: Range = 75; break; case 80: Range = 85; break; case 96: Range = 102; break; case 112: Range = 123; break; case 128: Range = 131; break; case 144: Range = 151; break; case 160: Range = 167; break; case 176: Range = 179; break; default: break; } for (ePtrList<Descriptor>::iterator d(ev->descriptor); d != ev->descriptor.end(); ++d) { Descriptor *descriptor=*d; if(descriptor->Tag()==DESCR_CONTENT) { ContentDescriptor *cod=(ContentDescriptor*)descriptor; for(ePtrList<descr_content_entry_struct>::iterator ce(cod->contentList.begin()); ce != cod->contentList.end(); ++ce) { if ( genre < 32 ) { if (genre == ce->content_nibble_level_1*16+ce->content_nibble_level_2) intFound = 1; } else { int genreID = ce->content_nibble_level_1*16+ce->content_nibble_level_2; if ( (genreID >= genre) && (genreID <= Range)) intFound = 1; } } } } if (intFound) { LocalEventData led; led.getLocalData(ev, &title, 0); titlefound = title; } } else { if (search != "") { LocalEventData led; led.getLocalData(ev, &title, 0); titlefound = title; if (intExactMatch || intCaseSensitive) sFind = title; else sFind = title.upper(); if (!intExactMatch) { if (sFind.find(search) != eString::npos) intFound = 1; } else { if (!strcmp(search.c_str(),sFind.c_str())) intFound = 1; } } } if (intFound) { for (ePtrList<Descriptor>::iterator d(ev->descriptor); d != ev->descriptor.end(); ++d) { Descriptor *descriptor=*d; if (descriptor->Tag() == DESCR_LINKAGE) { LinkageDescriptor *ld=(LinkageDescriptor*)descriptor; if (ld->linkage_type==0xB0) { eServiceReferenceDVB MySubService(new_ref.getDVBNamespace(), eTransportStreamID(ld->transport_stream_id), eOriginalNetworkID(ld->original_network_id), eServiceID(ld->service_id), 7); new_ref = MySubService; break; } } } } return intFound; }