From 3ed6eef61d0e9e76ce4194c83290f73d6d9810d5 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 18 Jan 2015 16:22:57 +0000 Subject: Use slicer and metadata for performing merges --- p2pvr/daemon/events.cpp | 32 ------------ p2pvr/daemon/maintenance/events.cpp | 1 - p2pvr/daemon/maintenance/network.cpp | 3 +- p2pvr/daemon/maintenance/services.cpp | 1 - p2pvr/daemon/schedules.cpp | 37 ------------- p2pvr/daemon/si.cpp | 1 - p2pvr/ice/dvbsi.ice | 21 +++++++- p2pvr/lib/Jamfile.jam | 2 + p2pvr/lib/dvbsiHelpers.h | 22 -------- p2pvr/lib/dvbsiHelpers/cableDelivery.cpp | 28 ---------- p2pvr/lib/dvbsiHelpers/event.cpp | 64 ----------------------- p2pvr/lib/dvbsiHelpers/network.cpp | 21 -------- p2pvr/lib/dvbsiHelpers/networkService.cpp | 22 -------- p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp | 23 -------- p2pvr/lib/dvbsiHelpers/programMap.cpp | 24 --------- p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp | 36 ------------- p2pvr/lib/dvbsiHelpers/service.cpp | 34 ------------ p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp | 42 --------------- p2pvr/lib/objectRowState.cpp | 63 ++++++++++++++++++++++ p2pvr/lib/objectRowState.h | 16 +++++- p2pvr/lib/p2pvrHelpers/schedule.cpp | 35 ------------- 21 files changed, 100 insertions(+), 428 deletions(-) delete mode 100644 p2pvr/lib/dvbsiHelpers.h delete mode 100644 p2pvr/lib/dvbsiHelpers/cableDelivery.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/event.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/network.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/networkService.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/networkTransportStream.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/programMap.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/satelliteDelivery.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/service.cpp delete mode 100644 p2pvr/lib/dvbsiHelpers/terrestrialDelivery.cpp create mode 100644 p2pvr/lib/objectRowState.cpp delete mode 100644 p2pvr/lib/p2pvrHelpers/schedule.cpp 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 @@ -3,38 +3,6 @@ #include #include -template<> -void -CreateColumns(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) 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 #include #include -#include #include #include #include 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 #include #include -#include #include #include #include @@ -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 #include #include -#include #include #include #include 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 @@ -53,43 +53,6 @@ class Record { typedef boost::shared_ptr RecordPtr; typedef std::vector Records; -template<> -void -CreateColumns(const ColumnCreator & cc) -{ - cc("eventuid", true); - cc("scheduleid", true); -} - -template<> -void -CreateColumns(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(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(const ColumnCreator & cc) 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 #include "si.h" #include "resources.h" -#include "dvbsiHelpers.h" #include "sqlSelectDeserializer.h" #include "commonHelpers.h" #include 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 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 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 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 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 : : slicer : : /usr/include/slicer ; lib boost_system ; lib boost_filesystem ; @@ -20,6 +21,7 @@ lib p2pvrlib : ..//p2common ..//p2lib ../ice//p2pvrice + slicer : : boost_filesystem ../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 -#include "objectRowState.h" - -#define ColumnHelper(T) \ - template<> void CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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 + +const std::string md_mergeKey("merge:key"); +const std::string md_mergeOmit("merge:omit"); + +bool +mdHasFlag(const std::list & 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, + public Slicer::TValueTarget { + 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 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 #include #include +#include typedef boost::function ColumnCreator; typedef boost::function ColumnSpecifier; +void BindColumns(Slicer::ModelPartPtr, RowState &); + template -void BindColumns(RowState &, const V &); +void BindColumns(RowState & rs, const V & v) +{ + BindColumns(Slicer::ModelPartFor(const_cast(v)), rs); +} + +void CreateColumns(Slicer::ModelPartPtr, const ColumnCreator &); template -void CreateColumns(const ColumnCreator &); +void CreateColumns(const ColumnCreator & cc) +{ + V v; + CreateColumns(Slicer::ModelPartFor(v), cc); +} template 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 -#include -#include "../dvbsiHelpers.h" -#include "../p2Helpers.h" - -template<> -void -CreateColumns(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; -} - -- cgit v1.2.3