diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llgroupmgr.cpp | 184 | ||||
| -rw-r--r-- | indra/newview/llgroupmgr.h | 6 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupgeneral.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llpanelgroupinvite.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouproles.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 17 | 
7 files changed, 211 insertions, 22 deletions
| diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index aceb7f0614..6916cf813a 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -36,6 +36,7 @@  #include <vector>  #include <algorithm> +#include "llappviewer.h"  #include "llagent.h"  #include "llui.h"  #include "message.h" @@ -745,6 +746,7 @@ void LLGroupMgrGroupData::cancelRoleChanges()  LLGroupMgr::LLGroupMgr()  { +	mLastGroupMembersRequestFrame = 0;  }  LLGroupMgr::~LLGroupMgr() @@ -1500,6 +1502,7 @@ void LLGroupMgr::sendGroupMembersRequest(const LLUUID& group_id)  	}  } +  void LLGroupMgr::sendGroupRoleDataRequest(const LLUUID& group_id)  {  	lldebugs << "LLGroupMgr::sendGroupRoleDataRequest" << llendl; @@ -1832,6 +1835,187 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,  	}  } + +// Responder class for capability group management +class GroupMemberDataResponder : public LLHTTPClient::Responder +{ +public: +		GroupMemberDataResponder() {} +		virtual ~GroupMemberDataResponder() {} +		virtual void result(const LLSD& pContent); +		virtual void error(U32 pStatus, const std::string& pReason); +private: +		LLSD mMemberData; +}; + +void GroupMemberDataResponder::error(U32 pStatus, const std::string& pReason) +{ +	LL_WARNS("GrpMgr") << "Error receiving group member data." << LL_ENDL; +} + +void GroupMemberDataResponder::result(const LLSD& content) +{ +	LLGroupMgr::processCapGroupMembersRequest(content); +} + + +// static +void LLGroupMgr::sendCapGroupMembersRequest(const LLUUID& group_id) +{ +	// Have we requested the information already this frame? +	if(mLastGroupMembersRequestFrame == gFrameCount) +		return; +	 +	LLViewerRegion* currentRegion = gAgent.getRegion(); +	// Thank you FS:Ansariel! +	if(!currentRegion) +	{ +		LL_WARNS("GrpMgr") << "Agent does not have a current region. Uh-oh!" << LL_ENDL; +		return; +	} + +	// Check to make sure we have our capabilities +	if(!currentRegion->capabilitiesReceived()) +	{ +		LL_WARNS("GrpMgr") << " Capabilities not received!" << LL_ENDL; +		return; +	} + +	// Get our capability +	std::string cap_url =  currentRegion->getCapability("GroupMemberData"); + +	// Thank you FS:Ansariel! +	if(cap_url.empty()) +	{ +		LL_INFOS("GrpMgr") << "Region has no GroupMemberData capability.  Falling back to UDP fetch." << LL_ENDL; +		sendGroupMembersRequest(group_id); +		return; +	} + +	// Post to our service.  Add a body containing the group_id. +	LLSD body = LLSD::emptyMap(); +	body["group_id"]	= group_id; + +	LLHTTPClient::ResponderPtr grp_data_responder = new GroupMemberDataResponder(); +	 +	// This could take a while to finish, timeout after 5 minutes. +	LLHTTPClient::post(cap_url, body, grp_data_responder, LLSD(), 300); + +	mLastGroupMembersRequestFrame = gFrameCount; +} + + +// static +void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content) +{ +	// Did we get anything in content? +	if(!content.size()) +	{ +		LL_DEBUGS("GrpMgr") << "No group member data received." << LL_ENDL; +		return; +	} + +	// If we have no members, there's no reason to do anything else +	S32	num_members	= content["member_count"]; +	if(num_members < 1) +		return; +	 +	LLUUID	group_id = content["group_id"].asUUID(); + +	LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id); +	if(!group_datap) +	{ +		LL_WARNS("GrpMgr") << "Received incorrect, possibly stale, group or request id" << LL_ENDL; +		return; +	} + +	group_datap->mMemberCount = num_members; + +	LLSD	member_list	= content["members"]; +	LLSD	titles		= content["titles"]; +	LLSD	defaults	= content["defaults"]; + +	std::string online_status; +	std::string title; +	S32			contribution; +	U64			member_powers; +	// If this is changed to a bool, make sure to change the LLGroupMemberData constructor +	BOOL		is_owner; + +	// Compute this once, rather than every time. +	U64	default_powers	= llstrtou64(defaults["default_powers"].asString().c_str(), NULL, 16); + +	LLSD::map_const_iterator member_iter_start	= member_list.beginMap(); +	LLSD::map_const_iterator member_iter_end	= member_list.endMap(); +	for( ; member_iter_start != member_iter_end; ++member_iter_start) +	{ +		// Reset defaults +		online_status	= "unknown"; +		title			= titles[0].asString(); +		contribution	= 0; +		member_powers	= default_powers; +		is_owner		= false; + +		const LLUUID member_id(member_iter_start->first); +		LLSD member_info = member_iter_start->second; +		 +		if(member_info.has("last_login")) +		{ +			online_status = member_info["last_login"].asString(); +			if(online_status == "Online") +				online_status = LLTrans::getString("group_member_status_online"); +			else +				formatDateString(online_status); +		} + +		if(member_info.has("title")) +			title = titles[member_info["title"].asInteger()].asString(); + +		if(member_info.has("powers")) +			member_powers = llstrtou64(member_info["powers"].asString().c_str(), NULL, 16); + +		if(member_info.has("donated_square_meters")) +			contribution = member_info["donated_square_meters"]; + +		if(member_info.has("owner")) +			is_owner = true; + +		LLGroupMemberData* data = new LLGroupMemberData(member_id,  +			contribution,  +			member_powers,  +			title, +			online_status, +			is_owner); + +		group_datap->mMembers[member_id] = data; +	} + +	// Technically, we have this data, but to prevent completely overhauling +	// this entire system (it would be nice, but I don't have the time),  +	// I'm going to be dumb and just call services I most likely don't need  +	// with the thought being that the system might need it to be done. +	//  +	// TODO: +	// Refactor to reduce multiple calls for data we already have. +	if(group_datap->mTitles.size() < 1) +		LLGroupMgr::getInstance()->sendGroupTitlesRequest(group_id); + + +	group_datap->mMemberDataComplete = TRUE; +	group_datap->mMemberRequestID.setNull(); +	// Make the role-member data request +	if (group_datap->mPendingRoleMemberRequest) +	{ +		group_datap->mPendingRoleMemberRequest = FALSE; +		LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_id); +	} + +	group_datap->mChanged = TRUE; +	LLGroupMgr::getInstance()->notifyObservers(GC_MEMBER_DATA); + +} + +  void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id)  {  	lldebugs << "LLGroupMgr::sendGroupRoleChanges" << llendl; diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h index df3cd17e03..62b2978f21 100644 --- a/indra/newview/llgroupmgr.h +++ b/indra/newview/llgroupmgr.h @@ -340,6 +340,10 @@ public:  	static void sendGroupMemberEjects(const LLUUID& group_id,  									  uuid_vec_t& member_ids); +	// BAKER +	void sendCapGroupMembersRequest(const LLUUID& group_id); +	static void processCapGroupMembersRequest(const LLSD& content); +  	void cancelGroupRoleChanges(const LLUUID& group_id);  	static void processGroupPropertiesReply(LLMessageSystem* msg, void** data); @@ -375,6 +379,8 @@ private:  	typedef std::set<LLParticularGroupObserver*> observer_set_t;  	typedef std::map<LLUUID,observer_set_t> observer_map_t;  	observer_map_t mParticularObservers; + +	S32 mLastGroupMembersRequestFrame;  }; diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index bc594b5517..f6ce7de47e 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -313,11 +313,10 @@ void LLPanelGroupGeneral::activate()  	{  		LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID);  		LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID); -  		if (!gdatap || !gdatap->isMemberDataComplete() )  		{ -			LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); +			LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);  		}  		mFirstUse = FALSE; @@ -714,7 +713,7 @@ void LLPanelGroupGeneral::updateMembers()  	for( ; mMemberProgress != gdatap->mMembers.end() && i<UPDATE_MEMBERS_PER_FRAME;   			++mMemberProgress, ++i)  	{ -		//llinfos << "Adding " << iter->first << ", " << iter->second->getTitle() << llendl; +		lldebugs << "Adding " << mMemberProgress->first << ", " << mMemberProgress->second->getTitle() << llendl;  		LLGroupMemberData* member = mMemberProgress->second;  		if (!member)  		{ @@ -758,15 +757,15 @@ void LLPanelGroupGeneral::updateMembers()  	}  	sAllTime += all_timer.getElapsedTimeF32(); -	llinfos << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl; +	lldebugs << "Updated " << i << " of " << UPDATE_MEMBERS_PER_FRAME << "members in the list." << llendl;  	if (mMemberProgress == gdatap->mMembers.end())  	{ -		llinfos << "   member list completed." << llendl; +		lldebugs << "   member list completed." << llendl;  		mListVisibleMembers->setEnabled(TRUE); -		llinfos << "All Time: " << sAllTime << llendl; -		llinfos << "SD Time: " << sSDTime << llendl; -		llinfos << "Element Time: " << sElementTime << llendl; +		lldebugs << "All Time: " << sAllTime << llendl; +		lldebugs << "SD Time: " << sSDTime << llendl; +		lldebugs << "Element Time: " << sElementTime << llendl;  	}  	else  	{ diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 00dd206571..1ed8d8cf03 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -570,8 +570,8 @@ void LLPanelGroupInvite::updateLists()  		if (!mPendingUpdate)   		{  			LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mImplementation->mGroupID); -			LLGroupMgr::getInstance()->sendGroupMembersRequest(mImplementation->mGroupID);  			LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mImplementation->mGroupID); +			LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mImplementation->mGroupID);  		}  		mPendingUpdate = TRUE;  	}  diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index f825ee3215..bbe47ae943 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -356,7 +356,7 @@ void LLPanelGroupRoles::activate()  		if (!gdatap || !gdatap->isMemberDataComplete() )  		{ -			LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); +			LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);  		}  		// Check role data. @@ -1987,7 +1987,7 @@ void LLPanelGroupRolesSubTab::update(LLGroupChange gc)  	if (!gdatap || !gdatap->isMemberDataComplete())  	{ -		LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); +		LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);  	}  	if (!gdatap || !gdatap->isRoleMemberDataComplete()) @@ -2580,7 +2580,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect()  	}  	else  	{ -		LLGroupMgr::getInstance()->sendGroupMembersRequest(mGroupID); +		LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);  	}  	if (gdatap->isRoleDataComplete()) @@ -2604,6 +2604,7 @@ void LLPanelGroupActionsSubTab::handleActionSelect()  		LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);  	}  } +  void LLPanelGroupRoles::setGroupID(const LLUUID& id)  {  	LLPanelGroupTab::setGroupID(id); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 2bc7430e06..2fe6cd578b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2192,7 +2192,7 @@ void LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)  	}  	updateDrawable(FALSE); -} +	}  } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 5a5df7caf6..b607afbd9d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1523,11 +1523,9 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("CopyInventoryFromNotecard");  	capabilityNames.append("CreateInventoryCategory");  	capabilityNames.append("DispatchRegionInfo"); +	capabilityNames.append("EnvironmentSettings");  	capabilityNames.append("EstateChangeInfo");  	capabilityNames.append("EventQueueGet"); -	capabilityNames.append("EnvironmentSettings"); -	capabilityNames.append("ObjectMedia"); -	capabilityNames.append("ObjectMediaNavigate");  	if (gSavedSettings.getBOOL("UseHTTPInventory"))  	{ @@ -1538,10 +1536,11 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	}  	capabilityNames.append("GetDisplayNames"); -	capabilityNames.append("GetTexture");  	capabilityNames.append("GetMesh");  	capabilityNames.append("GetObjectCost");  	capabilityNames.append("GetObjectPhysicsData"); +	capabilityNames.append("GetTexture"); +	capabilityNames.append("GroupMemberData");  	capabilityNames.append("GroupProposalBallot");  	capabilityNames.append("HomeLocation");  	capabilityNames.append("LandResources"); @@ -1550,9 +1549,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("MeshUploadFlag");	  	capabilityNames.append("NavMeshGenerationStatus");  	capabilityNames.append("NewFileAgentInventory"); +	capabilityNames.append("ObjectMedia"); +	capabilityNames.append("ObjectMediaNavigate");  	capabilityNames.append("ObjectNavMeshProperties");  	capabilityNames.append("ParcelPropertiesUpdate"); -	capabilityNames.append("ParcelNavigateMedia");  	capabilityNames.append("ParcelVoiceInfoRequest");  	capabilityNames.append("ProductInfoRequest");  	capabilityNames.append("ProvisionVoiceAccountRequest"); @@ -1566,10 +1566,9 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("SendUserReport");  	capabilityNames.append("SendUserReportWithScreenshot");  	capabilityNames.append("ServerReleaseNotes"); -	capabilityNames.append("SimConsole"); -	capabilityNames.append("SimulatorFeatures");  	capabilityNames.append("SetDisplayName");  	capabilityNames.append("SimConsoleAsync"); +	capabilityNames.append("SimulatorFeatures");  	capabilityNames.append("StartGroupProposal");  	capabilityNames.append("TerrainNavMeshProperties");  	capabilityNames.append("TextureStats"); @@ -1577,10 +1576,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("UpdateAgentInformation");  	capabilityNames.append("UpdateAgentLanguage");  	capabilityNames.append("UpdateGestureAgentInventory"); -	capabilityNames.append("UpdateNotecardAgentInventory"); -	capabilityNames.append("UpdateScriptAgent");  	capabilityNames.append("UpdateGestureTaskInventory"); +	capabilityNames.append("UpdateNotecardAgentInventory");  	capabilityNames.append("UpdateNotecardTaskInventory"); +	capabilityNames.append("UpdateScriptAgent");  	capabilityNames.append("UpdateScriptTask");  	capabilityNames.append("UploadBakedTexture");  	capabilityNames.append("ViewerMetrics"); | 
