diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llavatarlist.cpp | 35 | ||||
| -rw-r--r-- | indra/newview/llavatarlist.h | 2 | ||||
| -rw-r--r-- | indra/newview/llrecentpeople.cpp | 58 | ||||
| -rw-r--r-- | indra/newview/llrecentpeople.h | 33 | ||||
| -rw-r--r-- | indra/newview/llvoicechannel.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llvoicechannel.h | 7 | 
6 files changed, 145 insertions, 14 deletions
| diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index ff7dfccc0a..771419f60a 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -240,6 +240,9 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i  	LLAvalineListItem* item = new LLAvalineListItem(/*hide_number=*/false);  	item->setAvatarId(item_id, session_id, true, false);  	item->setName(item_name); +	item->showLastInteractionTime(mShowLastInteractionTime); +	item->showSpeakingIndicator(mShowSpeakingIndicator); +	item->setOnline(false);  	addItem(item, item_id);  	mIDs.push_back(item_id); @@ -286,9 +289,18 @@ void LLAvatarList::refresh()  			{  				// *NOTE: If you change the UI to show a different string,  				// be sure to change the filter code below. -				addNewItem(buddy_id,  -					       av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,  -						   LLAvatarTracker::instance().isBuddyOnline(buddy_id)); +				if (LLRecentPeople::instance().isAvalineCaller(buddy_id)) +				{ +					const LLSD& call_data = LLRecentPeople::instance().getData(buddy_id); +					addAvalineItem(buddy_id, call_data["session_id"].asUUID(), call_data["call_number"].asString()); +				} +				else +				{ +					addNewItem(buddy_id,  +						av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,  +						LLAvatarTracker::instance().isBuddyOnline(buddy_id)); +				} +				  				modified = true;  				nadded++;  			} @@ -440,7 +452,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is  BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask); -	if ( mContextMenu ) +	if ( mContextMenu && !isAvalineItemSelected())  	{  		uuid_vec_t selected_uuids;  		getSelectedUUIDs(selected_uuids); @@ -449,6 +461,21 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)  	return handled;  } +bool LLAvatarList::isAvalineItemSelected() +{ +	std::vector<LLPanel*> selected_items; +	getSelectedItems(selected_items); +	std::vector<LLPanel*>::iterator it = selected_items.begin(); +	 +	for(; it != selected_items.end(); ++it) +	{ +		if (dynamic_cast<LLAvalineListItem*>(*it)) +			return true; +	} + +	return false; +} +  void LLAvatarList::setVisible(BOOL visible)  {  	if ( visible == FALSE && mContextMenu ) diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index cacbcf7244..4814a88a79 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -112,6 +112,8 @@ protected:  private: +	bool isAvalineItemSelected(); +  	bool mIgnoreOnlineStatus;  	bool mShowLastInteractionTime;  	bool mDirty; diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp index 959fd51bbf..7689cd1a52 100644 --- a/indra/newview/llrecentpeople.cpp +++ b/indra/newview/llrecentpeople.cpp @@ -33,7 +33,7 @@  using namespace LLOldEvents; -bool LLRecentPeople::add(const LLUUID& id) +bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)  {  	if (id == gAgent.getID())  		return false; @@ -42,10 +42,16 @@ bool LLRecentPeople::add(const LLUUID& id)  	if (is_not_group_id)  	{ -		LLDate date_added = LLDate::now(); +		// For each avaline call the id of caller is different even if +		// the phone number is the same. +		// To avoid duplication of avaline list items in the recent list +		// of panel People, deleting id's with similar phone number. +		const LLUUID& caller_id = getIDByPhoneNumber(userdata); +		if (caller_id.notNull()) +			mPeople.erase(caller_id); -		//[] instead of insert to replace existing id->date with new date value -		mPeople[id] = date_added; +		//[] instead of insert to replace existing id->llsd["date"] with new date value +		mPeople[id] = userdata;  		mChangedSignal();  	} @@ -64,15 +70,55 @@ void LLRecentPeople::get(uuid_vec_t& result) const  		result.push_back((*pos).first);  } -const LLDate& LLRecentPeople::getDate(const LLUUID& id) const +const LLDate LLRecentPeople::getDate(const LLUUID& id) const  {  	recent_people_t::const_iterator it = mPeople.find(id); -	if (it!= mPeople.end()) return (*it).second; +	if (it!= mPeople.end()) return it->second["date"].asDate();  	static LLDate no_date = LLDate();  	return no_date;  } +const LLSD& LLRecentPeople::getData(const LLUUID& id) const +{ +	recent_people_t::const_iterator it = mPeople.find(id); + +	if (it != mPeople.end()) +		return it->second; + +	static LLSD no_data = LLSD(); +	return no_data; +} + +bool LLRecentPeople::isAvalineCaller(const LLUUID& id) const +{ +	recent_people_t::const_iterator it = mPeople.find(id); + +	if (it != mPeople.end()) +	{ +		const LLSD& user = it->second;		 +		return user["avaline_call"].asBoolean(); +	} + +	return false; +} + +const LLUUID& LLRecentPeople::getIDByPhoneNumber(const LLSD& userdata) +{ +	if (!userdata["avaline_call"].asBoolean()) +		return LLUUID::null; + +	for (recent_people_t::const_iterator it = mPeople.begin(); it != mPeople.end(); ++it) +	{ +		const LLSD& user_info = it->second; +		 +		if (user_info["call_number"].asString() == userdata["call_number"].asString()) +			return it->first; +	} +	 +	return LLUUID::null; +} +  // virtual  bool LLRecentPeople::handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)  { diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h index 852a92ff80..d0d6376867 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -58,9 +58,15 @@ public:  	 * Add specified avatar to the list if it's not there already.  	 *  	 * @param id avatar to add. +	 * +	 * @param userdata additional information about last interaction party. +	 *				   For example when last interaction party is not an avatar +	 *				   but an avaline caller, additional info (such as phone +	 *				   number, session id and etc.) should be added. +	 *  	 * @return false if the avatar is in the list already, true otherwise  	 */ -	bool add(const LLUUID& id); +	bool add(const LLUUID& id, const LLSD& userdata = LLSD().with("date", LLDate::now()));  	/**  	 * @param id avatar to search. @@ -75,7 +81,25 @@ public:  	 */  	void get(uuid_vec_t& result) const; -	const LLDate& getDate(const LLUUID& id) const; +	/** +	 * Returns last interaction time with specified participant +	 * +	 */ +	const LLDate getDate(const LLUUID& id) const; + +	/** +	 * Returns data about specified participant +	 * +	 * @param id identifier of specific participant +	 */ +	const LLSD& getData(const LLUUID& id) const; + +	/** +	 * Checks whether specific participant is an avaline caller +	 * +	 * @param id identifier of specific participant +	 */ +	bool isAvalineCaller(const LLUUID& id) const;  	/**  	 * Set callback to be called when the list changed. @@ -92,7 +116,10 @@ public:  	/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);  private: -	typedef std::map<LLUUID, LLDate> recent_people_t; + +	const LLUUID& getIDByPhoneNumber(const LLSD& userdata); + +	typedef std::map<LLUUID, LLSD> recent_people_t;  	recent_people_t		mPeople;  	signal_t			mChangedSignal;  }; diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index b692093fb9..a71539266d 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -853,7 +853,7 @@ void LLVoiceChannelP2P::activate()  		}  		// Add the party to the list of people with which we've recently interacted. -		LLRecentPeople::instance().add(mOtherUserID); +		addToTheRecentPeopleList();  		//Default mic is ON on initiating/joining P2P calls  		if (!LLVoiceClient::getInstance()->getUserPTTState() && LLVoiceClient::getInstance()->getPTTIsToggle()) @@ -938,3 +938,25 @@ void LLVoiceChannelP2P::setState(EState state)  	LLVoiceChannel::setState(state);  } + +void LLVoiceChannelP2P::addToTheRecentPeopleList() +{ +	bool avaline_call = LLIMModel::getInstance()->findIMSession(mSessionID)->isAvalineSessionType(); +	 +	if (avaline_call) +	{ +		LLSD call_data; +		std::string call_number = LLVoiceChannel::getSessionName(); +		 +		call_data["avaline_call"]	= true; +		call_data["session_id"]		= mSessionID; +		call_data["call_number"]	= call_number; +		call_data["date"]			= LLDate::now(); +		 +		LLRecentPeople::instance().add(mOtherUserID, call_data); +	} +	else +	{ +		LLRecentPeople::instance().add(mOtherUserID); +	} +} diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h index 7cef3c13d1..b8597ee5cb 100644 --- a/indra/newview/llvoicechannel.h +++ b/indra/newview/llvoicechannel.h @@ -191,6 +191,13 @@ protected:  	virtual void setState(EState state);  private: + +	/** +	* Add the caller to the list of people with which we've recently interacted +	* +	**/ +	void addToTheRecentPeopleList(); +  	std::string	mSessionHandle;  	LLUUID		mOtherUserID;  	BOOL		mReceivedCall; | 
