Exemplo n.º 1
0
 void operator() (const SIevent &e) {
   SIservices::iterator k=s->find(SIservice(e.service_id, e.original_network_id, e.transport_stream_id));
   if(k!=s->end()) {
     if(k->serviceName.length())
     e.saveXML(f, k->serviceName.c_str());
   }
   else
     e.saveXML(f);
 }
Exemplo n.º 2
0
// Entfernt anhand der Services alle time shifted events (ohne Text,
// mit service-id welcher im nvod steht)
// und sortiert deren Zeiten in die Events mit dem Text ein.
void SIevents::mergeAndRemoveTimeShiftedEvents(const SIservices &services)
{
	// Wir gehen alle services durch, suchen uns die services mit nvods raus
	// und fuegen dann die Zeiten der Events mit der service-id eines nvods
	// in das entsprechende Event mit der service-id das die nvods hat ein.
	// die 'nvod-events' werden auch geloescht

//  SIevents eventsToDelete; // Hier rein kommen Events die geloescht werden sollen
	for(SIservices::iterator k=services.begin(); k!=services.end(); k++)
		if(k->nvods.size()) {
			// NVOD-Referenzen gefunden
			// Zuerst mal das Event mit dem Text holen
//      iterator e;
			iterator e;
			for(e=begin(); e!=end(); e++)
				if(e->serviceID==k->serviceID)
					break;
			if(e!=end()) {
				// *e == event mit dem Text
				SIevent newEvent(*e); // Kopie des Events
				// Jetzt die nvods druchgehen und deren Uhrzeiten in obiges Event einfuegen
				for(SInvodReferences::iterator n=k->nvods.begin(); n!=k->nvods.end(); n++) {
					// Alle druchgehen und deren Events suchen
					for(iterator en=begin(); en!=end(); en++) {
						if(en->serviceID==n->getServiceID()) {
							newEvent.times.insert(en->times.begin(), en->times.end());
//              newEvent.times.insert(SItime(en->startzeit, en->dauer));
//	      eventsToDelete.insert(SIevent(*en));
						}
					}
				}
				erase(e); // Altes Event loeschen -> iterator (e) ungültig
				insert(newEvent); // und das erweiterte Event wieder einfuegen
			}
		}

	//
	//      delete all events with serviceID that have a service type 0
	//
	for (iterator it = begin(); it != end(); )
	{
		SIservices::iterator s = services.find(SIservice(it->serviceID, it->originalNetworkID));
		if ((s != services.end()) && (s->serviceTyp == 0))
		{
			// Set is a Sorted Associative Container
			// Erasing an element from a set also does not invalidate any iterators,
			// except, of course, for iterators that actually point to the element
			// that is being erased. 

			iterator jt = it;
			it++;             // the iterator it points to the next element
			erase(jt);        // hence it is not invalidated
		}
		else
			it++;
	}
}
Exemplo n.º 3
0
int main(int /*argc*/, char** /*argv*/)
{
  time_t starttime, endtime;
  SIsectionsSDT sdtset;
#ifdef READ_PRESENT_INFOS
  SIsectionsEIT epgset;
#else
  SIsectionsEITschedule epgset;
#endif

  tzset(); // TZ auswerten

  starttime=time(NULL);
  epgset.readSections();
  sdtset.readSections();
  endtime=time(NULL);
  printf("EIT Sections read: %d\n", epgset.size());
  printf("SDT Sections read: %d\n", sdtset.size());
  printf("Time needed: %ds\n", (int)difftime(endtime, starttime));
//  for_each(epgset.begin(), epgset.end(), printSmallSectionHeader());
//  for_each(epgset.begin(), epgset.end(), printSIsection());
  SIevents events;
  for(SIsectionsEIT::iterator k=epgset.begin(); k!=epgset.end(); k++)
    events.insert((k->events()).begin(), (k->events()).end());

  SIservices services;
  for(SIsectionsSDT::iterator k=sdtset.begin(); k!=sdtset.end(); k++)
    services.insert((k->services()).begin(), (k->services()).end());

  // Damit wir die Zeiten der nvods richtig einsortiert bekommen
  // Ist bei epgLarge eigentlich nicht noetig, da die NVODs anscheinend nur im present/actual (epgSmall) vorkommen
  events.mergeAndRemoveTimeShiftedEvents(services);

  for_each(events.begin(), events.end(), printSIeventWithService(services));
//  for_each(events.begin(), events.end(), printSIevent());
//  for_each(epgset.begin(), epgset.end(), printSIsectionEIT());

//  int i=0;
//  for(SIsectionsEIT::iterator s=epgset.begin(); s!=epgset.end(); s++, i++) {
//    char fname[20];
//    sprintf(fname, "seit%d", i+1);
//    s->saveBufferToFile(fname);
//  }
  return 0;
}