diff options
| -rw-r--r-- | p2pvr/daemon/maintenance.cpp | 2 | ||||
| -rw-r--r-- | p2pvr/daemon/maintenance.h | 2 | ||||
| -rw-r--r-- | p2pvr/daemon/maintenance/programAssociations.cpp | 80 | ||||
| -rw-r--r-- | p2pvr/daemon/maintenance/programMap.cpp | 133 | ||||
| -rw-r--r-- | p2pvr/datasources/schema.sql | 3 | ||||
| -rw-r--r-- | p2pvr/ice/p2pvr.ice | 2 | 
6 files changed, 1 insertions, 221 deletions
| diff --git a/p2pvr/daemon/maintenance.cpp b/p2pvr/daemon/maintenance.cpp index 3475544..8e204f7 100644 --- a/p2pvr/daemon/maintenance.cpp +++ b/p2pvr/daemon/maintenance.cpp @@ -49,8 +49,6 @@ Maintenance::UpdateAll(short type, const Ice::Current & ice)  {  	UpdateNetwork(type, ice);  	UpdateServices(type, ice); -	UpdateProgramAssociations(type, ice); -	UpdateProgramMaps(type, ice);  	UpdateEvents(type, ice);  } diff --git a/p2pvr/daemon/maintenance.h b/p2pvr/daemon/maintenance.h index 563455a..9859c83 100644 --- a/p2pvr/daemon/maintenance.h +++ b/p2pvr/daemon/maintenance.h @@ -12,8 +12,6 @@ class Maintenance : public P2PVR::Maintenance, public DatabaseClient {  		void UpdateAll(short type, const Ice::Current &);  		void UpdateNetwork(short type, const Ice::Current &);  		void UpdateServices(short type, const Ice::Current &); -		void UpdateProgramAssociations(short type, const Ice::Current &); -		void UpdateProgramMaps(short type, const Ice::Current &);  		void UpdateEvents(short type, const Ice::Current &);  		INITOPTIONS; diff --git a/p2pvr/daemon/maintenance/programAssociations.cpp b/p2pvr/daemon/maintenance/programAssociations.cpp deleted file mode 100644 index ad6438c..0000000 --- a/p2pvr/daemon/maintenance/programAssociations.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include <pch.hpp> -#include "../maintenance.h" -#include <siParsers/programAssociation.h> -#include <sqlMergeTask.h> -#include <Ice/Communicator.h> -#include <p2Helpers.h> -#include <dvbsiHelpers.h> -#include <mapIterator.h> -#include <temporaryIceAdapterObject.h> - -class SiProgramAssociationHandler : public SiProgramAssociationParser { -	public: -		bool HandleTable(ProgramAssociationMapPtr pam) -		{ -			Logger()->messagebf(LOG_DEBUG, "Program association table"); -			BOOST_FOREACH(const auto & pa, *pam) { -				Logger()->messagebf(LOG_DEBUG, "	%d -> %d", pa.first, pa.second); -			} -			BOOST_FOREACH(const auto & pa, *pam) { -				map[pa.first] = pa.second; -			} -			return false; -		} - -		ProgramAssociationMap map; -}; - -static -void -CreatePATColumns(const ColumnCreator & cc) -{ -	cc("serviceId", true); -	cc("programId", false); -} - -void -Maintenance::UpdateProgramAssociations(short type, const Ice::Current & ice) -{ -	auto ic = ice.adapter->getCommunicator(); -	auto devs = P2PVR::DevicesPrx::checkedCast(ice.adapter->createProxy(ic->stringToIdentity("GlobalDevices"))); -	auto si = P2PVR::SIPrx::checkedCast(ice.adapter->createProxy(ic->stringToIdentity("SI"))); - -	if (!devs || !si) { -		throw std::runtime_error("bad proxy(s)"); -	} - -	auto siparser = new SiProgramAssociationHandler(); -	TemporarayIceAdapterObject<P2PVR::RawDataClient> parser(ice.adapter, siparser); - -	const auto deliveries = si->GetAllDeliveries(type); -	if (deliveries.empty()) { -		throw std::runtime_error("no delivery methods"); -	} - -	BOOST_FOREACH(const auto & transport, deliveries) { -		try { -			Logger()->messagebf(LOG_DEBUG, "%s: Getting a tuner", __PRETTY_FUNCTION__); -			auto tuner = devs->GetTunerSpecific(transport); -			Logger()->messagebf(LOG_DEBUG, "%s: Fetching associations", __PRETTY_FUNCTION__); -			tuner->SendProgramAssociationTable(parser); -			Logger()->messagebf(LOG_INFO, "%s: Updated associations", __PRETTY_FUNCTION__); -			devs->ReleaseTuner(tuner); -		} -		catch (...) { -			// Tuning can fail -		} -	} - -	TxHelper tx(this); -	SqlMergeTask mergeServices("postgres", "services"); -	CreatePATColumns(boost::bind(SqlMergeColumnsInserter, &mergeServices, _1, _2)); -	// Don't change the list of services available from the network -	mergeServices.doDelete = VariableType(false); -	mergeServices.doInsert = VariableType(false); -	Columns cols; -	mergeServices.sources.insert(new MapIterator<ProgramAssociationMap>(CreatePATColumns, &siparser->map)); -	mergeServices.loadComplete(this); -	mergeServices.execute(NULL); -} - diff --git a/p2pvr/daemon/maintenance/programMap.cpp b/p2pvr/daemon/maintenance/programMap.cpp deleted file mode 100644 index 94d7752..0000000 --- a/p2pvr/daemon/maintenance/programMap.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include <pch.hpp> -#include "../maintenance.h" -#include <siParsers/programMap.h> -#include <sqlMergeTask.h> -#include <Ice/Communicator.h> -#include <p2Helpers.h> -#include <dvbsiHelpers.h> -#include <containerIterator.h> -#include <singleIterator.h> -#include <temporaryIceAdapterObject.h> -#include <rdbmsDataSource.h> -#include <column.h> -#include <selectcommand.h> -#include <sqlHandleAsVariableType.h> - -class SiProgramMapHandler : public SiProgramMapParser { -	public: -		SiProgramMapHandler(const RowProcessorCallback & cb) : -			callBack(cb) {} - -		bool HandleTable(DVBSI::ProgramMapPtr pmp) -		{ -			Logger()->messagebf(LOG_DEBUG, "Program map: serviceId = %d", pmp->ServiceId); -			BOOST_FOREACH(const auto & s, pmp->Streams) { -				Logger()->messagef(LOG_DEBUG, "type: %02x id: %d", s->Type, s->Id); -			} -			BOOST_FOREACH(const auto & s, pmp->Streams) { -				BindColumns<DVBSI::StreamPtr>(rowState, s); -				rowState.process(callBack); -			} -			return false; -		} - -	private: -		ObjectRowState<DVBSI::StreamPtr> rowState; -		const RowProcessorCallback callBack; -}; - -typedef boost::shared_ptr<DB::SelectCommand> SelectPtr; - -template<typename T> -void -operator<<(T & val, const DB::Column & col) -{ -	HandleAsVariableType havt; -	col.apply(havt); -	val = havt.variable; -} - -class SiProgramMapMerger : public IHaveSubTasks { -	public: -		SiProgramMapMerger(short t, CommonObjects * co, const Ice::Current & i) : -			SourceObject(__PRETTY_FUNCTION__), -			IHaveSubTasks(NULL), -			commonObjects(co), -			type(t), -			ice(i) { } - -		void execute(ExecContext * ec) const -		{ -			auto ic = ice.adapter->getCommunicator(); -			auto devs = P2PVR::DevicesPrx::checkedCast(ice.adapter->createProxy(ic->stringToIdentity("GlobalDevices"))); -			auto si = P2PVR::SIPrx::checkedCast(ice.adapter->createProxy(ic->stringToIdentity("SI"))); - -			if (!devs || !si) { -				throw std::runtime_error("bad proxy(s)"); -			} - -			TemporarayIceAdapterObject<P2PVR::RawDataClient> parser(ice.adapter, -					new SiProgramMapHandler(boost::bind(&SiProgramMapMerger::executeChildren, this, ec))); - -			const auto deliveries = si->GetAllDeliveries(type); -			if (deliveries.empty()) { -				throw std::runtime_error("no delivery methods"); -			} - -			auto db = commonObjects->dataSource<RdbmsDataSource>("postgres")->getReadonly(); -			SelectPtr sel = SelectPtr(db->newSelectCommand("select d.frequency, s.programid \ -						from delivery_dvbt d, services s \ -						where d.transportstreamid = s.transportstreamid \ -						and s.programid is not null \ -						order by s.transportstreamid, s.serviceid")); -			int64_t curFreq = 0; -			P2PVR::TunerPrx tuner; -			while (sel->fetch()) { -				int64_t freq, pid; -				freq << (*sel)[0]; -				pid << (*sel)[1]; - -				if (freq != curFreq) { -					if (tuner) { -						devs->ReleaseTuner(tuner); -					} -					Logger()->messagebf(LOG_DEBUG, "%s: Getting a tuner", __PRETTY_FUNCTION__); -					const auto transport = *std::find_if(deliveries.begin(), deliveries.end(), -							[freq](const DVBSI::DeliveryPtr & del) { return del->Frequency == freq; }); -					tuner = devs->GetTunerSpecific(transport); -					curFreq = freq; -				} - -				Logger()->messagebf(LOG_DEBUG, "%s: Fetching associations", __PRETTY_FUNCTION__); -				tuner->SendProgramMap(pid, parser); -				Logger()->messagebf(LOG_INFO, "%s: Updated associations", __PRETTY_FUNCTION__); -			} -			if (tuner) { -				devs->ReleaseTuner(tuner); -			} -		} - -	private: -		CommonObjects * commonObjects; -		const short type; -		const Ice::Current & ice; - -		void executeChildren(ExecContext * ec) const -		{ -			BOOST_FOREACH(const Tasks::value_type & sq, normal) { -				sq->execute(ec); -			} -		} -}; - -void -Maintenance::UpdateProgramMaps(short type, const Ice::Current & ice) -{ -	TxHelper tx(this); -	SqlMergeTask mergeServiceStreams("postgres", "servicestreams"); -	CreateColumns<DVBSI::StreamPtr>(boost::bind(SqlMergeColumnsInserter, &mergeServiceStreams, _1, _2)); -	mergeServiceStreams.sources.insert(new SiProgramMapMerger(type, this, ice)); -	mergeServiceStreams.loadComplete(this); -	mergeServiceStreams.execute(NULL); -} - diff --git a/p2pvr/datasources/schema.sql b/p2pvr/datasources/schema.sql index 53c0e08..df65cfa 100644 --- a/p2pvr/datasources/schema.sql +++ b/p2pvr/datasources/schema.sql @@ -281,8 +281,7 @@ CREATE TABLE services (      eitschedule boolean,      eitpresentfollowing boolean,      freecamode boolean, -    transportstreamid integer NOT NULL, -    programid integer +    transportstreamid integer NOT NULL  ); diff --git a/p2pvr/ice/p2pvr.ice b/p2pvr/ice/p2pvr.ice index bd79cb1..08356ae 100644 --- a/p2pvr/ice/p2pvr.ice +++ b/p2pvr/ice/p2pvr.ice @@ -52,8 +52,6 @@ module P2PVR {  		idempotent void UpdateAll();  		idempotent void UpdateNetwork(short type);  		idempotent void UpdateServices(short type); -		idempotent void UpdateProgramAssociations(short type); -		idempotent void UpdateProgramMaps(short type);  		idempotent void UpdateEvents(short type);  	}; | 
