Пример #1
0
void LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
	if (sRunning)
	{
		// ...only do immediate lookups when cache is running
		if (useDisplayNames())
		{
			// ...use new cache
			std::map<LLUUID,LLAvatarName>::iterator it = sCache.find(agent_id);
			if (it != sCache.end())
			{
				const LLAvatarName& av_name = it->second;
				
				if (av_name.mExpires > LLFrameTimer::getTotalSeconds())
				{
					// ...name already exists in cache, fire callback now
					fireSignal(agent_id, slot, av_name);

					return;
				}
			}
		}
		else
		{
			// ...use old name system
			std::string full_name;
			if (gCacheName->getFullName(agent_id, full_name))
			{
				LLAvatarName av_name;
				buildLegacyName(full_name, &av_name);
				fireSignal(agent_id, slot, av_name);
				return;
			}
		}
	}

	// schedule a request
	if (!isRequestPending(agent_id))
	{
		sAskQueue.insert(agent_id);
	}

	// always store additional callback, even if request is pending
	signal_map_t::iterator sig_it = sSignalMap.find(agent_id);
	if (sig_it == sSignalMap.end())
	{
		// ...new callback for this id
		callback_signal_t* signal = new callback_signal_t();
		signal->connect(slot);
		sSignalMap[agent_id] = signal;
	}
	else
	{
		// ...existing callback, bind additional slot
		callback_signal_t* signal = sig_it->second;
		signal->connect(slot);
	}
}
Пример #2
0
TEST(ConnectorTests, DeleteLater) {
    SignalAndSlotObject::State state;
    SignalAndSlotObject* object(new SignalAndSlotObject(state));
    QtUtils::deleteLaterOn(object, SIGNAL(fireSignal()));
    EXPECT_FALSE(state.wasDeleted);
    emit object->fireSignal();
    QCoreApplication::sendPostedEvents(object, QEvent::DeferredDelete);
    EXPECT_TRUE(state.wasDeleted);
}
Пример #3
0
TEST(ConnectorTests, ConnectToSINAL_SLOT_Macro) {
    SignalAndSlotObject::State state;
    SignalAndSlotObject object(state);
    SignalAndSlotObject::State state2;
    SignalAndSlotObject object2(state2);
    const auto& connector = QtUtils::makeConnector(&object, &object2);
    connector.connect(SIGNAL(fireSignal()), SLOT(handleSignal()));
    EXPECT_FALSE(state.signalHandled);
    emit object.fireSignal();
    EXPECT_TRUE(state2.signalHandled);
}
Пример #4
0
LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
	callback_connection_t connection;

	if (sRunning)
	{
		// ...only do immediate lookups when cache is running
		std::map<LLUUID,LLAvatarName>::iterator it = sCache.find(agent_id);
		if (it != sCache.end())
		{
			const LLAvatarName& av_name = it->second;
			
			if (av_name.mExpires > LLFrameTimer::getTotalSeconds())
			{
				// ...name already exists in cache, fire callback now
				fireSignal(agent_id, slot, av_name);
				return connection;
			}
		}
	}

	// schedule a request
	if (!isRequestPending(agent_id))
	{
		sAskQueue.insert(agent_id);
	}

	// always store additional callback, even if request is pending
	signal_map_t::iterator sig_it = sSignalMap.find(agent_id);
	if (sig_it == sSignalMap.end())
	{
		// ...new callback for this id
		callback_signal_t* signal = new callback_signal_t();
		connection = signal->connect(slot);
		sSignalMap[agent_id] = signal;
	}
	else
	{
		// ...existing callback, bind additional slot
		callback_signal_t* signal = sig_it->second;
		connection = signal->connect(slot);
	}

	return connection;
}
Пример #5
0
LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& agent_id, callback_slot_t slot)
{
	callback_connection_t connection;

	if (sRunning)
	{
		// ...only do immediate lookups when cache is running
		if (useDisplayNames())
		{
			LL_DEBUGS("AvNameCache") << "DN cache lookup for " << agent_id << llendl;
			// ...use new cache
			std::map<LLUUID,LLAvatarName>::iterator it = sCache.find(agent_id);
			if (it != sCache.end())
			{
				LLAvatarName& av_name = it->second;
				LLSD test = av_name.asLLSD();
				LL_DEBUGS("AvNameCache") << "DN cache hit for :" << test["display_name"].asString()+" (" + test["legacy_first_name"].asString()+" "+test["legacy_last_name"].asString()+")"  << llendl;
				
				if(LGGContactSets::getInstance()->hasPseudonym(agent_id))
				{
					LL_DEBUGS("AvNameCache") << "DN cache hit via alias" << llendl;
					LLSD info = av_name.asLLSD();
					info["is_display_name_default"]=LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id);
					info["display_name"]=LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id)?(info["legacy_first_name"].asString()+" "+info["legacy_last_name"].asString()):LGGContactSets::getInstance()->getPseudonym(agent_id);
					av_name.fromLLSD(info);
				}
				
				if (av_name.mExpires > LLFrameTimer::getTotalSeconds())
				{
					// ...name already exists in cache, fire callback now
					LL_DEBUGS("AvNameCache") << "DN cache hit valid" << llendl;
					fireSignal(agent_id, slot, av_name);
					return connection;
				}
			
				// If we get here, our DN is expired. 
				//Consider it a cache miss, handle as if sRunning was false.
				LL_DEBUGS("AvNameCache") << "DN cache hit expired. " << av_name.mExpires << " vs. " << LLFrameTimer::getTotalSeconds() << llendl;
			}
			//If we get here, cache miss. We'll schedule it below
				
		}
		else
		{
			// ...use old name system
			std::string full_name;
			if (gCacheName->getFullName(agent_id, full_name))
			{
				LLAvatarName av_name;
				buildLegacyName(full_name, &av_name);
				fireSignal(agent_id, slot, av_name);
				return connection;
			}
		}
	
	}
		
	// schedule a request
	if (!isRequestPending(agent_id))
	{
		LL_DEBUGS("AvNameCache") << "DN scheduling lookup for" << agent_id << llendl;
		sAskQueue.insert(agent_id);
	}
	else 
	{
		LL_DEBUGS("AvNameCache") << "DN lookup for " << agent_id << " already in progress. Returning." << llendl;
	}

	
	// always store additional callback, even if request is pending
	signal_map_t::iterator sig_it = sSignalMap.find(agent_id);
	if (sig_it == sSignalMap.end())
	{
		// ...new callback for this id
		callback_signal_t* signal = new callback_signal_t();
		connection = signal->connect(slot);
		sSignalMap[agent_id] = signal;
	}
	else
	{
		// ...existing callback, bind additional slot
		callback_signal_t* signal = sig_it->second;
		connection = signal->connect(slot);
	}

	return connection;
}