diff options
| -rwxr-xr-x | indra/newview/llchathistory.cpp | 16 | ||||
| -rwxr-xr-x | indra/newview/llfloaterconversationpreview.cpp | 39 | ||||
| -rwxr-xr-x | indra/newview/llfloaterconversationpreview.h | 3 | ||||
| -rwxr-xr-x | indra/newview/llfloaterimcontainer.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/llimview.cpp | 5 | 
5 files changed, 28 insertions, 42 deletions
| diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index af3c6eff11..43a733f918 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -898,20 +898,10 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  				LLStyle::Params link_params(body_message_params);  				link_params.overwriteFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); -				if (from_me) -				{	std::string localized_name; -					bool is_localized = LLTrans::findString(localized_name, "AgentNameSubst"); -					mEditor->appendText((is_localized? localized_name:"(You)") + delimiter, -							prependNewLineState, link_params); -					prependNewLineState = false; -				} -				else -				{  				// Add link to avatar's inspector and delimiter to message. -					mEditor->appendText(std::string(link_params.link_href) + delimiter, -							prependNewLineState, link_params); -					prependNewLineState = false; -				} +				mEditor->appendText(std::string(link_params.link_href) + delimiter, +					prependNewLineState, link_params); +				prependNewLineState = false;  			}  			else  			{ diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp index 7cb313af33..4a85160f95 100755 --- a/indra/newview/llfloaterconversationpreview.cpp +++ b/indra/newview/llfloaterconversationpreview.cpp @@ -43,14 +43,15 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i  	mCurrentPage(0),  	mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")),  	mAccountName(session_id[LL_FCP_ACCOUNT_NAME]), -	mCompleteName(session_id[LL_FCP_COMPLETE_NAME]) +	mCompleteName(session_id[LL_FCP_COMPLETE_NAME]), +	mMutex(NULL)  {  }  BOOL LLFloaterConversationPreview::postBuild()  {  	mChatHistory = getChild<LLChatHistory>("chat_history"); -	LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::SetPages, this, _1, _2)); +	LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2));  	const LLConversation* conv = LLConversationLog::instance().getConversation(mSessionID);  	std::string name; @@ -95,14 +96,15 @@ BOOL LLFloaterConversationPreview::postBuild()  	return LLFloater::postBuild();  } -void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std::string& file_name) +void LLFloaterConversationPreview::setPages(std::list<LLSD>& messages,const std::string& file_name)  {  	if(file_name == mChatHistoryFileName)  	{ +		// additional protection to avoid changes of mMessages in setPages() +		LLMutexLock lock(&mMutex);  		mMessages = messages; +		mCurrentPage = (mMessages.size() ? (mMessages.size() - 1) / mPageSize : 0); - -		mCurrentPage = mMessages.size() / mPageSize;  		mPageSpinner->setEnabled(true);  		mPageSpinner->setMaxValue(mCurrentPage+1);  		mPageSpinner->set(mCurrentPage+1); @@ -110,10 +112,9 @@ void LLFloaterConversationPreview::SetPages(std::list<LLSD>& messages, const std  		std::string total_page_num = llformat("/ %d", mCurrentPage+1);  		getChild<LLTextBox>("page_num_label")->setValue(total_page_num);  		mChatHistoryLoaded = true; -  	} -  } +  void LLFloaterConversationPreview::draw()  {  	if(mChatHistoryLoaded) @@ -134,32 +135,21 @@ void LLFloaterConversationPreview::onOpen(const LLSD& key)  void LLFloaterConversationPreview::showHistory()  { -	if (!mMessages.size()) +	// additional protection to avoid changes of mMessages in setPages() +	LLMutexLock lock(&mMutex); + +	if (!mMessages.size() || mCurrentPage * mPageSize >= mMessages.size())  	{  		return;  	}  	mChatHistory->clear(); -  	std::ostringstream message;  	std::list<LLSD>::const_iterator iter = mMessages.begin(); +	std::advance(iter, mCurrentPage * mPageSize); -	int delta = 0; -	if (mCurrentPage) -	{ -		int remainder = mMessages.size() % mPageSize; -		delta = (remainder == 0) ? 0 : (mPageSize - remainder); -	} - -	std::advance(iter, (mCurrentPage * mPageSize) - delta); - -	for (int msg_num = 0; (iter != mMessages.end() && msg_num < mPageSize); ++iter, ++msg_num) +	for (int msg_num = 0; iter != mMessages.end() && msg_num < mPageSize; ++iter, ++msg_num)  	{ -		if (iter->size() == 0) -		{ -			continue; -		} -  		LLSD msg = *iter;  		LLUUID from_id 		= LLUUID::null; @@ -203,7 +193,6 @@ void LLFloaterConversationPreview::showHistory()  		mChatHistory->appendMessage(chat,chat_args);  	} -  }  void LLFloaterConversationPreview::onMoreHistoryBtnClick() diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h index 389f3dfd09..f8796127ba 100755 --- a/indra/newview/llfloaterconversationpreview.h +++ b/indra/newview/llfloaterconversationpreview.h @@ -42,7 +42,7 @@ public:  	virtual ~LLFloaterConversationPreview(){};  	virtual BOOL postBuild(); -	void SetPages(std::list<LLSD>& messages,const std::string& file_name); +	void setPages(std::list<LLSD>& messages,const std::string& file_name);  	virtual void draw();  	virtual void onOpen(const LLSD& key); @@ -51,6 +51,7 @@ private:  	void onMoreHistoryBtnClick();  	void showHistory(); +	LLMutex			mMutex;  	LLSpinCtrl*		mPageSpinner;  	LLChatHistory*	mChatHistory;  	LLUUID			mSessionID; diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 4591b80ac4..836a455a67 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -674,13 +674,18 @@ void LLFloaterIMContainer::setVisible(BOOL visible)  void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters)  {  	typedef conversations_widgets_map::value_type conv_pair; +	LLFloaterIMNearbyChat *nearby_chat = LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat"); +  	BOOST_FOREACH(conv_pair item, mConversationsWidgets)  	{  		LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second);  		if (widget)  		{  			LLFloater* session_floater = widget->getSessionFloater(); -			if (session_floater && session_floater->isDetachedAndNotMinimized()) + +			// Exclude nearby chat from output, as it should be handled separately  +			if (session_floater && session_floater->isDetachedAndNotMinimized()  +				&& session_floater != nearby_chat)  			{  				floaters.push_back(session_floater);  			} diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 9e23755d73..2e53effcac 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2670,7 +2670,8 @@ void LLIMMgr::addMessage(  		name_is_setted = true;  	}  	bool skip_message = false; -	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly")) +	bool from_linden = LLMuteList::getInstance()->isLinden(from); +	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden)  	{  		// Evaluate if we need to skip this message when that setting is true (default is false)  		skip_message = (LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL);	// Skip non friends... @@ -2716,7 +2717,7 @@ void LLIMMgr::addMessage(  		// Logically it would make more sense to reject the session sooner, in another area of the  		// code, but the session has to be established inside the server before it can be left. -		if (LLMuteList::getInstance()->isMuted(other_participant_id) && !LLMuteList::getInstance()->isLinden(from)) +		if (LLMuteList::getInstance()->isMuted(other_participant_id) && !from_linden)  		{  			llwarns << "Leaving IM session from initiating muted resident " << from << llendl;  			if(!gIMMgr->leaveSession(new_session_id)) | 
