Example #1
0
formatters_data_channels::formatters_data_channels(
	formatters_factory const &factory, request_impl const &req, response_impl const &resp) : default_formatter_(NULL)
{
	std::map<channel_info, std::string> ch_data = resp.channels_data();
	assert(!ch_data.empty());

	request request_adapter(req);

	for (std::map<channel_info, std::string>::iterator it = ch_data.begin(), end = ch_data.end(); it != end; ++it) {
		channel_info const &ch_info = it->first;
		assert(!ch_info.empty());

		std::string const &fmt_id = it->second;
		if (fmt_id.empty()) {
			channels_data_[ch_info] = channel_data(ch_info.data(), NULL);
			continue;
		}
		std::map<std::string, formatter*>::const_iterator fmt_it = formatters_.find(fmt_id);
		if (formatters_.end() != fmt_it) {
			channels_data_[ch_info] = channel_data(ch_info.data(), fmt_it->second);
		}
		else {
			std::auto_ptr<formatter> fmt_ptr = factory.find(fmt_id, request_adapter);
			channels_data_[ch_info] = channel_data(ch_info.data(), fmt_ptr.get());
			formatters_.insert(std::make_pair(fmt_id, fmt_ptr.get()));
			fmt_ptr.release();
		}
	}

	std::string const &def_fmt_id = resp.default_formatter_id();
	if (!def_fmt_id.empty()) {
		std::map<std::string, formatter*>::const_iterator it = formatters_.find(def_fmt_id);
		if (formatters_.end() != it) {
			default_formatter_ = it->second;
		}
		else {
			std::auto_ptr<formatter> fmt_ptr = factory.find(def_fmt_id, request_adapter);
			formatters_.insert(make_pair(def_fmt_id, fmt_ptr.get()));
			default_formatter_ = fmt_ptr.release();
		}
	}
}
void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan)
{
	if ( chan )
	{
//		eDebug("[eDVBLocalTimerHandler] add channel %p", chan);
		std::pair<std::map<iDVBChannel*, channel_data>::iterator, bool> tmp =
			m_knownChannels.insert( std::pair<iDVBChannel*, channel_data>(chan, channel_data()) );
		tmp.first->second.tdt = NULL;
		tmp.first->second.channel = chan;
		tmp.first->second.m_prevChannelState = -1;
		chan->connectStateChange(slot(*this, &eDVBLocalTimeHandler::DVBChannelStateChanged), tmp.first->second.m_stateChangedConn);
	}
}