From 2efa9433971f1e43aa9ce408f37ca0e6d4ebb468 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 18 Jan 2015 17:26:30 +0000 Subject: Merge all delivery methods --- p2pvr/daemon/maintenance/network.cpp | 28 ++++++++++++++++---------- p2pvr/lib/singleIterator.h | 38 ------------------------------------ 2 files changed, 18 insertions(+), 48 deletions(-) delete mode 100644 p2pvr/lib/singleIterator.h diff --git a/p2pvr/daemon/maintenance/network.cpp b/p2pvr/daemon/maintenance/network.cpp index 4ecb7d1..3c21639 100644 --- a/p2pvr/daemon/maintenance/network.cpp +++ b/p2pvr/daemon/maintenance/network.cpp @@ -5,7 +5,6 @@ #include #include #include -#include #include class SiNetworkInformationMerger : public SiNetworkInformationParser { @@ -39,15 +38,9 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { mergeTransports.loadComplete(commonObjects); mergeTransports.execute(NULL); - SqlMergeTask mergeDvbt("postgres", "delivery_dvbt"); - CreateColumns(boost::bind(&DatabaseClient::SqlMergeColumnsInserter, &mergeDvbt, _1, _2)); - for (const auto & s : n->TransportStreams) { - if (s->Terrestrial) { - mergeDvbt.sources.insert(new SingleIterator(&s->Terrestrial)); - } - } - mergeDvbt.loadComplete(commonObjects); - mergeDvbt.execute(NULL); + mergeDelivery("delivery_dvbt", n); + mergeDelivery("delivery_dvbs", n); + mergeDelivery("delivery_dvbc", n); SqlMergeTask mergeServices("postgres", "services"); CreateColumns(boost::bind(&DatabaseClient::SqlMergeColumnsInserter, &mergeServices, _1, _2)); @@ -59,6 +52,21 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { return false; } private: + template + void mergeDelivery(const std::string & table, DVBSI::NetworkPtr n) + { + SqlMergeTask merge("postgres", table); + CreateColumns(boost::bind(&DatabaseClient::SqlMergeColumnsInserter, &merge, _1, _2)); + std::vector dels; + for (const auto & s : n->TransportStreams) { + if (auto d = s.get()->*member) { + dels.push_back(d); + } + } + merge.sources.insert(new ContainerIterator(&dels)); + merge.loadComplete(commonObjects); + merge.execute(NULL); + } DatabaseClient * commonObjects; }; diff --git a/p2pvr/lib/singleIterator.h b/p2pvr/lib/singleIterator.h deleted file mode 100644 index acbe50b..0000000 --- a/p2pvr/lib/singleIterator.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SINGLEITERATOR_H -#define SINGLEITERATOR_H - -#include -#include "objectRowState.h" - -template -class SingleIterator : public IHaveSubTasks { - public: - SingleIterator(const T * i) : - SourceObject(__PRETTY_FUNCTION__), - IHaveSubTasks(NULL), - binder(boost::bind(&BindColumns, _1, _2)), - item(i) - { - } - - void execute(ExecContext * ec) const - { - ObjectRowState rs; - binder(rs, *item); - rs.process(boost::bind(&SingleIterator::executeChildren, this, ec)); - } - - private: - boost::function binder; - const T * item; - - void executeChildren(ExecContext * ec) const - { - for (const Tasks::value_type & sq : normal) { - sq->execute(ec); - } - } -}; - -#endif - -- cgit v1.2.3