--HG--
branch : product-engine
meow-7.2.2
Mike Antipov 2010-05-27 17:37:42 +03:00
commit 6fc170b12f
7 changed files with 177 additions and 68 deletions

View File

@ -1597,6 +1597,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>ChatBarCustomWidth</key>
<map>
<key>Comment</key>
<string>Stores customized width of chat bar.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>CreateToolCopyCenters</key>
<map>
<key>Comment</key>
@ -8063,6 +8074,28 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowBuildButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Build button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowCameraButton</key>
<map>
<key>Comment</key>
<string>Show/Hide View button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowConsoleWindow</key>
<map>
<key>Comment</key>
@ -8140,6 +8173,17 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowGestureButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Gesture button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowHoverTips</key>
<map>
<key>Comment</key>
@ -8162,6 +8206,28 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowMiniMapButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Mini-Map button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowMoveButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Move button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowScriptErrors</key>
<map>
<key>Comment</key>
@ -8184,6 +8250,39 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowSearchButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Search button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowSidebarButton</key>
<map>
<key>Comment</key>
<string>Shows/hides Sidebar button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>ShowSnapshotButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Snapshot button button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowObjectRenderingCost</key>
<map>
<key>Comment</key>
@ -8217,6 +8316,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>ShowWorldMapButton</key>
<map>
<key>Comment</key>
<string>Shows/Hides Map button in the bottom tray.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SidebarCameraMovement</key>
<map>
<key>Comment</key>

View File

@ -1220,18 +1220,6 @@ void LLBottomTray::initButtonsVisibility()
void LLBottomTray::setButtonsControlsAndListeners()
{
gSavedSettings.declareBOOL("ShowGestureButton", TRUE, "Shows/Hides Gesture button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowMoveButton", TRUE, "Shows/Hides Move button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowSnapshotButton", TRUE, "Shows/Hides Snapshot button button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowCameraButton", TRUE, "Show/Hide View button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowSidebarButton", TRUE, "Shows/hides Sidebar button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowBuildButton", TRUE, "Shows/Hides Build button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowSearchButton", TRUE, "Shows/Hides Search button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowWorldMapButton", TRUE, "Shows/Hides Map button in the bottom tray. (Declared in code)");
gSavedSettings.declareBOOL("ShowMiniMapButton", TRUE, "Shows/Hides Mini-Map button in the bottom tray. (Declared in code)");
gSavedSettings.declareS32("ChatBarCustomWidth", 0, "Stores customized width of chat bar. (Declared in code)");
gSavedSettings.getControl("ShowGestureButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_GESTURES, _2));
gSavedSettings.getControl("ShowMoveButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_MOVEMENT, _2));
gSavedSettings.getControl("ShowCameraButton")->getSignal()->connect(boost::bind(&LLBottomTray::toggleShowButton, RS_BUTTON_CAMERA, _2));

View File

@ -793,7 +793,7 @@ void LLParticipantList::LLParticipantListMenu::moderateVoice(const LLSD& userdat
else
{
bool unmute_all = userdata.asString() == "unmute_all";
moderateVoiceOtherParticipants(LLUUID::null, unmute_all);
moderateVoiceAllParticipants(unmute_all);
}
}
@ -806,7 +806,7 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceParticipant(const LL
}
}
void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute)
void LLParticipantList::LLParticipantListMenu::moderateVoiceAllParticipants(bool unmute)
{
LLIMSpeakerMgr* mgr = dynamic_cast<LLIMSpeakerMgr*>(mParent.mSpeakerMgr);
if (mgr)
@ -815,12 +815,11 @@ void LLParticipantList::LLParticipantListMenu::moderateVoiceOtherParticipants(co
{
LLSD payload;
payload["session_id"] = mgr->getSessionID();
payload["excluded_avatar_id"] = excluded_avatar_id;
LLNotificationsUtil::add("ConfirmMuteAll", LLSD(), payload, confirmMuteAllCallback);
return;
}
mgr->moderateVoiceOtherParticipants(excluded_avatar_id, unmute);
mgr->moderateVoiceAllParticipants(unmute);
}
}
@ -835,13 +834,12 @@ void LLParticipantList::LLParticipantListMenu::confirmMuteAllCallback(const LLSD
const LLSD& payload = notification["payload"];
const LLUUID& session_id = payload["session_id"];
const LLUUID& excluded_avatar_id = payload["excluded_avatar_id"];
LLIMSpeakerMgr * speaker_manager = dynamic_cast<LLIMSpeakerMgr*> (
LLIMModel::getInstance()->getSpeakerManager(session_id));
if (speaker_manager)
{
speaker_manager->moderateVoiceOtherParticipants(excluded_avatar_id, false);
speaker_manager->moderateVoiceAllParticipants(false);
}
return;

View File

@ -187,7 +187,7 @@ class LLParticipantList
* @param userdata can be "selected" or "others".
*
* @see moderateVoiceParticipant()
* @see moderateVoiceOtherParticipants()
* @see moderateVoiceAllParticipants()
*/
void moderateVoice(const LLSD& userdata);
@ -200,22 +200,20 @@ class LLParticipantList
* @param[in] avatar_id UUID of avatar to be processed
* @param[in] unmute if true - specified avatar will be muted, otherwise - unmuted.
*
* @see moderateVoiceOtherParticipants()
* @see moderateVoiceAllParticipants()
*/
void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);
/**
* Mutes/Unmutes all avatars except specified for current group voice chat.
* Mutes/Unmutes all avatars for current group voice chat.
*
* It only marks avatars as muted for session and does not use local Agent's Block list.
* It based call moderateVoiceParticipant() for each avatar should be muted/unmuted.
*
* @param[in] excluded_avatar_id UUID of avatar NOT to be processed
* @param[in] unmute if true - avatars will be muted, otherwise - unmuted.
*
* @see moderateVoiceParticipant()
*/
void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute);
void moderateVoiceAllParticipants(bool unmute);
static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
};

View File

@ -251,6 +251,8 @@ bool LLSpeakersDelayActionsStorage::onTimerActionCallback(const LLUUID& speaker_
LLSpeakerMgr::LLSpeakerMgr(LLVoiceChannel* channelp) :
mVoiceChannel(channelp)
, mVoiceModerated(false)
, mModerateModeHandledFirstTime(false)
{
static LLUICachedControl<F32> remove_delay ("SpeakerParticipantRemoveDelay", 10.0);
@ -297,6 +299,33 @@ LLPointer<LLSpeaker> LLSpeakerMgr::setSpeaker(const LLUUID& id, const std::strin
return speakerp;
}
// *TODO: Once way to request the current voice channel moderation mode is implemented
// this method with related code should be removed.
/*
Initializes "moderate_mode" of voice session on first join.
This is WORKAROUND because a way to request the current voice channel moderation mode exists
but is not implemented in viewer yet. See EXT-6937.
*/
void LLSpeakerMgr::initVoiceModerateMode()
{
if (!mModerateModeHandledFirstTime && (mVoiceChannel && mVoiceChannel->isActive()))
{
LLPointer<LLSpeaker> speakerp;
if (mSpeakers.find(gAgentID) != mSpeakers.end())
{
speakerp = mSpeakers[gAgentID];
}
if (speakerp.notNull())
{
mVoiceModerated = speakerp->mModeratorMutedVoice;
mModerateModeHandledFirstTime = true;
}
}
}
void LLSpeakerMgr::update(BOOL resort_ok)
{
if (!LLVoiceClient::getInstance())
@ -529,7 +558,6 @@ BOOL LLSpeakerMgr::isVoiceActive()
// LLIMSpeakerMgr
//
LLIMSpeakerMgr::LLIMSpeakerMgr(LLVoiceChannel* channel) : LLSpeakerMgr(channel)
, mVoiceModerated(false)
{
}
@ -762,31 +790,9 @@ void LLIMSpeakerMgr::moderateVoiceParticipant(const LLUUID& avatar_id, bool unmu
new ModerationResponder(getSessionID()));
}
void LLIMSpeakerMgr::moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute_everyone_else)
void LLIMSpeakerMgr::moderateVoiceAllParticipants( bool unmute_everyone )
{
// *TODO: mantipov: add more intellectual processing of several following requests if it is needed.
/*
Such situation should be tested:
"Moderator sends the same second request before first response is come"
Moderator sends "mute everyone else" for A and then for B
two requests to disallow voice chat are sent
UUID of B is stored.
Then first response (to disallow voice chat) is come
request to allow voice for stored avatar (B)
Then second response (to disallow voice chat) is come
have nothing to do, the latest selected speaker is already enabled
What can happen?
If request to allow voice for stored avatar (B) is processed on server BEFORE
second request to disallow voice chat all speakers will be disabled on voice.
But I'm not sure such situation is possible.
See EXT-3431.
*/
mReverseVoiceModeratedAvatarID = excluded_avatar_id;
if (mVoiceModerated == !unmute_everyone_else)
if (mVoiceModerated == !unmute_everyone)
{
// session already in requested state. Just force participants which do not match it.
forceVoiceModeratedMode(mVoiceModerated);
@ -794,7 +800,7 @@ void LLIMSpeakerMgr::moderateVoiceOtherParticipants(const LLUUID& excluded_avata
else
{
// otherwise set moderated mode for a whole session.
moderateVoiceSession(getSessionID(), !unmute_everyone_else);
moderateVoiceSession(getSessionID(), !unmute_everyone);
}
}
@ -804,13 +810,6 @@ void LLIMSpeakerMgr::processSessionUpdate(const LLSD& session_update)
session_update["moderated_mode"].has("voice"))
{
mVoiceModerated = session_update["moderated_mode"]["voice"];
if (mReverseVoiceModeratedAvatarID.notNull())
{
moderateVoiceParticipant(mReverseVoiceModeratedAvatarID, mVoiceModerated);
mReverseVoiceModeratedAvatarID = LLUUID::null;
}
}
}

View File

@ -242,6 +242,13 @@ public:
*/
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
*/
void initVoiceModerateMode();
protected:
virtual void updateSpeakerList();
void setSpeakerNotInChannel(LLSpeaker* speackerp);
@ -258,6 +265,14 @@ protected:
* time out speakers when they are not part of current session
*/
LLSpeakersDelayActionsStorage* mSpeakerDelayRemover;
// *TODO: should be moved back into LLIMSpeakerMgr when a way to request the current voice channel
// moderation mode is implemented: See EXT-6937
bool mVoiceModerated;
// *TODO: To be removed when a way to request the current voice channel
// moderation mode is implemented: See EXT-6937
bool mModerateModeHandledFirstTime;
};
class LLIMSpeakerMgr : public LLSpeakerMgr
@ -279,22 +294,21 @@ public:
* @param[in] avatar_id UUID of avatar to be processed
* @param[in] unmute if false - specified avatar will be muted, otherwise - unmuted.
*
* @see moderateVoiceOtherParticipants()
* @see moderateVoiceAllParticipants()
*/
void moderateVoiceParticipant(const LLUUID& avatar_id, bool unmute);
/**
* Mutes/Unmutes all avatars except specified for current group voice chat.
* Mutes/Unmutes all avatars for current group voice chat.
*
* It only marks avatars as muted for session and does not use local Agent's Block list.
* It based call moderateVoiceParticipant() for each avatar should be muted/unmuted.
* It calls forceVoiceModeratedMode() in case of session is already in requested state.
*
* @param[in] excluded_avatar_id UUID of avatar NOT to be processed
* @param[in] unmute_everyone_else if false - avatars will be muted, otherwise - unmuted.
* @param[in] unmute_everyone if false - avatars will be muted, otherwise - unmuted.
*
* @see moderateVoiceParticipant()
*/
void moderateVoiceOtherParticipants(const LLUUID& excluded_avatar_id, bool unmute_everyone_else);
void moderateVoiceAllParticipants(bool unmute_everyone);
void processSessionUpdate(const LLSD& session_update);
@ -308,10 +322,6 @@ protected:
*/
void forceVoiceModeratedMode(bool should_be_muted);
private:
LLUUID mReverseVoiceModeratedAvatarID;
bool mVoiceModerated;
};
class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeakerMgr>

View File

@ -3698,9 +3698,15 @@ void LLVivoxVoiceClient::participantUpdatedEvent(
if (speaker_manager)
{
speaker_manager->update(true);
// also initialize voice moderate_mode depend on Agent's participant. See EXT-6937.
// *TODO: remove once a way to request the current voice channel moderation mode is implemented.
if (gAgentID == participant->mAvatarID)
{
speaker_manager->initVoiceModerateMode();
}
}
}
}
else
{