diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llimview.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llspeakers.cpp | 52 | ||||
| -rw-r--r-- | indra/newview/llspeakers.h | 2 | 
3 files changed, 45 insertions, 10 deletions
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 398584e005..e6f93aa9be 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -238,6 +238,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	//we need to wait for session initialization for outgoing ad-hoc and group chat session  	//correct session id for initiated ad-hoc chat will be received from the server +	// Merov : MAINT-1551 : We need to read that mInitialTargetIDs when initializing the conversation  	if (!LLIMModel::getInstance()->sendStartSession(mSessionID, mOtherParticipantID,   		mInitialTargetIDs, mType))  	{ diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index 11d1b563ac..217efdf4af 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -307,7 +307,7 @@ public:  	virtual void error(U32 status, const std::string& reason)  	{ -		llinfos << "Merov debug : UpdateResponder error, status = " << status << ": " << reason << llendl; +		llinfos << "Merov debug : UpdateResponder error, on " << mSessionID << ", status = " << status << ": " << reason << llendl;  	}  private: @@ -322,8 +322,11 @@ LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :  	mVoiceChannel(channelp)  , mVoiceModerated(false)  , mModerateModeHandledFirstTime(false) +, mSessionUpdated(false) +, mSessionID()  {  	static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0); +//	mSessionID = getSessionID();  	mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&LLSpeakerMgr::removeSpeaker, this, _1), remove_delay);  } @@ -547,7 +550,7 @@ void LLSpeakerMgr::updateSpeakerList()  		LLUUID session_id = getSessionID();  		if ((mSpeakers.size() == 0) && (!session_id.isNull()))  		{ -			llinfos << "Merov debug : LLSpeakerMgr::updateSpeakerList: No speakers in " << session_id << llendl; +			//llinfos << "Merov debug : LLSpeakerMgr::updateSpeakerList: No speakers in " << session_id << llendl;  			// MAINT-1551 : If the list is empty for too long, we should send a message to the sim so that  			// it sends the participant list again.  			updateSession(); @@ -557,21 +560,50 @@ void LLSpeakerMgr::updateSpeakerList()  void LLSpeakerMgr::updateSession()  { +	// We perform this update if is has never been done or if the session id changed (which happens in ad-hoc sessions) +	if (mSessionUpdated && (mSessionID == getSessionID())) +		return; +	  	std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");  	LLSD data; -	data["method"] = "accept invitation"; -//	data["method"] = "session update"; + +// That doesn't work apparently because we are not in the invite list so we get error 500 +//	data["method"] = "accept invitation"; +//	data["session-id"] = getSessionID(); + +// That doesn't work because we're not a moderator on an IM session so our request is rejected as such	(error 403) +	data["method"] = "session update"; +	data["session-id"] = getSessionID(); +	data["params"] = LLSD::emptyMap();	 +	data["params"]["update_info"] = LLSD::emptyMap(); +	data["params"]["update_info"]["moderated_mode"] = LLSD::emptyMap(); +	data["params"]["update_info"]["moderated_mode"]["voice"] = false; + +// That doesn't work, we eventually time out (error 502)... +//	data["method"] = "call"; +//	data["session-id"] = getSessionID(); + +	data["params"] = LLSD::emptyArray(); +//	for (int i = 0; i < count; i++) +//	{ +//		data["params"].append(ids[i]); +//	} +	data["params"].append(gAgentID); +	data["method"] = "invite";  	data["session-id"] = getSessionID(); -//	data["params"] = LLSD::emptyMap(); -	 -//	data["params"]["update_info"] = LLSD::emptyMap(); -	 -//	data["params"]["update_info"]["moderated_mode"] = LLSD::emptyMap(); -//	data["params"]["update_info"]["moderated_mode"]["voice"] = false;  	llinfos << "Merov debug : viewer->sim : LLSpeakerMgr::updateSession, session id = " << getSessionID() << ", data = " << LLSDOStreamer<LLSDNotationFormatter>(data) << llendl;  	LLHTTPClient::post(url, data, new UpdateResponder(getSessionID())); +	 +	// bit of extra in the case of invite being sent +	data.clear(); +	data["method"] = "accept invitation"; +	data["session-id"] = getSessionID(); +	LLHTTPClient::post(url, data, new UpdateResponder(getSessionID())); + +	mSessionUpdated = true; +	mSessionID = getSessionID();  }  void LLSpeakerMgr::setSpeakerNotInChannel(LLSpeaker* speakerp) diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index 671b3fb341..8a80c4619e 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -259,6 +259,8 @@ protected:  	bool removeSpeaker(const LLUUID& speaker_id);  	void updateSession(); +	bool mSessionUpdated; +	LLUUID mSessionID;  	typedef std::map<LLUUID, LLPointer<LLSpeaker> > speaker_map_t;  	speaker_map_t		mSpeakers;  | 
