From f32e559558809c16889726e5d9cfe59ffb0797fc Mon Sep 17 00:00:00 2001 From: randomdan Date: Thu, 5 Dec 2013 23:20:53 +0000 Subject: Move parent object Ids into domain objects, remove all the parent object mess from binders --- p2pvr/ice/p2pvr.ice | 5 +++++ p2pvr/lib/containerIterator.h | 5 ++--- p2pvr/lib/dvbsiHelpers.h | 19 +++++++------------ p2pvr/lib/dvbsiHelpers/cableDelivery.cpp | 5 +++-- p2pvr/lib/dvbsiHelpers/networkService.cpp | 4 ++-- p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp | 4 ++-- p2pvr/lib/dvbsiHelpers/programMap.cpp | 4 ++-- p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp | 5 +++-- p2pvr/lib/dvbsiHelpers/service.cpp | 13 +++++++------ p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp | 4 ++-- p2pvr/lib/maintenance/network.cpp | 6 +++--- p2pvr/lib/maintenance/programMap.cpp | 2 +- p2pvr/lib/maintenance/services.cpp | 2 +- p2pvr/lib/objectRowState.h | 4 ++-- p2pvr/lib/siParsers/network.cpp | 6 +++++- p2pvr/lib/siParsers/programMap.cpp | 1 + p2pvr/lib/siParsers/service.cpp | 1 + p2pvr/lib/singleIterator.h | 5 ++--- 18 files changed, 51 insertions(+), 44 deletions(-) diff --git a/p2pvr/ice/p2pvr.ice b/p2pvr/ice/p2pvr.ice index 7d84955..b5903d3 100644 --- a/p2pvr/ice/p2pvr.ice +++ b/p2pvr/ice/p2pvr.ice @@ -20,6 +20,7 @@ module Common { module DVBSI { // Descriptors class Delivery { + int TransportStreamId; long Frequency; }; @@ -57,11 +58,13 @@ module DVBSI { struct NetworkService { int ServiceId; + int TransportStreamId; short ServiceType; }; sequence NetworkServiceList; class NetworkTransportStream { + int NetworkId; int TransportStreamId; int OriginalNetworkId; SatelliteDelivery Satellite; @@ -92,6 +95,7 @@ module DVBSI { class Service { int ServiceId; + int TransportStreamId; bool EitSchedule; bool EitPresentFollowing; short RunningStatus; @@ -112,6 +116,7 @@ module DVBSI { class Stream { short Type; int Id; + int ServiceId; }; sequence StreamList; diff --git a/p2pvr/lib/containerIterator.h b/p2pvr/lib/containerIterator.h index 6c43a41..2b61055 100644 --- a/p2pvr/lib/containerIterator.h +++ b/p2pvr/lib/containerIterator.h @@ -8,11 +8,10 @@ template class ContainerIterator : public IHaveSubTasks { public: - template - ContainerIterator(const T * con, const Parents & ... p) : + ContainerIterator(const T * con) : SourceObject(__PRETTY_FUNCTION__), IHaveSubTasks(NULL), - binder(boost::bind(&BindColumns, _1, _2, p...)), + binder(boost::bind(&BindColumns, _1, _2)), container(con) { } diff --git a/p2pvr/lib/dvbsiHelpers.h b/p2pvr/lib/dvbsiHelpers.h index 132c1b5..b8cc1cf 100644 --- a/p2pvr/lib/dvbsiHelpers.h +++ b/p2pvr/lib/dvbsiHelpers.h @@ -9,19 +9,14 @@ template<> void BindColumns(RowState & rs, const T & obj); \ template<> void UnbindColumns(RowState & rs, const T & s) -#define ColumnHelperParent(T, P) \ - template<> void CreateColumns(const ColumnCreator & cc); \ - template<> void BindColumns(RowState & rs, const T & obj, const P & parent); \ - template<> void UnbindColumns(RowState & rs, const T & s) - ColumnHelper(DVBSI::NetworkPtr); -ColumnHelperParent(DVBSI::NetworkTransportStreamPtr, DVBSI::NetworkPtr); -ColumnHelperParent(DVBSI::NetworkService, DVBSI::NetworkTransportStreamPtr); -ColumnHelperParent(DVBSI::TerrestrialDeliveryPtr, DVBSI::TransportStreamPtr); -ColumnHelperParent(DVBSI::CableDeliveryPtr, DVBSI::TransportStreamPtr); -ColumnHelperParent(DVBSI::SatelliteDeliveryPtr, DVBSI::TransportStreamPtr); -ColumnHelperParent(DVBSI::ServicePtr, DVBSI::TransportStreamPtr); -ColumnHelperParent(DVBSI::StreamPtr, DVBSI::ProgramMapPtr); +ColumnHelper(DVBSI::NetworkTransportStreamPtr); +ColumnHelper(DVBSI::NetworkService); +ColumnHelper(DVBSI::TerrestrialDeliveryPtr); +ColumnHelper(DVBSI::CableDeliveryPtr); +ColumnHelper(DVBSI::SatelliteDeliveryPtr); +ColumnHelper(DVBSI::ServicePtr); +ColumnHelper(DVBSI::StreamPtr); ColumnHelper(DVBSI::EventPtr); #endif diff --git a/p2pvr/lib/dvbsiHelpers/cableDelivery.cpp b/p2pvr/lib/dvbsiHelpers/cableDelivery.cpp index a550de7..94aa275 100644 --- a/p2pvr/lib/dvbsiHelpers/cableDelivery.cpp +++ b/p2pvr/lib/dvbsiHelpers/cableDelivery.cpp @@ -15,10 +15,10 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::CableDeliveryPtr & s, const DVBSI::NetworkTransportStreamPtr & ts) +BindColumns(RowState & rs, const DVBSI::CableDeliveryPtr & s) { rs.fields[0] << s->Frequency; - rs.fields[1] << ts->TransportStreamId; + rs.fields[1] << s->TransportStreamId; rs.fields[2] << s->FecOuter; rs.fields[3] << s->Modulation; rs.fields[4] << s->SymbolRate; @@ -29,6 +29,7 @@ void UnbindColumns(RowState & rs, DVBSI::CableDeliveryPtr const & s) { rs.fields[0] >> s->Frequency; + rs.fields[1] >> s->TransportStreamId; rs.fields[2] >> s->FecOuter; rs.fields[3] >> s->Modulation; rs.fields[4] >> s->SymbolRate; diff --git a/p2pvr/lib/dvbsiHelpers/networkService.cpp b/p2pvr/lib/dvbsiHelpers/networkService.cpp index 60b357a..80700b4 100644 --- a/p2pvr/lib/dvbsiHelpers/networkService.cpp +++ b/p2pvr/lib/dvbsiHelpers/networkService.cpp @@ -12,10 +12,10 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::NetworkService & s, const DVBSI::NetworkTransportStreamPtr & ts) +BindColumns(RowState & rs, const DVBSI::NetworkService & s) { rs.fields[0] << s.ServiceId; rs.fields[1] << s.ServiceType; - rs.fields[2] << ts->TransportStreamId; + rs.fields[2] << s.TransportStreamId; } diff --git a/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp b/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp index 884a7db..04f9bb0 100644 --- a/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp +++ b/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp @@ -12,10 +12,10 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::NetworkTransportStreamPtr & ts, const DVBSI::NetworkPtr & network) +BindColumns(RowState & rs, const DVBSI::NetworkTransportStreamPtr & ts) { rs.fields[0] << ts->TransportStreamId; - rs.fields[1] << network->NetworkId; + rs.fields[1] << ts->NetworkId; rs.fields[2] << ts->OriginalNetworkId; } diff --git a/p2pvr/lib/dvbsiHelpers/programMap.cpp b/p2pvr/lib/dvbsiHelpers/programMap.cpp index 5b543a9..60cf0d4 100644 --- a/p2pvr/lib/dvbsiHelpers/programMap.cpp +++ b/p2pvr/lib/dvbsiHelpers/programMap.cpp @@ -12,9 +12,9 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::StreamPtr & stream, const DVBSI::ProgramMapPtr & pmp) +BindColumns(RowState & rs, const DVBSI::StreamPtr & stream) { - rs.fields[0] << pmp->ServiceId; + rs.fields[0] << stream->ServiceId; rs.fields[1] << stream->Id; rs.fields[2] << stream->Type; } diff --git a/p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp b/p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp index a8d6f1a..a337df6 100644 --- a/p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp +++ b/p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp @@ -19,10 +19,10 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::SatelliteDeliveryPtr & s, const DVBSI::NetworkTransportStreamPtr & ts) +BindColumns(RowState & rs, const DVBSI::SatelliteDeliveryPtr & s) { rs.fields[0] << s->Frequency; - rs.fields[1] << ts->TransportStreamId; + rs.fields[1] << s->TransportStreamId; rs.fields[2] << s->OrbitalPosition; rs.fields[3] << s->WestEastFlag; rs.fields[4] << s->Polarization; @@ -37,6 +37,7 @@ void UnbindColumns(RowState & rs, DVBSI::SatelliteDeliveryPtr const & s) { rs.fields[0] >> s->Frequency; + rs.fields[1] << s->TransportStreamId; rs.fields[2] >> s->OrbitalPosition; rs.fields[3] >> s->WestEastFlag; rs.fields[4] >> s->Polarization; diff --git a/p2pvr/lib/dvbsiHelpers/service.cpp b/p2pvr/lib/dvbsiHelpers/service.cpp index dfc03be..88b09cc 100644 --- a/p2pvr/lib/dvbsiHelpers/service.cpp +++ b/p2pvr/lib/dvbsiHelpers/service.cpp @@ -14,12 +14,12 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::ServicePtr & s, const DVBSI::TransportStreamPtr & ts) +BindColumns(RowState & rs, const DVBSI::ServicePtr & s) { rs.fields[0] << s->ServiceId; - rs.fields[1] << ts->TransportStreamId; + rs.fields[1] << s->TransportStreamId; rs.fields[2] << s->Name; - rs.fields[4] << s->ProviderName; + rs.fields[3] << s->ProviderName; rs.fields[4] << s->DefaultAuthority; } @@ -28,8 +28,9 @@ void UnbindColumns(RowState & rs, DVBSI::ServicePtr const & s) { rs.fields[0] >> s->ServiceId; - rs.fields[0] >> s->Name; - rs.fields[0] >> s->ProviderName; - rs.fields[0] >> s->DefaultAuthority; + rs.fields[1] >> s->TransportStreamId; + rs.fields[2] >> s->Name; + rs.fields[3] >> s->ProviderName; + rs.fields[4] >> s->DefaultAuthority; } diff --git a/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp b/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp index dfacd01..d178845 100644 --- a/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp +++ b/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp @@ -22,10 +22,10 @@ CreateColumns(const ColumnCreator & cc) template<> void -BindColumns(RowState & rs, const DVBSI::TerrestrialDeliveryPtr & s, const DVBSI::NetworkTransportStreamPtr & ts) +BindColumns(RowState & rs, const DVBSI::TerrestrialDeliveryPtr & s) { rs.fields[0] << s->Frequency; - rs.fields[1] << ts->TransportStreamId; + rs.fields[1] << s->TransportStreamId; rs.fields[2] << s->Bandwidth; rs.fields[3] << s->Priority; rs.fields[4] << s->TimeSlicing; diff --git a/p2pvr/lib/maintenance/network.cpp b/p2pvr/lib/maintenance/network.cpp index 6b0ebc6..1cd224a 100644 --- a/p2pvr/lib/maintenance/network.cpp +++ b/p2pvr/lib/maintenance/network.cpp @@ -34,7 +34,7 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { SqlMergeTask mergeTransports("postgres", "transportstreams"); CreateColumns(boost::bind(&Maintenance::SqlMergeColumnsInserter, &mergeTransports, _1, _2)); - mergeTransports.sources.insert(new ContainerIterator(&n->TransportStreams, n)); + mergeTransports.sources.insert(new ContainerIterator(&n->TransportStreams)); mergeTransports.loadComplete(commonObjects); mergeTransports.execute(NULL); @@ -42,7 +42,7 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { CreateColumns(boost::bind(&Maintenance::SqlMergeColumnsInserter, &mergeDvbt, _1, _2)); BOOST_FOREACH(const auto & s, n->TransportStreams) { if (s->Terrestrial) { - mergeDvbt.sources.insert(new SingleIterator(&s->Terrestrial, s)); + mergeDvbt.sources.insert(new SingleIterator(&s->Terrestrial)); } } mergeDvbt.loadComplete(commonObjects); @@ -51,7 +51,7 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { SqlMergeTask mergeServices("postgres", "services"); CreateColumns(boost::bind(&Maintenance::SqlMergeColumnsInserter, &mergeServices, _1, _2)); BOOST_FOREACH(const auto & s, n->TransportStreams) { - mergeServices.sources.insert(new ContainerIterator(&s->Services, s)); + mergeServices.sources.insert(new ContainerIterator(&s->Services)); } mergeServices.loadComplete(commonObjects); mergeServices.execute(NULL); diff --git a/p2pvr/lib/maintenance/programMap.cpp b/p2pvr/lib/maintenance/programMap.cpp index f230f77..ecbd126 100644 --- a/p2pvr/lib/maintenance/programMap.cpp +++ b/p2pvr/lib/maintenance/programMap.cpp @@ -24,7 +24,7 @@ class SiProgramMapHandler : public SiProgramMapParser { Logger()->messagef(LOG_DEBUG, "type: %02x id: %d", s->Type, s->Id); } BOOST_FOREACH(const auto & s, pmp->Streams) { - BindColumns(rowState, s, pmp); + BindColumns(rowState, s); rowState.process(callBack); } } diff --git a/p2pvr/lib/maintenance/services.cpp b/p2pvr/lib/maintenance/services.cpp index 30df800..bd4d9a2 100644 --- a/p2pvr/lib/maintenance/services.cpp +++ b/p2pvr/lib/maintenance/services.cpp @@ -27,7 +27,7 @@ class SiServicesMerger : public SiServicesParser { // Don't change the list of services available from the network mergeServices.doDelete = VariableType(false); mergeServices.doInsert = VariableType(false); - mergeServices.sources.insert(new ContainerIterator(&ts->Services, ts)); + mergeServices.sources.insert(new ContainerIterator(&ts->Services)); mergeServices.loadComplete(commonObjects); mergeServices.execute(NULL); } diff --git a/p2pvr/lib/objectRowState.h b/p2pvr/lib/objectRowState.h index cf42055..9ba69f0 100644 --- a/p2pvr/lib/objectRowState.h +++ b/p2pvr/lib/objectRowState.h @@ -8,8 +8,8 @@ typedef boost::function ColumnCreator; typedef boost::function ColumnSpecifier; -template -void BindColumns(RowState &, const V &, const Parents & ...); +template +void BindColumns(RowState &, const V &); template void UnbindColumns(RowState &, const V &); diff --git a/p2pvr/lib/siParsers/network.cpp b/p2pvr/lib/siParsers/network.cpp index 9f7434a..d992706 100644 --- a/p2pvr/lib/siParsers/network.cpp +++ b/p2pvr/lib/siParsers/network.cpp @@ -136,6 +136,7 @@ SiNetworkInformationParser::ParseSiTable(const struct NetworkInformation * nit, LoopOver(nsh->data, HILO(nsh->transport_stream_loop_length), [this,n](const TransportStream * ts) { DVBSI::NetworkTransportStreamPtr nts = new DVBSI::NetworkTransportStream(); nts->TransportStreamId = ntohs(ts->transportStreamId); + nts->NetworkId = n->NetworkId; nts->OriginalNetworkId = ntohs(ts->originalNetworkId); ParseDescriptors(ts->data, HILO(ts->descriptors_length), 0x41, boost::bind(&SiNetworkInformationParser::parseDescriptor_ServiceList, nts, _1, _2), @@ -159,6 +160,7 @@ SiNetworkInformationParser::parseDescriptor_TerrestrialDelivery(DVBSI::NetworkTr auto tdd = reinterpret_cast(data); DVBSI::TerrestrialDeliveryPtr td = new DVBSI::TerrestrialDelivery; td->Frequency = ((uint64_t)ntohl(tdd->Frequency)) * 10; + td->TransportStreamId = nts->TransportStreamId; td->Bandwidth = tdd->Bandwidth; td->Priority = tdd->Priority; td->TimeSlicing = tdd->TimeSlicing; @@ -180,6 +182,7 @@ SiNetworkInformationParser::parseDescriptor_CableDelivery(DVBSI::NetworkTranspor auto cdd = reinterpret_cast(data); DVBSI::CableDeliveryPtr cd = new DVBSI::CableDelivery; cd->Frequency = ((uint64_t)ntohl(cdd->Frequency)) * 10; + cd->TransportStreamId = nts->TransportStreamId; cd->FecOuter = cdd->FecOuter; cd->Modulation = cdd->Modulation; cd->SymbolRate = HILO4(cdd->SymbolRate); @@ -194,6 +197,7 @@ SiNetworkInformationParser::parseDescriptor_SatelliteDelivery(DVBSI::NetworkTran auto sdd = reinterpret_cast(data); DVBSI::SatelliteDeliveryPtr sd = new DVBSI::SatelliteDelivery; sd->Frequency = ((uint64_t)ntohl(sdd->Frequency)) * 10; + sd->TransportStreamId = nts->TransportStreamId; sd->OrbitalPosition = ntohs(sdd->OrbitalPosition); sd->WestEastFlag = sdd->WestEastFlag; sd->Polarization = sdd->Polarization; @@ -211,7 +215,7 @@ SiNetworkInformationParser::parseDescriptor_ServiceList(DVBSI::NetworkTransportS auto end = data + len; while (data < end) { auto d = reinterpret_cast(data); - nts->Services.push_back({ ntohs(d->ServiceId), d->ServiceType }); + nts->Services.push_back({ ntohs(d->ServiceId), nts->TransportStreamId, d->ServiceType }); data += sizeof(ServiceListDescriptor); } } diff --git a/p2pvr/lib/siParsers/programMap.cpp b/p2pvr/lib/siParsers/programMap.cpp index bb59017..61686dd 100644 --- a/p2pvr/lib/siParsers/programMap.cpp +++ b/p2pvr/lib/siParsers/programMap.cpp @@ -39,6 +39,7 @@ SiProgramMapParser::ParseSiTable(const struct ProgramMap * pm, DVBSI::ProgramMap DVBSI::StreamPtr s = new DVBSI::Stream(); s->Type = pms->stream_type; s->Id = HILO(pms->elementary_PID); + s->ServiceId = pmp->ServiceId; pmp->Streams.push_back(s); // Don't care what's in here, just need to move along pms = ParseDescriptors(pms->data, HILO(pms->ES_info_length)); diff --git a/p2pvr/lib/siParsers/service.cpp b/p2pvr/lib/siParsers/service.cpp index b8092af..56452e9 100644 --- a/p2pvr/lib/siParsers/service.cpp +++ b/p2pvr/lib/siParsers/service.cpp @@ -39,6 +39,7 @@ SiServicesParser::ParseSiTable(const TransportStreamDescriptor * tsd, DVBSI::Tra LoopOver(tsd->data, HILO(tsd->header.section_length) - 12, [this,ts](const ServiceDescriptor * sd) { DVBSI::ServicePtr s = new DVBSI::Service(); s->ServiceId = ntohs(sd->ServiceId); + s->TransportStreamId = ts->TransportStreamId; s->EitSchedule = sd->EitSchedule; s->EitPresentFollowing = sd->EitPresentFollowing; s->RunningStatus = sd->RunningStatus; diff --git a/p2pvr/lib/singleIterator.h b/p2pvr/lib/singleIterator.h index c8b9a1e..1aac418 100644 --- a/p2pvr/lib/singleIterator.h +++ b/p2pvr/lib/singleIterator.h @@ -8,11 +8,10 @@ template class SingleIterator : public IHaveSubTasks { public: - template - SingleIterator(const T * i, const Parents & ... p) : + SingleIterator(const T * i) : SourceObject(__PRETTY_FUNCTION__), IHaveSubTasks(NULL), - binder(boost::bind(&BindColumns, _1, _2, p...)), + binder(boost::bind(&BindColumns, _1, _2)), item(i) { } -- cgit v1.2.3