diff options
Diffstat (limited to 'indra')
60 files changed, 383 insertions, 628 deletions
| diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index d35f249973..5c0de19caa 100644 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -827,7 +827,8 @@ void LLAudioEngine::triggerSound(const LLUUID &audio_uuid, const LLUUID& owner_i  	addAudioSource(asp);  	if (pos_global.isExactlyZero())  	{ -		asp->setAmbient(true); +		// For sound preview and UI +		asp->setForcedPriority(true);  	}  	else  	{ @@ -1273,7 +1274,7 @@ LLAudioSource::LLAudioSource(const LLUUID& id, const LLUUID& owner_id, const F32  	mPriority(0.f),  	mGain(gain),  	mSourceMuted(false), -	mAmbient(false), +	mForcedPriority(false),  	mLoop(false),  	mSyncMaster(false),  	mSyncSlave(false), @@ -1339,7 +1340,7 @@ void LLAudioSource::update()  void LLAudioSource::updatePriority()  { -	if (isAmbient()) +	if (isForcedPriority())  	{  		mPriority = 1.f;  	} diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index 577b36d667..c842c80ff7 100644 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -266,8 +266,8 @@ public:  	void addAudioData(LLAudioData *adp, bool set_current = TRUE); -	void setAmbient(const bool ambient)						{ mAmbient = ambient; } -	bool isAmbient() const									{ return mAmbient; } +	void setForcedPriority(const bool ambient)						{ mForcedPriority = ambient; } +	bool isForcedPriority() const									{ return mForcedPriority; }  	void setLoop(const bool loop)							{ mLoop = loop; }  	bool isLoop() const										{ return mLoop; } @@ -320,7 +320,7 @@ protected:  	F32				mPriority;  	F32				mGain;  	bool			mSourceMuted; -	bool			mAmbient; +	bool			mForcedPriority; // ignore mute, set high priority, researved for sound preview and UI  	bool			mLoop;  	bool			mSyncMaster;  	bool			mSyncSlave; diff --git a/indra/llaudio/llaudioengine_fmodstudio.cpp b/indra/llaudio/llaudioengine_fmodstudio.cpp index 70b3a08473..5450577134 100644 --- a/indra/llaudio/llaudioengine_fmodstudio.cpp +++ b/indra/llaudio/llaudioengine_fmodstudio.cpp @@ -519,9 +519,9 @@ void LLAudioChannelFMODSTUDIO::update3DPosition()          return;      } -    if (mCurrentSourcep->isAmbient()) +    if (mCurrentSourcep->isForcedPriority())      { -        // Ambient sound, don't need to do any positional updates. +        // Prioritized UI and preview sounds don't need to do any positional updates.          set3DMode(false);      }      else diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp index 3bdd0302ee..305aa1ecb5 100644 --- a/indra/llaudio/llaudioengine_openal.cpp +++ b/indra/llaudio/llaudioengine_openal.cpp @@ -297,7 +297,7 @@ void LLAudioChannelOpenAL::update3DPosition()  	{  		return;  	} -	if (mCurrentSourcep->isAmbient()) +	if (mCurrentSourcep->isForcedPriority())  	{  		alSource3f(mALSource, AL_POSITION, 0.0, 0.0, 0.0);  		alSource3f(mALSource, AL_VELOCITY, 0.0, 0.0, 0.0); diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index e2469f3c7e..140cc2f3af 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -234,6 +234,8 @@ void LLParcel::init(const LLUUID &owner_id,      setRegionAllowEnvironmentOverride(FALSE);      setParcelEnvironmentVersion(INVALID_PARCEL_ENVIRONMENT_VERSION); + +    setObscureMOAP(false);  }  void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned) @@ -540,6 +542,7 @@ void LLParcel::packMessage(LLSD& msg)  	msg["see_avs"] = (LLSD::Boolean) getSeeAVs();  	msg["group_av_sounds"] = (LLSD::Boolean) getAllowGroupAVSounds();  	msg["any_av_sounds"] = (LLSD::Boolean) getAllowAnyAVSounds(); +    msg["obscure_moap"] = (LLSD::Boolean) getObscureMOAP();  } diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 5d08c1f4c6..f5ee1241ab 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -306,6 +306,7 @@ public:  	void	setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); }  	void	setAllowGroupAVSounds(BOOL b)	{ mAllowGroupAVSounds = b;		}  	void	setAllowAnyAVSounds(BOOL b)		{ mAllowAnyAVSounds = b;		} +    void    setObscureMOAP(bool b)  { mObscureMOAP = b; }  	void	setDrawDistance(F32 dist)	{ mDrawDistance = dist; }  	void	setSalePrice(S32 price)		{ mSalePrice = price; } @@ -517,6 +518,8 @@ public:  	BOOL	getAllowGroupAVSounds()	const	{ return mAllowGroupAVSounds;	}   	BOOL	getAllowAnyAVSounds()	const	{ return mAllowAnyAVSounds;		} +  +    bool    getObscureMOAP() const { return mObscureMOAP; }  	F32		getDrawDistance() const			{ return mDrawDistance; }  	S32		getSalePrice() const			{ return mSalePrice; } @@ -670,6 +673,7 @@ protected:      BOOL                mRegionAllowEnvironmentOverride;  	BOOL				mAllowGroupAVSounds;  	BOOL				mAllowAnyAVSounds; +    bool                mObscureMOAP;      S32                 mCurrentEnvironmentVersion;      bool                mIsDefaultDayCycle; diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index 219b1855d2..35dcbe3836 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1386,6 +1386,7 @@ char const* const _PREHASH_RegionAllowAccessBlock = LLMessageStringTable::getIns  char const* const _PREHASH_RegionAllowAccessOverride = LLMessageStringTable::getInstance()->getString("RegionAllowAccessOverride");  char const* const _PREHASH_ParcelEnvironmentBlock = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentBlock");  char const* const _PREHASH_ParcelEnvironmentVersion = LLMessageStringTable::getInstance()->getString("ParcelEnvironmentVersion"); +char const* const _PREHASH_ParcelExtendedFlags = LLMessageStringTable::getInstance()->getString("ParcelExtendedFlags");  char const* const _PREHASH_RegionAllowEnvironmentOverride = LLMessageStringTable::getInstance()->getString("RegionAllowEnvironmentOverride");  char const* const _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord");  char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 8f6ee5a327..3015f438b5 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1386,6 +1386,7 @@ extern char const* const _PREHASH_RegionAllowAccessBlock;  extern char const* const _PREHASH_RegionAllowAccessOverride;  extern char const* const _PREHASH_ParcelEnvironmentBlock;  extern char const* const _PREHASH_ParcelEnvironmentVersion; +extern char const* const _PREHASH_ParcelExtendedFlags;  extern char const* const _PREHASH_RegionAllowEnvironmentOverride;  extern char const* const _PREHASH_UCoord;  extern char const* const _PREHASH_VCoord; diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 6f88232c1d..3e72710366 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -1549,6 +1549,7 @@ void LLPluginClassMedia::seek(float time)  	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek");  	message.setValueReal("time", time); +    mCurrentTime = time; // assume that it worked and we will receive an update later  	sendMessage(message);  } diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp index 538508b856..78049319bc 100644 --- a/indra/llui/lltextutil.cpp +++ b/indra/llui/lltextutil.cpp @@ -76,22 +76,6 @@ void LLTextUtil::textboxSetGreyedVal(LLTextBox *txtbox, const LLStyle::Params& n      txtbox->appendText(text.substr(greyed_begin + greyed_len),  false, normal_style);  } -const std::string& LLTextUtil::formatPhoneNumber(const std::string& phone_str) -{ -	static const std::string PHONE_SEPARATOR = LLUI::getInstance()->mSettingGroups["config"]->getString("AvalinePhoneSeparator"); -	static const S32 PHONE_PART_LEN = 2; - -	static std::string formatted_phone_str; -	formatted_phone_str = phone_str; -	S32 separator_pos = (S32)(formatted_phone_str.size()) - PHONE_PART_LEN; -	for (; separator_pos >= PHONE_PART_LEN; separator_pos -= PHONE_PART_LEN) -	{ -		formatted_phone_str.insert(separator_pos, PHONE_SEPARATOR); -	} - -	return formatted_phone_str; -} -  bool LLTextUtil::processUrlMatch(LLUrlMatch* match,LLTextBase* text_base, bool is_content_trusted)  {  	if (match == 0 || text_base == 0) diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h index a9c143e445..1adc3516f7 100644 --- a/indra/llui/lltextutil.h +++ b/indra/llui/lltextutil.h @@ -59,18 +59,6 @@ namespace LLTextUtil  	        const std::string& greyed);  	/** -	 * Formats passed phone number to be more human readable. -	 * -	 * It just divides the number on parts by two digits from right to left. The first left part -	 * can have 2 or 3 digits, i.e. +44-33-33-44-55-66 or 12-34-56-78-90. Separator is set in -	 * application settings (AvalinePhoneSeparator) -	 * -	 * @param[in] phone_str string with original phone number -	 * @return reference to string with formatted phone number -	 */ -	const std::string& formatPhoneNumber(const std::string& phone_str); - -	/**  	 * Adds icon before url if need.  	 *  	 * @param[in] match an object with results of matching diff --git a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp index 1afe25e9a1..bbb15c3955 100644 --- a/indra/media_plugins/libvlc/media_plugin_libvlc.cpp +++ b/indra/media_plugins/libvlc/media_plugin_libvlc.cpp @@ -93,8 +93,8 @@ private:  	bool mIsLooping; -	float mCurTime; -	float mDuration; +	F64 mCurTime; +	F64 mDuration;  	EStatus mVlcStatus;  }; @@ -562,7 +562,24 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string)  						mTextureWidth = texture_width;  						mTextureHeight = texture_height; +                        libvlc_time_t time = 1000.0 * mCurTime; +  						playMedia(); + +                        if (mLibVLCMediaPlayer) +                        { +                            libvlc_media_player_set_time(mLibVLCMediaPlayer, time); +                            time = libvlc_media_player_get_time(mLibVLCMediaPlayer); +                            if (time < 0) +                            { +                                // -1 if there is no media +                                mCurTime = 0; +                            } +                            else +                            { +                                mCurTime = (F64)time / 1000.0; +                            } +                        }  					};  				}; @@ -606,11 +623,27 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string)  				}  				else if (message_name == "seek")  				{ -					if (mDuration > 0) -					{ -						F64 normalized_offset = message_in.getValueReal("time") / mDuration; -						libvlc_media_player_set_position(mLibVLCMediaPlayer, normalized_offset); -					} +                    if (mLibVLCMediaPlayer) +                    { +                        libvlc_time_t time = 1000.0 * message_in.getValueReal("time"); +                        libvlc_media_player_set_time(mLibVLCMediaPlayer, time); +                        time = libvlc_media_player_get_time(mLibVLCMediaPlayer); +                        if (time < 0) +                        { +                            // -1 if there is no media +                            mCurTime = 0; +                        } +                        else +                        { +                            mCurTime = (F64)time / 1000.0; +                        } + +                        if (!libvlc_media_player_is_playing(mLibVLCMediaPlayer)) +                        { +                            // if paused, won't trigger update, update now +                            setDirty(0, 0, mWidth, mHeight); +                        } +                    }  				}  				else if (message_name == "set_loop")  				{ diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 12f435f931..91370f7da3 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -544,17 +544,6 @@        <key>Value</key>        <integer>1</integer>      </map> -    <key>AvalinePhoneSeparator</key> -    <map> -      <key>Comment</key> -      <string>Separator of phone parts to have Avaline numbers human readable in Voice Control Panel</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>String</string> -      <key>Value</key> -      <string>-</string> -    </map>      <key>AvatarAxisDeadZone0</key>      <map>        <key>Comment</key> @@ -4758,7 +4747,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>https://search.[GRID]/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string> +      <string>https://search.[GRID]/?query_term=[QUERY]&search_type=[TYPE][COLLECTION]&maturity=[MATURITY]&p=[AUTH_TOKEN]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string>      </map>      <key>GuidebookURL</key>      <map> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c3c9708dc6..f3f74ee3af 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -5430,7 +5430,7 @@ void LLAppViewer::disconnectViewer()  		gFloaterView->restoreAll();  	} -	if (LLSelectMgr::getInstance()) +	if (LLSelectMgr::instanceExists())  	{  		LLSelectMgr::getInstance()->deselectAll();  	} diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index b0715a3afd..c0990d9d11 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -241,21 +241,6 @@ void LLAvatarList::setDirty(bool val /*= true*/, bool force_refresh /*= false*/)  	}  } -void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name) -{ -	LL_DEBUGS("Avaline") << "Adding avaline item into the list: " << item_name << "|" << item_id << ", session: " << session_id << LL_ENDL; -	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); -	sort(); -} -  //////////////////////////////////////////////////////////////////////////  // PROTECTED SECTION  ////////////////////////////////////////////////////////////////////////// @@ -296,18 +281,10 @@ void LLAvatarList::refresh()  			{  				// *NOTE: If you change the UI to show a different string,  				// be sure to change the filter code below. -				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 -				{ -					std::string display_name = getAvatarName(av_name); -					addNewItem(buddy_id,  -						display_name.empty() ? waiting_str : display_name,  -						LLAvatarTracker::instance().isBuddyOnline(buddy_id)); -				} +				std::string display_name = getAvatarName(av_name); +				addNewItem(buddy_id,  +					display_name.empty() ? waiting_str : display_name,  +					LLAvatarTracker::instance().isBuddyOnline(buddy_id));  				modified = true;  				nadded++; @@ -463,7 +440,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 && !isAvalineItemSelected()) +	if ( mContextMenu)  	{  		uuid_vec_t selected_uuids;  		getSelectedUUIDs(selected_uuids); @@ -523,21 +500,6 @@ BOOL LLAvatarList::handleHover(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 ) @@ -626,63 +588,3 @@ bool LLAvatarItemAgentOnTopComparator::doCompare(const LLAvatarListItem* avatar_  	}  	return LLAvatarItemNameComparator::doCompare(avatar_item1,avatar_item2);  } - -/************************************************************************/ -/*             class LLAvalineListItem                                  */ -/************************************************************************/ -LLAvalineListItem::LLAvalineListItem(bool hide_number/* = true*/) : LLAvatarListItem(false) -, mIsHideNumber(hide_number) -{ -	// should not use buildPanel from the base class to ensure LLAvalineListItem::postBuild is called. -	buildFromFile( "panel_avatar_list_item.xml"); -} - -BOOL LLAvalineListItem::postBuild() -{ -	BOOL rv = LLAvatarListItem::postBuild(); - -	if (rv) -	{ -		setOnline(true); -		showLastInteractionTime(false); -		setShowProfileBtn(false); -		setShowInfoBtn(false); -		mAvatarIcon->setValue("Avaline_Icon"); -		mAvatarIcon->setToolTip(std::string("")); -	} -	return rv; -} - -// to work correctly this method should be called AFTER setAvatarId for avaline callers with hidden phone number -void LLAvalineListItem::setName(const std::string& name) -{ -	if (mIsHideNumber) -	{ -		static U32 order = 0; -		typedef std::map<LLUUID, U32> avaline_callers_nums_t; -		static avaline_callers_nums_t mAvalineCallersNums; - -		llassert(getAvatarId() != LLUUID::null); - -		const LLUUID &uuid = getAvatarId(); - -		if (mAvalineCallersNums.find(uuid) == mAvalineCallersNums.end()) -		{ -			mAvalineCallersNums[uuid] = ++order; -			LL_DEBUGS("Avaline") << "Set name for new avaline caller: " << uuid << ", order: " << order << LL_ENDL; -		} -		LLStringUtil::format_map_t args; -		args["[ORDER]"] = llformat("%u", mAvalineCallersNums[uuid]); -		std::string hidden_name = LLTrans::getString("AvalineCaller", args); - -		LL_DEBUGS("Avaline") << "Avaline caller: " << uuid << ", name: " << hidden_name << LL_ENDL; -		LLAvatarListItem::setAvatarName(hidden_name); -		LLAvatarListItem::setAvatarToolTip(hidden_name); -	} -	else -	{ -		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name); -		LLAvatarListItem::setAvatarName(formatted_phone); -		LLAvatarListItem::setAvatarToolTip(formatted_phone); -	} -} diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 1a672c279b..48b0e70454 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -98,7 +98,6 @@ public:  	virtual S32 notifyParent(const LLSD& info); -	void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);  	void handleDisplayNamesOptionChanged();  	void setShowCompleteName(bool show) { mShowCompleteName = show;}; @@ -118,8 +117,6 @@ protected:  private: -	bool isAvalineItemSelected(); -  	bool mIgnoreOnlineStatus;  	bool mShowLastInteractionTime;  	bool mDirty; @@ -189,27 +186,4 @@ protected:  	virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;  }; -/** - * Represents Avaline caller in Avatar list in Voice Control Panel and group chats. - */ -class LLAvalineListItem : public LLAvatarListItem -{ -public: - -	/** -	 * Constructor -	 * -	 * @param hide_number - flag indicating if number should be hidden. -	 *		In this case It will be shown as "Avaline Caller 1", "Avaline Caller 1", etc. -	 */ -	LLAvalineListItem(bool hide_number = true); - -	/*virtual*/ BOOL postBuild(); - -	/*virtual*/ void setName(const std::string& name); - -private: -	bool mIsHideNumber; -}; -  #endif // LL_LLAVATARLIST_H diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 779542cfcc..8ff89fa194 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -83,8 +83,9 @@ public:  LLSearchHandler gSearchHandler;  LLFloaterSearch::SearchQuery::SearchQuery() -:	category("category", ""), -	query("query") +:   category("category", ""), +    collection("collection", ""), +    query("query")  {}  LLFloaterSearch::LLFloaterSearch(const Params& key) : @@ -93,16 +94,16 @@ LLFloaterSearch::LLFloaterSearch(const Params& key) :  {  	// declare a map that transforms a category name into  	// the URL suffix that is used to search that category -	mCategoryPaths = LLSD::emptyMap(); -	mCategoryPaths["all"]          = "search"; -	mCategoryPaths["people"]       = "search/people"; -	mCategoryPaths["places"]       = "search/places"; -	mCategoryPaths["events"]       = "search/events"; -	mCategoryPaths["groups"]       = "search/groups"; -	mCategoryPaths["wiki"]         = "search/wiki"; -	mCategoryPaths["land"]         = "land"; -	mCategoryPaths["destinations"] = "destinations"; -	mCategoryPaths["classifieds"]  = "classifieds"; + +    mSearchType.insert("standard"); +    mSearchType.insert("land"); +    mSearchType.insert("classified"); + +    mCollectionType.insert("events"); +    mCollectionType.insert("destinations"); +    mCollectionType.insert("places"); +    mCollectionType.insert("groups"); +    mCollectionType.insert("people");  }  BOOL LLFloaterSearch::postBuild() @@ -157,18 +158,36 @@ void LLFloaterSearch::search(const SearchQuery &p)  	// work out the subdir to use based on the requested category  	LLSD subs; -	if (mCategoryPaths.has(p.category)) +	if (mSearchType.find(p.category) != mSearchType.end())  	{ -		subs["CATEGORY"] = mCategoryPaths[p.category].asString(); +		subs["TYPE"] = p.category;  	}  	else  	{ -		subs["CATEGORY"] = mCategoryPaths["all"].asString(); +		subs["TYPE"] = "standard";  	}  	// add the search query string  	subs["QUERY"] = LLURI::escape(p.query); +    subs["COLLECTION"] = ""; +    if (subs["TYPE"] == "standard") +    { +        if (mCollectionType.find(p.collection) != mCollectionType.end()) +        { +            subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection); +        } +        else +        { +            std::string collection_args(""); +            for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it) +            { +                collection_args += "&collection_chosen=" + std::string(*it); +            } +            subs["COLLECTION"] = collection_args; +        } +    } +  	// add the permissions token that login.cgi gave us  	// We use "search_token", and fallback to "auth_token" if not present.  	LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token"); @@ -182,15 +201,15 @@ void LLFloaterSearch::search(const SearchQuery &p)  	std::string maturity;  	if (gAgent.prefersAdult())  	{ -		maturity = "42";  // PG,Mature,Adult +		maturity = "gma";  // PG,Mature,Adult  	}  	else if (gAgent.prefersMature())  	{ -		maturity = "21";  // PG,Mature +		maturity = "gm";  // PG,Mature  	}  	else  	{ -		maturity = "13";  // PG +		maturity = "g";  // PG  	}  	subs["MATURITY"] = maturity; diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h index 35b268e1b2..cc77ce696f 100644 --- a/indra/newview/llfloatersearch.h +++ b/indra/newview/llfloatersearch.h @@ -49,6 +49,7 @@ public:  	struct SearchQuery : public LLInitParam::Block<SearchQuery>  	{  		Optional<std::string> category; +        Optional<std::string> collection;  		Optional<std::string> query;  		SearchQuery(); @@ -84,7 +85,8 @@ public:  private:  	/*virtual*/ BOOL postBuild(); -	LLSD        mCategoryPaths; +    std::set<std::string> mSearchType; +    std::set<std::string> mCollectionType;  	U8          mSearchGodLevel;  }; diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index 12d82d101f..f52f76330b 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -196,7 +196,7 @@ LLFetchLeaveGroupData* gFetchLeaveGroupData = NULL;  // static  void LLGroupActions::search()  { -	LLFloaterReg::showInstance("search", LLSD().with("category", "groups")); +	LLFloaterReg::showInstance("search", LLSD().with("collection", "groups"));  }  // static diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 1059324a16..1b70e9a9a8 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -532,7 +532,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	mSessionInitialized(false),  	mCallBackEnabled(true),  	mTextIMPossible(true), -	mOtherParticipantIsAvatar(true),  	mStartCallOnInitialize(false),  	mStartedAsIMCall(voice),  	mIsDNDsend(false), @@ -544,13 +543,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	if (IM_NOTHING_SPECIAL == mType || IM_SESSION_P2P_INVITE == mType)  	{  		mVoiceChannel  = new LLVoiceChannelP2P(session_id, name, other_participant_id); -		mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID); - -		// check if it was AVALINE call -		if (!mOtherParticipantIsAvatar) -		{ -			mSessionType = AVALINE_SESSION; -		}   	}  	else  	{ @@ -651,9 +643,6 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES  	switch(mSessionType)  	{ -	case AVALINE_SESSION: -		// no text notifications -		break;  	case P2P_SESSION:  		LLAvatarNameCache::get(mOtherParticipantID, &av_name);  		other_avatar_name = av_name.getUserName(); @@ -913,11 +902,6 @@ bool LLIMModel::LLIMSession::isGroupChat()  	return IM_SESSION_GROUP_START == mType || (IM_SESSION_INVITE == mType && gAgent.isInGroup(mSessionID));  } -bool LLIMModel::LLIMSession::isOtherParticipantAvaline() -{ -	return !mOtherParticipantIsAvatar; -} -  LLUUID LLIMModel::LLIMSession::generateOutgoingAdHocHash() const  {  	LLUUID hash = LLUUID::null; @@ -1796,7 +1780,6 @@ LLIMMgr::onConfirmForceCloseError(  LLCallDialogManager::LLCallDialogManager():  mPreviousSessionlName(""), -mPreviousSessionType(LLIMModel::LLIMSession::P2P_SESSION),  mCurrentSessionlName(""),  mSession(NULL),  mOldState(LLVoiceChannel::STATE_READY) @@ -1827,12 +1810,6 @@ void LLCallDialogManager::onVoiceChannelChangedInt(const LLUUID &session_id)  		mCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution  		return;  	} -	 -	if (mSession) -	{ -		// store previous session type to process Avaline calls in dialogs -		mPreviousSessionType = mSession->mSessionType; -	}  	mSession = session; @@ -1858,7 +1835,6 @@ void LLCallDialogManager::onVoiceChannelChangedInt(const LLUUID &session_id)  		mCallDialogPayload["session_name"] = mSession->mName;  		mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;  		mCallDialogPayload["old_channel_name"] = mPreviousSessionlName; -		mCallDialogPayload["old_session_type"] = mPreviousSessionType;  		mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED;  		mCallDialogPayload["disconnected_channel_name"] = mSession->mName;  		mCallDialogPayload["session_type"] = mSession->mSessionType; @@ -1894,7 +1870,6 @@ void LLCallDialogManager::onVoiceChannelStateChangedInt(const LLVoiceChannel::ES  	mCallDialogPayload["session_name"] = mSession->mName;  	mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;  	mCallDialogPayload["old_channel_name"] = mPreviousSessionlName; -	mCallDialogPayload["old_session_type"] = mPreviousSessionType;  	mCallDialogPayload["state"] = new_state;  	mCallDialogPayload["disconnected_channel_name"] = mSession->mName;  	mCallDialogPayload["session_type"] = mSession->mSessionType; @@ -1911,8 +1886,7 @@ void LLCallDialogManager::onVoiceChannelStateChangedInt(const LLVoiceChannel::ES  		break;  	case LLVoiceChannel::STATE_HUNG_UP: -		// this state is coming before session is changed, so, put it into payload map -		mCallDialogPayload["old_session_type"] = mSession->mSessionType; +		// this state is coming before session is changed  		break;  	case LLVoiceChannel::STATE_CONNECTED : @@ -2032,7 +2006,6 @@ void LLCallDialog::onOpen(const LLSD& key)  void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)  { -	// *NOTE: 12/28/2009: check avaline calls: LLVoiceClient::isParticipantAvatar returns false for them  	bool participant_is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);  	bool is_group = participant_is_avatar && gAgent.isInGroup(session_id); @@ -2053,8 +2026,8 @@ void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)  	}  	else  	{ -		avatar_icon->setValue("Avaline_Icon"); -		avatar_icon->setToolTip(std::string("")); +        LL_WARNS() << "Participant neither avatar nor group" << LL_ENDL; +        group_icon->setValue(session_id);  	}  } @@ -2098,13 +2071,7 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	// tell the user which voice channel they are leaving  	if (!mPayload["old_channel_name"].asString().empty())  	{ -		bool was_avaline_call = LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["old_session_type"].asInteger(); -  		std::string old_caller_name = mPayload["old_channel_name"].asString(); -		if (was_avaline_call) -		{ -			old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name); -		}  		getChild<LLUICtrl>("leaving")->setTextArg("[CURRENT_CHAT]", old_caller_name);  		show_oldchannel = true; @@ -2117,10 +2084,6 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	if (!mPayload["disconnected_channel_name"].asString().empty())  	{  		std::string channel_name = mPayload["disconnected_channel_name"].asString(); -		if (LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["session_type"].asInteger()) -		{ -			channel_name = LLTextUtil::formatPhoneNumber(channel_name); -		}  		getChild<LLUICtrl>("nearby")->setTextArg("[VOICE_CHANNEL_NAME]", channel_name);  		// skipping "You will now be reconnected to nearby" in notification when call is ended by disabling voice, @@ -2136,16 +2099,11 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	std::string callee_name = mPayload["session_name"].asString();  	LLUUID session_id = mPayload["session_id"].asUUID(); -	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); -	if (callee_name == "anonymous") +	if (callee_name == "anonymous") // obsolete? Likely was part of avaline support  	{  		callee_name = getString("anonymous");  	} -	else if (!is_avatar) -	{ -		callee_name = LLTextUtil::formatPhoneNumber(callee_name); -	}  	LLSD callee_id = mPayload["other_user_id"];  	// Beautification:  Since you know who you called, just show display name @@ -2345,18 +2303,11 @@ BOOL LLIncomingCallDialog::postBuild()  		call_type = getString(notify_box_type);  	} -	// check to see if this is an Avaline call -	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); -	if (caller_name == "anonymous") +	if (caller_name == "anonymous") // obsolete?  Likely was part of avaline support  	{  		caller_name = getString("anonymous");  		setCallerName(caller_name, caller_name, call_type);  	} -	else if (!is_avatar) -	{ -		caller_name = LLTextUtil::formatPhoneNumber(caller_name); -		setCallerName(caller_name, caller_name, call_type); -	}  	else  	{  		// Get the full name information @@ -2376,7 +2327,7 @@ BOOL LLIncomingCallDialog::postBuild()  	if(notify_box_type != "VoiceInviteGroup" && notify_box_type != "VoiceInviteAdHoc")  	{ -		// starting notification's timer for P2P and AVALINE invitations +		// starting notification's timer for P2P invitations  		mLifetimeTimer.start();  	}  	else @@ -2385,7 +2336,7 @@ BOOL LLIncomingCallDialog::postBuild()  	}  	//it's not possible to connect to existing Ad-Hoc/Group chat through incoming ad-hoc call -	//and no IM for avaline +	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);  	getChildView("Start IM")->setVisible( is_avatar && notify_box_type != "VoiceInviteAdHoc" && notify_box_type != "VoiceInviteGroup");  	setCanDrag(FALSE); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 79c831ebb6..fdf9806e2e 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -72,7 +72,6 @@ public:  			P2P_SESSION,  			GROUP_SESSION,  			ADHOC_SESSION, -			AVALINE_SESSION,  			NONE_SESSION,  		} SType; @@ -92,12 +91,10 @@ public:  		bool isAdHoc();  		bool isP2P();  		bool isGroupChat(); -		bool isOtherParticipantAvaline();  		bool isP2PSessionType() const { return mSessionType == P2P_SESSION;}  		bool isAdHocSessionType() const { return mSessionType == ADHOC_SESSION;}  		bool isGroupSessionType() const { return mSessionType == GROUP_SESSION;} -		bool isAvalineSessionType() const { return mSessionType == AVALINE_SESSION;}  		LLUUID generateOutgoingAdHocHash() const; @@ -136,7 +133,6 @@ public:  		bool mCallBackEnabled;  		bool mTextIMPossible; -		bool mOtherParticipantIsAvatar;  		bool mStartCallOnInitialize;  		//if IM session is created for a voice call @@ -516,7 +512,6 @@ private:  protected:  	std::string mPreviousSessionlName; -	LLIMModel::LLIMSession::SType mPreviousSessionType;  	std::string mCurrentSessionlName;  	LLIMModel::LLIMSession* mSession;  	LLVoiceChannel::EState mOldState; diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 4a8ef53a8b..bf00d77dea 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -352,7 +352,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)  void LLMuteList::updateAdd(const LLMute& mute)  { -	// External mutes (e.g. Avaline callers) are local only, don't send them to the server. +	// External mutes are local only, don't send them to the server.  	if (mute.mType == LLMute::EXTERNAL)  	{  		return; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index 19dbbeb60e..f0ed4108cb 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -713,7 +713,7 @@ void LLNavigationBar::resizeLayoutPanel()  }  void LLNavigationBar::invokeSearch(std::string search_text)  { -	LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text))); +	LLFloaterReg::showInstance("search", LLSD().with("category", "standard").with("query", LLSD(search_text)));  }  void LLNavigationBar::clearHistoryCache() diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp index e7bdc51b4a..9e3fc54477 100644 --- a/indra/newview/llpanellandaudio.cpp +++ b/indra/newview/llpanellandaudio.cpp @@ -97,6 +97,9 @@ BOOL LLPanelLandAudio::postBuild()  	mCheckAVSoundGroup = getChild<LLCheckBoxCtrl>("group av sound check");  	childSetCommitCallback("group av sound check", onCommitAny, this); +    mCheckObscureMOAP = getChild<LLCheckBoxCtrl>("obscure_moap"); +    childSetCommitCallback("obscure_moap", onCommitAny, this); +  	return TRUE;  } @@ -157,6 +160,9 @@ void LLPanelLandAudio::refresh()  		mCheckAVSoundGroup->set(parcel->getAllowGroupAVSounds() || parcel->getAllowAnyAVSounds());	// On if "Everyone" is on  		mCheckAVSoundGroup->setEnabled(can_change_av_sounds && !parcel->getAllowAnyAVSounds());		// Enabled if "Everyone" is off + +        mCheckObscureMOAP->set(parcel->getObscureMOAP()); +        mCheckObscureMOAP->setEnabled(can_change_media);  	}  }  // static @@ -184,6 +190,8 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)  		group_av_sound = self->mCheckAVSoundGroup->get();  	} +    bool obscure_moap = self->mCheckObscureMOAP->get(); +  	// Remove leading/trailing whitespace (common when copying/pasting)  	LLStringUtil::trim(music_url); @@ -194,6 +202,7 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)  	parcel->setMusicURL(music_url);  	parcel->setAllowAnyAVSounds(any_av_sound);  	parcel->setAllowGroupAVSounds(group_av_sound); +    parcel->setObscureMOAP(obscure_moap);  	// Send current parcel data upstream to server  	LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel ); diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h index 7e4fce80e4..b54fe62179 100644 --- a/indra/newview/llpanellandaudio.h +++ b/indra/newview/llpanellandaudio.h @@ -53,6 +53,7 @@ private:  	LLLineEditor*	mMusicURLEdit;  	LLCheckBoxCtrl* mCheckAVSoundAny;  	LLCheckBoxCtrl* mCheckAVSoundGroup; +    LLCheckBoxCtrl* mCheckObscureMOAP;  	LLSafeHandle<LLParcelSelection>&	mParcel;  }; diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 8294977f99..f342dd9ce0 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -136,13 +136,11 @@ public:  	void createPick()  	{  		// open the new pick panel on the Picks floater -		LLFloater* picks_floater = LLFloaterReg::showInstance("picks"); +        LLSD params; +        params["open_tab_name"] = "panel_picks"; +        params["show_tab_panel"] = "create_classified"; -		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks"); -		if (picks) -		{ -			picks->createNewPick(); -		} +        LLFloaterSidePanelContainer::showPanel("picks", params);  	}  	void editPick(LLPickData* pick_info) @@ -261,13 +259,11 @@ public:  	void createClassified()  	{  		// open the new classified panel on the Picks floater -		LLFloater* picks_floater = LLFloaterReg::showInstance("picks"); +        LLSD params; +        params["open_tab_name"] = "panel_picks"; +        params["show_tab_panel"] = "create_pick"; -		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks"); -		if (picks) -		{ -			picks->createNewClassified(); -		} +        LLFloaterSidePanelContainer::showPanel("picks", params);  	}  	void openClassified(LLAvatarClassifiedInfo* c_info) diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 94d20828ec..9b60d1ae2f 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -38,154 +38,11 @@  #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally  #endif -// See EXT-4301. -/** - * class LLAvalineUpdater - observe the list of voice participants in session and check - *  presence of Avaline Callers among them. - * - * LLAvalineUpdater is a LLVoiceClientParticipantObserver. It provides two kinds of validation: - *	- whether Avaline caller presence among participants; - *	- whether watched Avaline caller still exists in voice channel. - * Both validations have callbacks which will notify subscriber if any of event occur. - * - * @see findAvalineCaller() - * @see checkIfAvalineCallersExist() - */ -class LLAvalineUpdater : public LLVoiceClientParticipantObserver -{ -public: -	typedef boost::function<void(const LLUUID& speaker_id)> process_avaline_callback_t; - -	LLAvalineUpdater(process_avaline_callback_t found_cb, process_avaline_callback_t removed_cb) -		: mAvalineFoundCallback(found_cb) -		, mAvalineRemovedCallback(removed_cb) -	{ -		LLVoiceClient::getInstance()->addObserver(this); -	} -	~LLAvalineUpdater() -	{ -		if (LLVoiceClient::instanceExists()) -		{ -			LLVoiceClient::getInstance()->removeObserver(this); -		} -	} - -	/** -	 * Adds UUID of Avaline caller to watch. -	 * -	 * @see checkIfAvalineCallersExist(). -	 */ -	void watchAvalineCaller(const LLUUID& avaline_caller_id) -	{ -		mAvalineCallers.insert(avaline_caller_id); -	} - -	void onParticipantsChanged() -	{ -		uuid_set_t participant_uuids; -		LLVoiceClient::getInstance()->getParticipantList(participant_uuids); - - -		// check whether Avaline caller exists among voice participants -		// and notify Participant List -		findAvalineCaller(participant_uuids); - -		// check whether watched Avaline callers still present among voice participant -		// and remove if absents. -		checkIfAvalineCallersExist(participant_uuids); -	} - -private: -	typedef std::set<LLUUID> uuid_set_t; - -	/** -	 * Finds Avaline callers among voice participants and calls mAvalineFoundCallback. -	 * -	 * When Avatar is in group call with Avaline caller and then ends call Avaline caller stays -	 * in Group Chat floater (exists in LLSpeakerMgr). If Avatar starts call with that group again -	 * Avaline caller is added to voice channel AFTER Avatar is connected to group call. -	 * But Voice Control Panel (VCP) is filled from session LLSpeakerMgr and there is no information -	 * if a speaker is Avaline caller. -	 * -	 * In this case this speaker is created as avatar and will be recreated when it appears in -	 * Avatar's Voice session. -	 * -	 * @see LLParticipantList::onAvalineCallerFound() -	 */ -	void findAvalineCaller(const uuid_set_t& participant_uuids) -	{ -		uuid_set_t::const_iterator it = participant_uuids.begin(), it_end = participant_uuids.end(); - -		for(; it != it_end; ++it) -		{ -			const LLUUID& participant_id = *it; -			if (!LLVoiceClient::getInstance()->isParticipantAvatar(participant_id)) -			{ -				LL_DEBUGS("Avaline") << "Avaline caller found among voice participants: " << participant_id << LL_ENDL; - -				if (mAvalineFoundCallback) -				{ -					mAvalineFoundCallback(participant_id); -				} -			} -		} -	} - -	/** -	 * Finds Avaline callers which are not anymore among voice participants and calls mAvalineRemovedCallback. -	 * -	 * The problem is when Avaline caller ends a call it is removed from Voice Client session but -	 * still exists in LLSpeakerMgr. Server does not send such information. -	 * This method implements a HUCK to notify subscribers that watched Avaline callers by class -	 * are not anymore in the call. -	 * -	 * @see LLParticipantList::onAvalineCallerRemoved() -	 */ -	void checkIfAvalineCallersExist(const uuid_set_t& participant_uuids) -	{ -		uuid_set_t::iterator it = mAvalineCallers.begin(); -		uuid_set_t::const_iterator participants_it_end = participant_uuids.end(); - -		while (it != mAvalineCallers.end()) -		{ -			const LLUUID participant_id = *it; -			LL_DEBUGS("Avaline") << "Check avaline caller: " << participant_id << LL_ENDL; -			bool not_found = participant_uuids.find(participant_id) == participants_it_end; -			if (not_found) -			{ -				LL_DEBUGS("Avaline") << "Watched Avaline caller is not found among voice participants: " << participant_id << LL_ENDL; - -				// notify Participant List -				if (mAvalineRemovedCallback) -				{ -					mAvalineRemovedCallback(participant_id); -				} - -				// remove from the watch list -				mAvalineCallers.erase(it++); -			} -			else -			{ -				++it; -			} -		} -	} - -	process_avaline_callback_t mAvalineFoundCallback; -	process_avaline_callback_t mAvalineRemovedCallback; - -	uuid_set_t mAvalineCallers; -}; -  LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLFolderViewModelInterface& root_view_model) :  	LLConversationItemSession(data_source->getSessionID(), root_view_model),  	mSpeakerMgr(data_source),  	mValidateSpeakerCallback(NULL)  { - -	mAvalineUpdater = new LLAvalineUpdater(boost::bind(&LLParticipantList::onAvalineCallerFound, this, _1), -										   boost::bind(&LLParticipantList::onAvalineCallerRemoved, this, _1)); -  	mSpeakerAddListener = new SpeakerAddListener(*this);  	mSpeakerRemoveListener = new SpeakerRemoveListener(*this);  	mSpeakerClearListener = new SpeakerClearListener(*this); @@ -243,32 +100,6 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLFolderViewMode  LLParticipantList::~LLParticipantList()  { -	delete mAvalineUpdater; -} - -/* -  Seems this method is not necessary after onAvalineCallerRemoved was implemented; - -  It does nothing because list item is always created with correct class type for Avaline caller. -  For now Avaline Caller is removed from the LLSpeakerMgr List when it is removed from the Voice Client -  session. -  This happens in two cases: if Avaline Caller ends call itself or if Resident ends group call. - -  Probably Avaline caller should be removed from the LLSpeakerMgr list ONLY if it ends call itself. -  Asked in EXT-4301. -*/ -void LLParticipantList::onAvalineCallerFound(const LLUUID& participant_id) -{ -	removeParticipant(participant_id); -	// re-add avaline caller with a correct class instance. -	addAvatarIDExceptAgent(participant_id); -} - -void LLParticipantList::onAvalineCallerRemoved(const LLUUID& participant_id) -{ -	LL_DEBUGS("Avaline") << "Removing avaline caller from the list: " << participant_id << LL_ENDL; - -	mSpeakerMgr->removeAvalineSpeaker(participant_id);  }  void LLParticipantList::setValidateSpeakerCallback(validate_speaker_callback_t cb) @@ -386,7 +217,6 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id)  		std::string display_name = LLVoiceClient::getInstance()->getDisplayName(avatar_id);  		// Create a participant view model instance  		participant = new LLConversationItemParticipant(display_name.empty() ? LLTrans::getString("AvatarNameWaiting") : display_name, avatar_id, mRootViewModel); -		mAvalineUpdater->watchAvalineCaller(avatar_id);  	}  	// *TODO : Need to update the online/offline status of the participant diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 3a3ae76604..14c0a63692 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -32,7 +32,6 @@  class LLSpeakerMgr;  class LLUICtrl; -class LLAvalineUpdater;  class LLParticipantList : public LLConversationItemSession  { @@ -133,8 +132,6 @@ protected:  	};  private: -	void onAvalineCallerFound(const LLUUID& participant_id); -	void onAvalineCallerRemoved(const LLUUID& participant_id);  	/**  	 * Adjusts passed participant to work properly. @@ -156,7 +153,6 @@ private:  	LLPointer<SpeakerMuteListener>				mSpeakerMuteListener;  	validate_speaker_callback_t mValidateSpeakerCallback; -	LLAvalineUpdater* mAvalineUpdater;  };  #endif // LL_PARTICIPANTLIST_H diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp index 83b0c4f1bf..0faf6bf889 100644 --- a/indra/newview/llrecentpeople.cpp +++ b/indra/newview/llrecentpeople.cpp @@ -42,14 +42,6 @@ bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)  	if (is_not_group_id)  	{ -		// 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->llsd["date"] with new date value  		mPeople[id] = userdata;  		mChangedSignal(); @@ -90,35 +82,6 @@ const LLSD& LLRecentPeople::getData(const LLUUID& id) const  	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 18b669ff4f..1b322f2c0a 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -62,9 +62,7 @@ public:  	 * @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. +	 *				   For example session id can be added.  	 *  	 * @return false if the avatar is in the list already, true otherwise  	 */ @@ -97,13 +95,6 @@ public:  	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.  	 *   	 * Multiple callbacks can be set. @@ -122,8 +113,6 @@ public:  private: -	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/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index b0a566755f..c4784ab938 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -312,14 +312,29 @@ void LLSelectMgr::resetObjectOverrides(LLObjectSelectionHandle selected_handle)  {      struct f : public LLSelectedNodeFunctor      { +        f(bool a, LLSelectMgr* p) : mAvatarOverridesPersist(a), mManager(p) {} +        bool mAvatarOverridesPersist; +        LLSelectMgr* mManager;          virtual bool apply(LLSelectNode* node)          { +            if (mAvatarOverridesPersist) +            { +                LLViewerObject* object = node->getObject(); +                if (object && !object->getParent()) +                { +                    LLVOAvatar* avatar = object->asAvatar(); +                    if (avatar) +                    { +                        mManager->mAvatarOverridesMap.emplace(avatar->getID(), AvatarPositionOverride(node->mLastPositionLocal, node->mLastRotation, object)); +                    } +                } +            }              node->mLastPositionLocal.setVec(0, 0, 0);              node->mLastRotation = LLQuaternion();              node->mLastScale.setVec(0, 0, 0);              return true;          } -    } func; +    } func(mAllowSelectAvatar, this);      selected_handle->applyToNodes(&func);  } @@ -353,6 +368,93 @@ void LLSelectMgr::overrideObjectUpdates()  	getSelection()->applyToNodes(&func);  } +void LLSelectMgr::resetAvatarOverrides() +{ +    mAvatarOverridesMap.clear(); +} + +void LLSelectMgr::overrideAvatarUpdates() +{ +    if (mAvatarOverridesMap.size() == 0) +    { +        return; +    } + +    if (!mAllowSelectAvatar || !gFloaterTools) +    { +        resetAvatarOverrides(); +        return; +    } + +    if (!gFloaterTools->getVisible() && getSelection()->isEmpty()) +    { +        // when user switches selection, floater is invisible and selection is empty +        LLToolset *toolset = LLToolMgr::getInstance()->getCurrentToolset(); +        if (toolset->isShowFloaterTools() +            && toolset->isToolSelected(0)) // Pie tool +        { +            resetAvatarOverrides(); +            return; +        } +    } + +    // remove selected avatars from this list, +    // but set object overrides to make sure avatar won't snap back  +    struct f : public LLSelectedNodeFunctor +    { +        f(LLSelectMgr* p) : mManager(p) {} +        LLSelectMgr* mManager; +        virtual bool apply(LLSelectNode* selectNode) +        { +            LLViewerObject* object = selectNode->getObject(); +            if (object && !object->getParent()) +            { +                LLVOAvatar* avatar = object->asAvatar(); +                if (avatar) +                { +                    uuid_av_override_map_t::iterator iter = mManager->mAvatarOverridesMap.find(avatar->getID()); +                    if (iter != mManager->mAvatarOverridesMap.end()) +                    { +                        if (selectNode->mLastPositionLocal.isExactlyZero()) +                        { +                            selectNode->mLastPositionLocal = iter->second.mLastPositionLocal; +                        } +                        if (selectNode->mLastRotation == LLQuaternion()) +                        { +                            selectNode->mLastRotation = iter->second.mLastRotation; +                        } +                        mManager->mAvatarOverridesMap.erase(iter); +                    } +                } +            } +            return true; +        } +    } func(this); +    getSelection()->applyToNodes(&func); + +    // Override avatar positions +    uuid_av_override_map_t::iterator it = mAvatarOverridesMap.begin(); +    while (it != mAvatarOverridesMap.end()) +    { +        if (it->second.mObject->isDead()) +        { +            it = mAvatarOverridesMap.erase(it); +        } +        else +        { +            if (!it->second.mLastPositionLocal.isExactlyZero()) +            { +                it->second.mObject->setPosition(it->second.mLastPositionLocal); +            } +            if (it->second.mLastRotation != LLQuaternion()) +            { +                it->second.mObject->setRotation(it->second.mLastRotation); +            } +            it++; +        } +    } +} +  //-----------------------------------------------------------------------------  // Select just the object, not any other group members.  //----------------------------------------------------------------------------- @@ -888,7 +990,7 @@ void LLSelectMgr::addAsFamily(std::vector<LLViewerObject*>& objects, BOOL add_to  		// Can't select yourself  		if (objectp->mID == gAgentID -			&& !LLSelectMgr::getInstance()->mAllowSelectAvatar) +			&& !mAllowSelectAvatar)  		{  			continue;  		} @@ -6283,6 +6385,24 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)  LLSelectNode::~LLSelectNode()  { +    LLSelectMgr *manager = LLSelectMgr::getInstance(); +    if (manager->mAllowSelectAvatar +        && (!mLastPositionLocal.isExactlyZero() +            || mLastRotation != LLQuaternion())) +    { +        LLViewerObject* object = getObject(); //isDead() check +        if (object && !object->getParent()) +        { +            LLVOAvatar* avatar = object->asAvatar(); +            if (avatar) +            { +                // Avatar was moved and needs to stay that way +                manager->mAvatarOverridesMap.emplace(avatar->getID(), LLSelectMgr::AvatarPositionOverride(mLastPositionLocal, mLastRotation, object)); +            } +        } +    } + +  	delete mPermissions;  	mPermissions = NULL;  } @@ -6790,6 +6910,10 @@ void LLSelectMgr::updateSelectionCenter()  	const F32 MOVE_SELECTION_THRESHOLD = 1.f;		//  Movement threshold in meters for updating selection  													//  center (tractor beam) +    // override any avatar updates received +    // Works only if avatar was repositioned +    // and edit floater is visible +    overrideAvatarUpdates();  	//override any object updates received  	//for selected objects  	overrideObjectUpdates(); diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 2b00fa1595..e479d5b0e0 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -467,6 +467,30 @@ public:  	void resetObjectOverrides(LLObjectSelectionHandle selected_handle);  	void overrideObjectUpdates(); +    void resetAvatarOverrides(); +    void overrideAvatarUpdates(); + +    struct AvatarPositionOverride +    { +        AvatarPositionOverride(); +        AvatarPositionOverride(LLVector3 &vec, LLQuaternion &quat, LLViewerObject *obj) : +            mLastPositionLocal(vec), +            mLastRotation(quat), +            mObject(obj) +        { +        } +        LLVector3 mLastPositionLocal; +        LLQuaternion mLastRotation; +        LLPointer<LLViewerObject> mObject; +    }; + +    // Avatar overrides should persist even after selection +    // was removed as long as edit floater is up +    typedef std::map<LLUUID, AvatarPositionOverride> uuid_av_override_map_t; +    uuid_av_override_map_t mAvatarOverridesMap; +public: + +  	// Returns the previous value of mForceSelection  	BOOL setForceSelection(BOOL force); diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp index abb936c3e5..ea671a130e 100644 --- a/indra/newview/llspeakers.cpp +++ b/indra/newview/llspeakers.cpp @@ -534,7 +534,7 @@ void LLSpeakerMgr::updateSpeakerList()  			}  			else if (mSpeakers.size() == 0)  			{ -				// For all other session type (ad-hoc, P2P, avaline), we use the initial participants targets list +				// For all other session type (ad-hoc, P2P), we use the initial participants targets list  				for (uuid_vec_t::iterator it = session->mInitialTargetIDs.begin();it!=session->mInitialTargetIDs.end();++it)  				{  					// Add buddies if they are on line, add any other avatar. diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h index d1dbf72fe9..ed795b5155 100644 --- a/indra/newview/llspeakers.h +++ b/indra/newview/llspeakers.h @@ -245,14 +245,6 @@ public:  	bool isSpeakerToBeRemoved(const LLUUID& speaker_id);  	/** -	 * Removes avaline speaker. -	 * -	 * This is a HACK due to server does not send information that Avaline caller ends call. -	 * It can be removed when server is updated. See EXT-4301 for details -	 */ -	bool removeAvalineSpeaker(const LLUUID& speaker_id) { return removeSpeaker(speaker_id); } - -	/**  	 * Initializes mVoiceModerated depend on LLSpeaker::mModeratorMutedVoice of agent's participant.  	 *  	 * Is used only to implement workaround to initialize mVoiceModerated on first join to group chat. See EXT-6937 diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 54f3e6305c..9e4ba1debf 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -251,6 +251,7 @@ static bool mLoginStatePastUI = false;  static bool mBenefitsSuccessfullyInit = false;  const F32 STATE_AGENT_WAIT_TIMEOUT = 240; //seconds +const S32 MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN = 3; // Give region 3 chances  boost::scoped_ptr<LLEventPump> LLStartUp::sStateWatcher(new LLEventStream("StartupState"));  boost::scoped_ptr<LLStartupListener> LLStartUp::sListener(new LLStartupListener()); @@ -1350,10 +1351,21 @@ bool idle_startup()  		{  			LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );  		} +        else if (regionp->capabilitiesError()) +        { +            // Try to connect despite capabilities' error state +            LLStartUp::setStartupState(STATE_SEED_CAP_GRANTED); +        }  		else  		{  			U32 num_retries = regionp->getNumSeedCapRetries(); -			if (num_retries > 0) +            if (num_retries > MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN) +            { +                // Region will keep trying to get capabilities, +                // but for now continue as if caps were granted +                LLStartUp::setStartupState(STATE_SEED_CAP_GRANTED); +            } +			else if (num_retries > 0)  			{  				LLStringUtil::format_map_t args;  				args["[NUMBER]"] = llformat("%d", num_retries + 1); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 109dc93261..2bb64327da 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -752,7 +752,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  				glh::matrix4f proj = get_current_projection();  				glh::matrix4f mod = get_current_modelview();  				glViewport(0,0,512,512); -				LLVOAvatar::updateFreezeCounter() ;  				LLVOAvatar::updateImpostors(); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 31e80eb865..eba079a8d8 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2442,11 +2442,19 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  		needs_refresh = needs_refresh || child->mUserSelected;  	} +    static LLCachedControl<bool> allow_select_avatar(gSavedSettings, "AllowSelectAvatar", FALSE);  	if (needs_refresh)  	{  		LLSelectMgr::getInstance()->updateSelectionCenter();  		dialog_refresh_all(); -	}  +	} +    else if (allow_select_avatar && asAvatar()) +    { +        // Override any avatar position updates received +        // Works only if avatar was repositioned using build +        // tools and build floater is visible +        LLSelectMgr::getInstance()->overrideAvatarUpdates(); +    }  	// Mark update time as approx. now, with the ping delay. diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 56370df751..ef7f769698 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1553,6 +1553,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use      BOOL    region_allow_environment_override = true;      S32     parcel_environment_version = 0;      BOOL	agent_parcel_update = false; // updating previous(existing) agent parcel +    U32     extended_flags = 0; //obscure MOAP      S32		other_clean_time = 0; @@ -1642,6 +1643,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use          msg->getBOOLFast(_PREHASH_RegionAllowAccessBlock, _PREHASH_RegionAllowAccessOverride, region_allow_access_override);      } +    if (msg->getNumberOfBlocks(_PREHASH_ParcelExtendedFlags)) +    { +        msg->getU32Fast(_PREHASH_ParcelExtendedFlags, _PREHASH_Flags, extended_flags); +     } +      if (msg->getNumberOfBlocks(_PREHASH_ParcelEnvironmentBlock))      {          msg->getS32Fast(_PREHASH_ParcelEnvironmentBlock, _PREHASH_ParcelEnvironmentVersion, parcel_environment_version); @@ -1698,6 +1704,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use          parcel->setParcelEnvironmentVersion(cur_parcel_environment_version);          parcel->setRegionAllowEnvironmentOverride(region_allow_environment_override); +        parcel->setObscureMOAP((bool)extended_flags); +  		parcel->unpackMessage(msg);  		if (parcel == parcel_mgr.mAgentParcel) diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 0f409701d1..3c2ebc9fef 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -95,8 +95,6 @@  // The server only keeps our pending agent info for 60 seconds.  // We want to allow for seed cap retry, but its not useful after that 60 seconds. -// Give it 3 chances, each at 18 seconds to give ourselves a few seconds to connect anyways if we give up. -const S32 MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN = 3;  // Even though we gave up on login, keep trying for caps after we are logged in:  const S32 MAX_CAP_REQUEST_ATTEMPTS = 30;  const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000; @@ -178,7 +176,6 @@ public:          mCompositionp(NULL),          mEventPoll(NULL),          mSeedCapMaxAttempts(MAX_CAP_REQUEST_ATTEMPTS), -        mSeedCapMaxAttemptsBeforeLogin(MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN),          mSeedCapAttempts(0),          mHttpResponderID(0),          mLastCameraUpdate(0), @@ -231,7 +228,6 @@ public:  	LLEventPoll* mEventPoll;  	S32 mSeedCapMaxAttempts; -	S32 mSeedCapMaxAttemptsBeforeLogin;  	S32 mSeedCapAttempts;  	S32 mHttpResponderID; @@ -279,23 +275,17 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)          if (url.empty())          {              LL_WARNS("AppInit", "Capabilities") << "Failed to get seed capabilities, and can not determine url!" << LL_ENDL; +            regionp->setCapabilitiesError();              return; // this error condition is not recoverable.          }          // record that we just entered a new region          newRegionEntry(*regionp); -        // After a few attempts, continue login.  But keep trying to get the caps: -        if (mSeedCapAttempts >= mSeedCapMaxAttemptsBeforeLogin && -            STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) -        { -            LLStartUp::setStartupState(STATE_SEED_CAP_GRANTED); -        } -          if (mSeedCapAttempts > mSeedCapMaxAttempts)          { -            // *TODO: Give a user pop-up about this error?              LL_WARNS("AppInit", "Capabilities") << "Failed to get seed capabilities from '" << url << "' after " << mSeedCapAttempts << " attempts.  Giving up!" << LL_ENDL; +            regionp->setCapabilitiesError();              return;  // this error condition is not recoverable.          } @@ -377,11 +367,6 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)  														 << " region name " << regionp->getName() << LL_ENDL;          regionp->setCapabilitiesReceived(true); -        if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) -        { -            LLStartUp::setStartupState(STATE_SEED_CAP_GRANTED); -        } -          break;      }       while (true); @@ -419,6 +404,11 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCompleteCoro(U64 regionHandle)          if (url.empty())          {              LL_WARNS("AppInit", "Capabilities") << "Failed to get seed capabilities, and can not determine url!" << LL_ENDL; +            if (regionp->getCapability("Seed").empty()) +            { +                // initial attempt failed to get this cap as well +                regionp->setCapabilitiesError(); +            }              break; // this error condition is not recoverable.          } @@ -598,7 +588,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,  	mCacheLoaded(FALSE),  	mCacheDirty(FALSE),  	mReleaseNotesRequested(FALSE), -	mCapabilitiesReceived(false), +	mCapabilitiesState(CAPABILITIES_STATE_INIT),  	mSimulatorFeaturesReceived(false),  	mBitsReceived(0.f),  	mPacketsReceived(0.f), @@ -3195,12 +3185,17 @@ bool LLViewerRegion::isCapabilityAvailable(const std::string& name) const  bool LLViewerRegion::capabilitiesReceived() const  { -	return mCapabilitiesReceived; +	return mCapabilitiesState == CAPABILITIES_STATE_RECEIVED; +} + +bool LLViewerRegion::capabilitiesError() const +{ +    return mCapabilitiesState == CAPABILITIES_STATE_ERROR;  }  void LLViewerRegion::setCapabilitiesReceived(bool received)  { -	mCapabilitiesReceived = received; +	mCapabilitiesState = received ? CAPABILITIES_STATE_RECEIVED : CAPABILITIES_STATE_INIT;  	// Tell interested parties that we've received capabilities,  	// so that they can safely use getCapability(). @@ -3215,6 +3210,11 @@ void LLViewerRegion::setCapabilitiesReceived(bool received)  	}  } +void LLViewerRegion::setCapabilitiesError() +{ +    mCapabilitiesState = CAPABILITIES_STATE_ERROR; +} +  boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb)  {  	return mCapabilitiesReceivedSignal.connect(cb); diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index fcbf56c81f..5ea4caa685 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -268,7 +268,9 @@ public:  	// has region received its final (not seed) capability list?  	bool capabilitiesReceived() const; +    bool capabilitiesError() const;  	void setCapabilitiesReceived(bool received); +	void setCapabilitiesError();  	boost::signals2::connection setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb);  	static bool isSpecialCapabilityName(const std::string &name); @@ -527,12 +529,20 @@ private:  	BOOL									mCacheLoaded;  	BOOL                                    mCacheDirty;  	BOOL	mAlive;					// can become false if circuit disconnects -	BOOL	mCapabilitiesReceived;  	BOOL	mSimulatorFeaturesReceived;  	BOOL    mReleaseNotesRequested;  	BOOL    mDead;  //if true, this region is in the process of deleting.  	BOOL    mPaused; //pause processing the objects in the region +    typedef enum +    { +        CAPABILITIES_STATE_INIT = 0, +        CAPABILITIES_STATE_ERROR, +        CAPABILITIES_STATE_RECEIVED +    } eCababilitiesState; + +    eCababilitiesState	mCapabilitiesState; +  	typedef std::map<U32, std::vector<U32> > orphan_list_t;  	orphan_list_t mOrphanMap; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 5d994058c2..8bb5d97029 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -575,7 +575,6 @@ private:  //-----------------------------------------------------------------------------  // Static Data  //----------------------------------------------------------------------------- -S32 LLVOAvatar::sFreezeCounter = 0;  U32 LLVOAvatar::sMaxNonImpostors = 12; // Set from RenderAvatarMaxNonImpostors  bool LLVOAvatar::sLimitNonImpostors = false; // True unless RenderAvatarMaxNonImpostors is 0 (unlimited)  F32 LLVOAvatar::sRenderDistance = 256.f; @@ -4041,8 +4040,7 @@ void LLVOAvatar::computeUpdatePeriod()          && (!isSelf() || visually_muted)          && !isUIAvatar()          && (sLimitNonImpostors || visually_muted) -        && !mNeedsAnimUpdate  -        && !sFreezeCounter) +        && !mNeedsAnimUpdate)  	{  		const LLVector4a* ext = mDrawable->getSpatialExtents();  		LLVector4a size; @@ -10104,23 +10102,6 @@ LLHost LLVOAvatar::getObjectHost() const  	}  } -//static -void LLVOAvatar::updateFreezeCounter(S32 counter) -{ -	if(counter) -	{ -		sFreezeCounter = counter; -	} -	else if(sFreezeCounter > 0) -	{ -		sFreezeCounter--; -	} -	else -	{ -		sFreezeCounter = 0; -	} -} -  BOOL LLVOAvatar::updateLOD()  {      if (mDrawable.isNull()) diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 74ef589ca4..152e3b5610 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -616,14 +616,6 @@ private:  	BOOL		mCulled;  	//-------------------------------------------------------------------- -	// Freeze counter -	//-------------------------------------------------------------------- -public: -	static void updateFreezeCounter(S32 counter = 0); -private: -	static S32  sFreezeCounter; - -	//--------------------------------------------------------------------  	// Constants  	//--------------------------------------------------------------------  public: diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index f971554c9d..b0eb8d962c 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -770,8 +770,6 @@ LLVoiceChannelP2P::LLVoiceChannelP2P(const LLUUID& session_id, const std::string  		mReceivedCall(FALSE)  {  	// make sure URI reflects encoded version of other user's agent id -	// *NOTE: in case of Avaline call generated SIP URL will be incorrect. -	// But it will be overridden in LLVoiceChannelP2P::setSessionHandle() called when agent accepts call  	setURI(LLVoiceClient::getInstance()->sipURIFromID(other_user_id));  } @@ -911,8 +909,6 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s  	else  	{  		LL_WARNS("Voice") << "incoming SIP URL is not provided. Channel may not work properly." << LL_ENDL; -		// In the case of an incoming AvaLine call, the generated URI will be different from the -		// original one. This is because the P2P URI is based on avatar UUID but Avaline is not.  		// See LLVoiceClient::sessionAddedEvent()  		setURI(LLVoiceClient::getInstance()->sipURIFromID(mOtherUserID));  	} @@ -947,22 +943,5 @@ void LLVoiceChannelP2P::setState(EState 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); -	} +	LLRecentPeople::instance().add(mOtherUserID);  } diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index 32c8ce66a0..5c56a1d34f 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -40,6 +40,7 @@  #include "httpoptions.h"  #include "httpheaders.h"  #include "bufferarray.h" +#include "llversioninfo.h"  #include "llviewercontrol.h"  // Have to include these last to avoid queue redefinition! @@ -378,6 +379,15 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const  	httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML); +    std::string user_agent = llformat("%s %d.%d.%d (%d)", +        LLVersionInfo::instance().getChannel().c_str(), +        LLVersionInfo::instance().getMajor(), +        LLVersionInfo::instance().getMinor(), +        LLVersionInfo::instance().getPatch(), +        LLVersionInfo::instance().getBuild()); + +    httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); +  	///* Setting the DNS cache timeout to -1 disables it completely.  	//This might help with bug #503 */  	//httpOpts->setDNSCacheTimeout(-1); diff --git a/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg b/indra/newview/skins/default/textures/icons/avaline_default_icon.jpgBinary files differ deleted file mode 100644 index 3bb7f7183c..0000000000 --- a/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg +++ /dev/null diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a36b859b6c..aeb9fe416b 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -67,8 +67,6 @@ with the same filename but different name    <texture name="Audio_Off" file_name="icons/Audio_Off.png" preload="false" />    <texture name="Audio_Press" file_name="icons/Audio_Press.png" preload="false" /> -  <texture name="Avaline_Icon" file_name="icons/avaline_default_icon.jpg" preload="true" /> -    <texture name="BackArrow_Off" file_name="icons/BackArrow_Off.png" preload="false" />    <texture name="BackButton_Off" file_name="icons/back_arrow_off.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" /> diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 814305c1bc..c381161eb6 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -443,9 +443,6 @@ Prøv venligst om lidt igen.  	<string name="GroupNameNone">  		(ingen)  	</string> -	<string name="AvalineCaller"> -		Avaline opkalder [ORDER] -	</string>  	<string name="AssetErrorNone">  		Ingen fejl  	</string> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index f021e03dc7..822c34ac89 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -673,9 +673,6 @@ nächsten Eigentümer angehängt werden.  	<string name="GroupNameNone">  		(keiner)  	</string> -	<string name="AvalineCaller"> -		Avaline-Anfrufer [ORDER] -	</string>  	<string name="AssetErrorNone">  		Kein Fehler  	</string> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index b2d9e53039..2b873bb70a 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -1892,7 +1892,29 @@ Only large parcels can be listed in search.               left="110"               name="parcel_enable_voice_channel_local"               width="300" /> -        </panel> +            <text +             type="string" +             length="1" +             follows="left|top" +             height="16" +             layout="topleft" +             left="10" +             mouse_opaque="false" +             name="media" +             top_pad="10" +             width="100"> +                Media: +            </text> +            <check_box +             height="16" +             label="Obscure MOAP" +             layout="topleft" +             left="110" +             left_pad="0" +             name="obscure_moap" +             tool_tip="Media on a prim located outside the parcel should not play automatically for an agent within this parcel and vice versa." +             width="300" /> +            </panel>          <panel           border="true"           follows="all" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f26ee06e6b..b589d8972b 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -340,8 +340,6 @@ can be attached to notecards.  	<!-- Group name: text shown for LLUUID::null -->  	<string name="GroupNameNone">(none)</string> -	<string name="AvalineCaller">Avaline Caller [ORDER]</string> -  	<!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. -->  	<string name="AssetErrorNone">No error</string>  	<string name="AssetErrorRequestFailed">Asset request: failed</string> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index ebb4ceaa7e..7094f4510d 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -662,9 +662,6 @@ pueden adjuntarse a las notas.  	<string name="GroupNameNone">  		(ninguno)  	</string> -	<string name="AvalineCaller"> -		Avaline: [ORDER] -	</string>  	<string name="AssetErrorNone">  		No hay ningún error  	</string> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 9fde703d6c..b961469cc5 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -674,9 +674,6 @@ peuvent être joints aux notes.  	<string name="GroupNameNone">  		(aucun)  	</string> -	<string name="AvalineCaller"> -		Appelant Avaline [ORDER] -	</string>  	<string name="AssetErrorNone">  		Aucune erreur  	</string> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 3049828f46..cba917421d 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -667,9 +667,6 @@ possono essere allegati ai biglietti.  	<string name="GroupNameNone">  		(nessuno)  	</string> -	<string name="AvalineCaller"> -		Chiamante Avaline [ORDER] -	</string>  	<string name="AssetErrorNone">  		Nessun errore  	</string> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index dcd6e65d34..acfc239f98 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -673,9 +673,6 @@ support@secondlife.com にお問い合わせください。  	<string name="GroupNameNone">  		(なし)  	</string> -	<string name="AvalineCaller"> -		Avaline コール [ORDER] -	</string>  	<string name="AssetErrorNone">  		エラーなし  	</string> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index cf033df3c9..2d8dc8ac08 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -596,9 +596,6 @@ Spróbuj zalogować się ponownie za minutę.  	<string name="GroupNameNone">  		(brak danych)  	</string> -	<string name="AvalineCaller"> -		Avaline [ORDER] -	</string>  	<string name="AssetErrorNone">  		Brak błędu  	</string> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index c72a41fd3a..5fded9228d 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -627,9 +627,6 @@ ser anexado às anotações.  	<string name="GroupNameNone">  		(nenhum)  	</string> -	<string name="AvalineCaller"> -		Interlocutor Avaline [ORDER] -	</string>  	<string name="AssetErrorNone">  		Nenhum erro  	</string> diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 43a87b2b18..85b378cad2 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -671,9 +671,6 @@ support@secondlife.com.  	<string name="GroupNameNone">  		(нет)  	</string> -	<string name="AvalineCaller"> -		[ORDER] абонента Avaline -	</string>  	<string name="AssetErrorNone">  		Ошибок нет  	</string> diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index 982de76a5b..c3a1e7fd05 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -671,9 +671,6 @@ kartlarına eklenebilir.  	<string name="GroupNameNone">  		(hiçbiri)  	</string> -	<string name="AvalineCaller"> -		Avaline Arayanı [ORDER] -	</string>  	<string name="AssetErrorNone">  		Hata yok  	</string> diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index 3221cde3b7..da0db7db9a 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -667,9 +667,6 @@ http://secondlife.com/viewer-access-faq  	<string name="GroupNameNone">  		(無)  	</string> -	<string name="AvalineCaller"> -		Avaline 通話者 [ORDER] -	</string>  	<string name="AssetErrorNone">  		無錯誤  	</string> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index a814bd2849..4b4958e1c2 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -147,7 +147,6 @@ class ViewerManifest(LLManifest):              with self.prefix(src_dst="skins"):                      # include the entire textures directory recursively                      with self.prefix(src_dst="*/textures"): -                            self.path("*/*.jpg")                              self.path("*/*.png")                              self.path("*.tga")                              self.path("*.j2c") | 
