diff options
-rw-r--r-- | p2pvr/daemon/events.cpp | 32 | ||||
-rw-r--r-- | p2pvr/daemon/maintenance/events.cpp | 1 | ||||
-rw-r--r-- | p2pvr/daemon/maintenance/network.cpp | 3 | ||||
-rw-r--r-- | p2pvr/daemon/maintenance/services.cpp | 1 | ||||
-rw-r--r-- | p2pvr/daemon/schedules.cpp | 37 | ||||
-rw-r--r-- | p2pvr/daemon/si.cpp | 1 | ||||
-rw-r--r-- | p2pvr/ice/dvbsi.ice | 21 | ||||
-rw-r--r-- | p2pvr/lib/Jamfile.jam | 2 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers.h | 22 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/cableDelivery.cpp | 28 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/event.cpp | 64 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/network.cpp | 21 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/networkService.cpp | 22 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp | 23 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/programMap.cpp | 24 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp | 36 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/service.cpp | 34 | ||||
-rw-r--r-- | p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp | 42 | ||||
-rw-r--r-- | p2pvr/lib/objectRowState.cpp | 63 | ||||
-rw-r--r-- | p2pvr/lib/objectRowState.h | 16 | ||||
-rw-r--r-- | p2pvr/lib/p2pvrHelpers/schedule.cpp | 35 |
21 files changed, 100 insertions, 428 deletions
diff --git a/p2pvr/daemon/events.cpp b/p2pvr/daemon/events.cpp index 01fe01e..4c0bc76 100644 --- a/p2pvr/daemon/events.cpp +++ b/p2pvr/daemon/events.cpp @@ -5,38 +5,6 @@ template<> void -CreateColumns<P2PVR::EventPtr>(const ColumnCreator & cc) -{ - cc("eventUid", false); - cc("serviceId", true); - cc("eventId", true); - cc("title", false); - cc("titleLang", false); - cc("subtitle", false); - cc("description", false); - cc("descriptionLang", false); - cc("videoAspect", false); - cc("videoFrameRate", false); - cc("videoHd", false); - cc("audioChannels", false); - cc("audioLanguage", false); - cc("subtitleLanguage", false); - cc("category", false); - cc("subCategory", false); - cc("userCategory", false); - cc("dvbRating", false); - cc("startTime", false); - cc("stopTime", false); - cc("episode", false); - cc("episodes", false); - cc("year", false); - cc("flags", false); - cc("season", false); - cc("current", false); -} - -template<> -void BindColumns(RowState & rs, const P2PVR::EventPtr & e) { rs.fields[0] << e->ServiceId; diff --git a/p2pvr/daemon/maintenance/events.cpp b/p2pvr/daemon/maintenance/events.cpp index e309f39..01a333d 100644 --- a/p2pvr/daemon/maintenance/events.cpp +++ b/p2pvr/daemon/maintenance/events.cpp @@ -4,7 +4,6 @@ #include <sqlMergeTask.h> #include <Ice/Communicator.h> #include <p2Helpers.h> -#include <dvbsiHelpers.h> #include <containerIterator.h> #include <singleIterator.h> #include <temporaryIceAdapterObject.h> diff --git a/p2pvr/daemon/maintenance/network.cpp b/p2pvr/daemon/maintenance/network.cpp index 283e6fe..4ecb7d1 100644 --- a/p2pvr/daemon/maintenance/network.cpp +++ b/p2pvr/daemon/maintenance/network.cpp @@ -4,7 +4,6 @@ #include <sqlMergeTask.h> #include <Ice/Communicator.h> #include <p2Helpers.h> -#include <dvbsiHelpers.h> #include <containerIterator.h> #include <singleIterator.h> #include <temporaryIceAdapterObject.h> @@ -19,7 +18,7 @@ class SiNetworkInformationMerger : public SiNetworkInformationParser { for (const auto & ts : n->TransportStreams) { Logger()->messagebf(LOG_DEBUG, "\tTransport Stream Id: %d Original Network Id: %d", ts->TransportStreamId, ts->OriginalNetworkId); for (const auto & s : ts->Services) { - Logger()->messagebf(LOG_DEBUG, "\t\tService Id: %d Service Type: %d", s.ServiceId, s.ServiceType); + Logger()->messagebf(LOG_DEBUG, "\t\tService Id: %d Service Type: %d", s.ServiceId, s.Type); } if (ts->Terrestrial) { Logger()->messagebf(LOG_DEBUG, "\t\tDVB-T: Frequency: %d", ts->Terrestrial->Frequency); diff --git a/p2pvr/daemon/maintenance/services.cpp b/p2pvr/daemon/maintenance/services.cpp index 2030cf8..8824571 100644 --- a/p2pvr/daemon/maintenance/services.cpp +++ b/p2pvr/daemon/maintenance/services.cpp @@ -4,7 +4,6 @@ #include <sqlMergeTask.h> #include <Ice/Communicator.h> #include <p2Helpers.h> -#include <dvbsiHelpers.h> #include <containerIterator.h> #include <singleIterator.h> #include <temporaryIceAdapterObject.h> diff --git a/p2pvr/daemon/schedules.cpp b/p2pvr/daemon/schedules.cpp index f5aaad1..4ced9a7 100644 --- a/p2pvr/daemon/schedules.cpp +++ b/p2pvr/daemon/schedules.cpp @@ -55,43 +55,6 @@ typedef std::vector<RecordPtr> Records; template<> void -CreateColumns<P2PVR::ScheduledToRecordPtr>(const ColumnCreator & cc) -{ - cc("eventuid", true); - cc("scheduleid", true); -} - -template<> -void -CreateColumns<P2PVR::ScheduleCandidatePtr>(const ColumnCreator & cc) -{ - cc("what", true); - cc("serviceid", false); - cc("eventuid", false); - cc("transportstreamid", false); - cc("starttime", false); - cc("stoptime", false); - cc("priority", false); - cc("scheduleid", false); -} - -template<> -void -CreateColumns<P2PVR::SchedulePtr>(const ColumnCreator & cc) -{ - cc("scheduleid", true); - cc("serviceid", false); - cc("eventuid", false); - cc("title", false); - cc("search", false); - cc("priority", false); - cc("early", false); - cc("late", false); - cc("repeats", false); -} - -template<> -void CreateColumns<RecordPtr>(const ColumnCreator & cc) { cc("eventuid", true); diff --git a/p2pvr/daemon/si.cpp b/p2pvr/daemon/si.cpp index fc58f8e..0b93bc4 100644 --- a/p2pvr/daemon/si.cpp +++ b/p2pvr/daemon/si.cpp @@ -1,7 +1,6 @@ #include <pch.hpp> #include "si.h" #include "resources.h" -#include "dvbsiHelpers.h" #include "sqlSelectDeserializer.h" #include "commonHelpers.h" #include <slicer/slicer.h> diff --git a/p2pvr/ice/dvbsi.ice b/p2pvr/ice/dvbsi.ice index 29e5396..bfe1015 100644 --- a/p2pvr/ice/dvbsi.ice +++ b/p2pvr/ice/dvbsi.ice @@ -12,6 +12,7 @@ module DVBSI { // Descriptors class Delivery { + [ "slicer:merge:key" ] int TransportStreamId; long Frequency; }; @@ -49,45 +50,59 @@ module DVBSI { }; struct NetworkService { + [ "slicer:merge:key" ] int ServiceId; int TransportStreamId; - short ServiceType; + short Type; }; sequence<NetworkService> NetworkServiceList; class NetworkTransportStream { int NetworkId; + [ "slicer:merge:key" ] int TransportStreamId; int OriginalNetworkId; + [ "slicer:merge:omit" ] SatelliteDelivery Satellite; + [ "slicer:merge:omit" ] CableDelivery Cable; + [ "slicer:merge:omit" ] TerrestrialDelivery Terrestrial; + [ "slicer:merge:omit" ] NetworkServiceList Services; }; sequence<NetworkTransportStream> NetworkTransportStreams; class Network { + [ "slicer:merge:key" ] int NetworkId; optional(1) string Name; + [ "slicer:merge:omit" ] NetworkTransportStreams TransportStreams; }; class BouquetTransportStream { + [ "slicer:merge:key" ] int TransportStreamId; + [ "slicer:merge:key" ] int OriginalNetworkId; }; sequence <BouquetTransportStream> BouquetTransportStreamList; class Bouquet { + [ "slicer:merge:key" ] int BouquetId; optional(1) string Name; optional(2) string DefaultAuthority; + [ "slicer:merge:omit" ] BouquetTransportStreamList Streams; }; ["project2:type"] class Service { + [ "slicer:merge:key" ] int ServiceId; + [ "slicer:merge:key" ] int TransportStreamId; bool EitSchedule; bool EitPresentFollowing; @@ -101,8 +116,10 @@ module DVBSI { sequence<Service> ServiceList; class TransportStream { + [ "slicer:merge:key" ] int TransportStreamId; int OriginalNetworkId; + [ "slicer:merge:omit" ] ServiceList Services; }; @@ -126,7 +143,9 @@ module DVBSI { ["project2:type"] class Event { + [ "slicer:merge:key" ] int ServiceId; + [ "slicer:merge:key" ] int EventId; string Title; string TitleLang; diff --git a/p2pvr/lib/Jamfile.jam b/p2pvr/lib/Jamfile.jam index a7ce426..2083c30 100644 --- a/p2pvr/lib/Jamfile.jam +++ b/p2pvr/lib/Jamfile.jam @@ -1,3 +1,4 @@ +lib slicer : : <name>slicer : : <include>/usr/include/slicer ; lib boost_system ; lib boost_filesystem ; @@ -20,6 +21,7 @@ lib p2pvrlib : <library>..//p2common <library>..//p2lib <implicit-dependency>../ice//p2pvrice + <library>slicer : : <library>boost_filesystem <implicit-dependency>../ice//p2pvrice diff --git a/p2pvr/lib/dvbsiHelpers.h b/p2pvr/lib/dvbsiHelpers.h deleted file mode 100644 index 949014c..0000000 --- a/p2pvr/lib/dvbsiHelpers.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef ICE_DVBSI_HELPERS_H -#define ICE_DVBSI_HELPERS_H - -#include <dvbsi.h> -#include "objectRowState.h" - -#define ColumnHelper(T) \ - template<> void CreateColumns<T>(const ColumnCreator & cc); \ - template<> void BindColumns(RowState & rs, const T & obj); - -ColumnHelper(DVBSI::NetworkPtr); -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 deleted file mode 100644 index c4b82e7..0000000 --- a/p2pvr/lib/dvbsiHelpers/cableDelivery.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::CableDeliveryPtr>(const ColumnCreator & cc) -{ - cc("frequency", false); - cc("transportStreamId", true); - cc("fecOuter", false); - cc("modulation", false); - cc("symbolRate", false); - cc("fecInner", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::CableDeliveryPtr & 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; - rs.fields[5] << s->FecInner; -} - diff --git a/p2pvr/lib/dvbsiHelpers/event.cpp b/p2pvr/lib/dvbsiHelpers/event.cpp deleted file mode 100644 index f3daab3..0000000 --- a/p2pvr/lib/dvbsiHelpers/event.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::EventPtr>(const ColumnCreator & cc) -{ - cc("serviceId", true); - cc("eventId", true); - cc("title", false); - cc("titleLang", false); - cc("subtitle", false); - cc("description", false); - cc("descriptionLang", false); - cc("videoAspect", false); - cc("videoFrameRate", false); - cc("videoHd", false); - cc("audioChannels", false); - cc("audioLanguage", false); - cc("subtitleLanguage", false); - cc("category", false); - cc("subCategory", false); - cc("userCategory", false); - cc("dvbRating", false); - cc("startTime", false); - cc("stopTime", false); - cc("episode", false); - cc("episodes", false); - cc("year", false); - cc("flags", false); - cc("season", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::EventPtr & e) -{ - rs.fields[0] << e->ServiceId; - rs.fields[1] << e->EventId; - rs.fields[2] << e->Title; - rs.fields[3] << e->TitleLang; - rs.fields[4] << e->Subtitle; - rs.fields[5] << e->Description; - rs.fields[6] << e->DescriptionLang; - rs.fields[7] << e->VideoAspect; - rs.fields[8] << e->VideoFrameRate; - rs.fields[9] << e->VideoHD; - rs.fields[10] << e->AudioChannels; - rs.fields[11] << e->AudioLanguage; - rs.fields[12] << e->SubtitleLanguage; - rs.fields[13] << e->Category; - rs.fields[14] << e->SubCategory; - rs.fields[15] << e->UserCategory; - rs.fields[16] << e->DvbRating; - rs.fields[17] << e->StartTime; - rs.fields[18] << e->StopTime; - rs.fields[19] << e->Episode; - rs.fields[20] << e->Episodes; - rs.fields[21] << e->Year; - rs.fields[22] << e->Flags; - rs.fields[23] << e->Season; -} - diff --git a/p2pvr/lib/dvbsiHelpers/network.cpp b/p2pvr/lib/dvbsiHelpers/network.cpp deleted file mode 100644 index 3b117f1..0000000 --- a/p2pvr/lib/dvbsiHelpers/network.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::NetworkPtr>(const ColumnCreator & cc) -{ - cc("networkId", true); - cc("name", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::NetworkPtr & network) -{ - rs.fields[0] << network->NetworkId; - rs.fields[1] << network->Name; -} - - diff --git a/p2pvr/lib/dvbsiHelpers/networkService.cpp b/p2pvr/lib/dvbsiHelpers/networkService.cpp deleted file mode 100644 index a4a47d5..0000000 --- a/p2pvr/lib/dvbsiHelpers/networkService.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::NetworkService>(const ColumnCreator & cc) -{ - cc("serviceId", true); - cc("type", false); - cc("transportStreamId", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::NetworkService & s) -{ - rs.fields[0] << s.ServiceId; - rs.fields[1] << s.ServiceType; - rs.fields[2] << s.TransportStreamId; -} - diff --git a/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp b/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp deleted file mode 100644 index bdc7c4f..0000000 --- a/p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::NetworkTransportStreamPtr>(const ColumnCreator & cc) -{ - cc("transportStreamId", true); - cc("networkId", false); - cc("originalNetworkId", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::NetworkTransportStreamPtr & ts) -{ - rs.fields[0] << ts->TransportStreamId; - rs.fields[1] << ts->NetworkId; - rs.fields[2] << ts->OriginalNetworkId; -} - - diff --git a/p2pvr/lib/dvbsiHelpers/programMap.cpp b/p2pvr/lib/dvbsiHelpers/programMap.cpp deleted file mode 100644 index d8cf400..0000000 --- a/p2pvr/lib/dvbsiHelpers/programMap.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::StreamPtr>(const ColumnCreator & cc) -{ - cc("serviceId", true); - cc("id", true); - cc("type", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::StreamPtr & stream) -{ - 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 deleted file mode 100644 index 02f4d42..0000000 --- a/p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::SatelliteDeliveryPtr>(const ColumnCreator & cc) -{ - cc("frequency", false); - cc("transportStreamId", true); - cc("orbitalPosition", false); - cc("westEastFlag", false); - cc("polarization", false); - cc("rollOff", false); - cc("modulationSystem", false); - cc("modulationType", false); - cc("symbolRate", false); - cc("fecInner", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::SatelliteDeliveryPtr & 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; - rs.fields[5] << s->RollOff; - rs.fields[6] << s->ModulationSystem; - rs.fields[7] << s->ModulationType; - rs.fields[8] << s->SymbolRate; - rs.fields[9] << s->FecInner; -} - diff --git a/p2pvr/lib/dvbsiHelpers/service.cpp b/p2pvr/lib/dvbsiHelpers/service.cpp deleted file mode 100644 index 45c1fa0..0000000 --- a/p2pvr/lib/dvbsiHelpers/service.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::ServicePtr>(const ColumnCreator & cc) -{ - cc("serviceId", true); - cc("transportStreamId", true); - cc("name", false); - cc("providerName", false); - cc("defaultAuthority", false); - cc("runningStatus", false); - cc("eitSchedule", false); - cc("eitPresentFollowing", false); - cc("freeCAMode", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::ServicePtr & s) -{ - rs.fields[0] << s->ServiceId; - rs.fields[1] << s->TransportStreamId; - rs.fields[2] << s->Name; - rs.fields[3] << s->ProviderName; - rs.fields[4] << s->DefaultAuthority; - rs.fields[5] << s->RunningStatus; - rs.fields[6] << s->EitSchedule; - rs.fields[7] << s->EitPresentFollowing; - rs.fields[8] << s->FreeCaMode; -} - diff --git a/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp b/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp deleted file mode 100644 index 28ca855..0000000 --- a/p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include <pch.hpp> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<DVBSI::TerrestrialDeliveryPtr>(const ColumnCreator & cc) -{ - cc("frequency", false); - cc("transportStreamId", true); - cc("bandwidth", false); - cc("priority", false); - cc("timeSlicing", false); - cc("mpeFec", false); - cc("constellation", false); - cc("hierarchy", false); - cc("codeRateHP", false); - cc("codeRateLP", false); - cc("guardInterval", false); - cc("transmissionMode", false); - cc("otherFrequencyFlag", false); -} - -template<> -void -BindColumns(RowState & rs, const DVBSI::TerrestrialDeliveryPtr & s) -{ - rs.fields[0] << s->Frequency; - rs.fields[1] << s->TransportStreamId; - rs.fields[2] << s->Bandwidth; - rs.fields[3] << s->Priority; - rs.fields[4] << s->TimeSlicing; - rs.fields[5] << s->MpeFec; - rs.fields[6] << s->Constellation; - rs.fields[7] << s->Hierarchy; - rs.fields[8] << s->CodeRateHP; - rs.fields[9] << s->CodeRateLP; - rs.fields[10] << s->GuardInterval; - rs.fields[11] << s->TransmissionMode; - rs.fields[12] << s->OtherFrequencyFlag; -} - diff --git a/p2pvr/lib/objectRowState.cpp b/p2pvr/lib/objectRowState.cpp new file mode 100644 index 0000000..c882405 --- /dev/null +++ b/p2pvr/lib/objectRowState.cpp @@ -0,0 +1,63 @@ +#include "objectRowState.h" +#include <logger.h> + +const std::string md_mergeKey("merge:key"); +const std::string md_mergeOmit("merge:omit"); + +bool +mdHasFlag(const std::list<std::string> & md, const std::string & flag) +{ + return std::find(md.begin(), md.end(), flag) != md.end(); +} + +void +CreateColumns(Slicer::ModelPartPtr mp, const ColumnCreator & cc) +{ + mp->OnEachChild([cc](const std::string & name, Slicer::ModelPartPtr, Slicer::HookCommonPtr h) { + auto & md = h->GetMetadata(); + if (mdHasFlag(md, md_mergeOmit)) return; + cc(name, mdHasFlag(md, md_mergeKey)); + }); +} + +class SqlTarget : public Slicer::ValueTarget, + public Slicer::TValueTarget<boost::posix_time::time_duration>, + public Slicer::TValueTarget<boost::posix_time::ptime> { + public: + SqlTarget(VariableType & v) : vt(v) {} + +#define BIND(Type) \ + virtual void get(const Type & t) const override { vt = t; } + BIND(bool); + BIND(::Ice::Byte); + BIND(::Ice::Short); + BIND(::Ice::Int); + BIND(::Ice::Long); + BIND(::Ice::Float); + BIND(::Ice::Double); + BIND(::std::string); + BIND(boost::posix_time::ptime); + BIND(boost::posix_time::time_duration); + + private: + VariableType & vt; +}; +typedef IceUtil::Handle<SqlTarget> SqlTargetPtr; + +void +BindColumns(Slicer::ModelPartPtr mp, RowState & rs) +{ + unsigned int field = 0; + mp->OnEachChild([&rs,&field](const std::string &, Slicer::ModelPartPtr mp, Slicer::HookCommonPtr h) { + auto & md = h->GetMetadata(); + if (mdHasFlag(md, md_mergeOmit)) return; + if (mp && mp->HasValue()) { + SqlTargetPtr st = new SqlTarget(rs.fields[field++]); + mp->GetValue(st); + } + else { + rs.fields[field++] = Null(); + } + }); +} + diff --git a/p2pvr/lib/objectRowState.h b/p2pvr/lib/objectRowState.h index f305469..d98380b 100644 --- a/p2pvr/lib/objectRowState.h +++ b/p2pvr/lib/objectRowState.h @@ -4,15 +4,27 @@ #include <boost/function.hpp> #include <string> #include <rowSet.h> +#include <slicer/modelParts.h> typedef boost::function<void(const std::string &, bool)> ColumnCreator; typedef boost::function<void(const ColumnCreator &)> ColumnSpecifier; +void BindColumns(Slicer::ModelPartPtr, RowState &); + template <typename V> -void BindColumns(RowState &, const V &); +void BindColumns(RowState & rs, const V & v) +{ + BindColumns(Slicer::ModelPartFor(const_cast<V &>(v)), rs); +} + +void CreateColumns(Slicer::ModelPartPtr, const ColumnCreator &); template <typename V> -void CreateColumns(const ColumnCreator &); +void CreateColumns(const ColumnCreator & cc) +{ + V v; + CreateColumns(Slicer::ModelPartFor(v), cc); +} template <typename T> class ObjectRowState : public RowState { diff --git a/p2pvr/lib/p2pvrHelpers/schedule.cpp b/p2pvr/lib/p2pvrHelpers/schedule.cpp deleted file mode 100644 index e0ec214..0000000 --- a/p2pvr/lib/p2pvrHelpers/schedule.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include <pch.hpp> -#include <p2pvr.h> -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns<P2PVR::SchedulePtr>(const ColumnCreator & cc) -{ - cc("scheduleid", true); - cc("serviceid", true); - cc("eventuid", false); - cc("title", false); - cc("search", false); - cc("priority", false); - cc("early", false); - cc("late", false); - cc("repeats", false); -} - -template<> -void -BindColumns(RowState & rs, const P2PVR::SchedulePtr & s) -{ - rs.fields[0] << s->ScheduleId; - rs.fields[1] << s->ServiceId; - rs.fields[2] << s->EventUid; - rs.fields[3] << s->Title; - rs.fields[4] << s->Search; - rs.fields[5] << s->Priority; - rs.fields[6] << s->Early; - rs.fields[7] << s->Late; - rs.fields[8] << s->Repeats; -} - |