} // ProcessEpgPayload static void ProcessEpgPayload(byte[] data, SqlCeConnection cn) { var tvaMain = XmlSerialization.Deserialize <TvaMain>(data, true); if ((tvaMain == null) || (tvaMain.ProgramDescription == null) || (tvaMain.ProgramDescription.LocationTable == null) || (tvaMain.ProgramDescription.LocationTable.Schedule == null)) { Console.WriteLine("Empty or invalid data!"); // there's nothing to process return; } // if var tvaSchedule = tvaMain.ProgramDescription.LocationTable.Schedule; var epgService = EpgService.FromItem(tvaSchedule); epgService.GetDatabaseId(cn); Log(">> Service {0} (db {1}): {2} events (t{3})", epgService.ServiceId, epgService.ServiceDatabaseId, epgService.Events.Length, Thread.CurrentThread.ManagedThreadId); // TODO: Provide fallback mechanism for deleting events pertaining to this service if (epgService.Events.Length == 0) { return; } var startTime = epgService.Events[0].StartTime; var today = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0).ToUniversalTime(); var tomorrow = today + new TimeSpan(1, 0, 0, 0); EpgDbSerialization.DeleteEvents(cn, epgService.ServiceDatabaseId, today, tomorrow); epgService.Save(cn); } // ProcessFile
} // ProcessParentalGuidance private UiBroadcastService GetService(EpgService service) { var identifier = new Etsi.Ts102034.v010501.XmlSerialization.Common.TextualIdentifier() { ServiceName = service.ServiceNameReference, }; return(BroadcastDiscovery.TryGetService(UiBroadcastService.GetKey(identifier, ServiceProvider.DomainName))); } // GetService
} // DumpGuidanceCodes private void ProcessFile(string xmlFile) { ExtendedPurchaseItem item; var filename = Path.GetFileName(xmlFile); try { item = XmlSerialization.Deserialize <TvaMain>(xmlFile, trimExtraWhitespace: true, namespaceReplacer: NamespaceUnification.Replacer) as ExtendedPurchaseItem; } catch (Exception ex) { Console.WriteLine("Unable to read {0}: {1}", filename, ex.Message); return; } // try-catch try { var schedule = item.ProgramDescription.LocationTable.Schedule; var epgService = EpgService.FromSchedule(schedule); if (epgService.Programs == null) { var service = GetService(epgService); Console.WriteLine("> {0} {1} ({2}) has no events", service?.DisplayLogicalNumber, service?.DisplayName, schedule.ServiceIdRef); return; } // if EpgServices[schedule.ServiceIdRef] = epgService; foreach (var scheduleEvent in schedule.Events) { ProcessEvent(scheduleEvent, schedule.ServiceIdRef); } // foreach offering } catch (Exception ex) { Console.WriteLine("Exception in file {0}: {1}", filename, ex.Message); return; } // try-catch } // ProcessFile
protected override int Run(string[] args) { var startTime = DateTime.UtcNow.TruncateToMinutes(); // create initial programs list var list = new List <EpgProgram>(); var program = new EpgProgram() { Title = "Program 1", UtcStartTime = startTime, Duration = new TimeSpan(0, 15, 0) }; list.Add(program); program = new EpgProgram() { Title = "Program 2", UtcStartTime = program.UtcEndTime, Duration = new TimeSpan(0, 20, 0) }; list.Add(program); program = new EpgProgram() { Title = "Program 3", UtcStartTime = program.UtcEndTime + new TimeSpan(0, 5, 0), Duration = new TimeSpan(0, 25, 0) }; list.Add(program); var service = new EpgService() { ServiceIdReference = "1.imagenio.es", XmlPrograms = list.ToArray() }; // enumerate programs Console.WriteLine("Original programs"); foreach (var epgProgram in service.Programs) { DisplayProgram(epgProgram); } // foreach Console.WriteLine(); Console.WriteLine("Adding to datastore"); var datastore = new EpgMemoryDatastore(); datastore.Add(service); Console.WriteLine(); Console.WriteLine("Original programs after being added"); foreach (var epgProgram in service.Programs) { DisplayProgram(epgProgram); } // foreach Console.WriteLine(); Console.WriteLine("Programs in 1.imagenio.es (now)"); var epgPrograms = datastore.GetPrograms("1.imagenio.es", null, 0, 0); DisplayEpgPrograms(epgPrograms); Console.WriteLine(); Console.WriteLine("Programs in 1.imagenio.es (in 25 minutes)"); epgPrograms = datastore.GetPrograms("1.imagenio.es", startTime + new TimeSpan(0, 25, 0), 0, 0); DisplayEpgPrograms(epgPrograms); Console.WriteLine(); Console.WriteLine("Programs in 1.imagenio.es (in 2 hours)"); epgPrograms = datastore.GetPrograms("1.imagenio.es", startTime + new TimeSpan(2, 0, 0), 0, 0); DisplayEpgPrograms(epgPrograms); Console.WriteLine(); Console.WriteLine("Programs in 1.imagenio.es (15 minutes ago)"); epgPrograms = datastore.GetPrograms("1.imagenio.es", startTime - new TimeSpan(0, 15, 0), 0, 0); DisplayEpgPrograms(epgPrograms); Console.WriteLine(); return(0); } // Run