STORM-680 : pull into viewer-development
commit
12f4e55fc0
|
|
@ -240,6 +240,9 @@ void LLAvatarList::addAvalineItem(const LLUUID& item_id, const LLUUID& session_i
|
|||
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);
|
||||
|
|
@ -286,9 +289,18 @@ void LLAvatarList::refresh()
|
|||
{
|
||||
// *NOTE: If you change the UI to show a different string,
|
||||
// be sure to change the filter code below.
|
||||
addNewItem(buddy_id,
|
||||
av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
|
||||
LLAvatarTracker::instance().isBuddyOnline(buddy_id));
|
||||
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
|
||||
{
|
||||
addNewItem(buddy_id,
|
||||
av_name.mDisplayName.empty() ? waiting_str : av_name.mDisplayName,
|
||||
LLAvatarTracker::instance().isBuddyOnline(buddy_id));
|
||||
}
|
||||
|
||||
modified = true;
|
||||
nadded++;
|
||||
}
|
||||
|
|
@ -440,7 +452,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 )
|
||||
if ( mContextMenu && !isAvalineItemSelected())
|
||||
{
|
||||
uuid_vec_t selected_uuids;
|
||||
getSelectedUUIDs(selected_uuids);
|
||||
|
|
@ -449,6 +461,21 @@ BOOL LLAvatarList::handleRightMouseDown(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 )
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ protected:
|
|||
|
||||
private:
|
||||
|
||||
bool isAvalineItemSelected();
|
||||
|
||||
bool mIgnoreOnlineStatus;
|
||||
bool mShowLastInteractionTime;
|
||||
bool mDirty;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
using namespace LLOldEvents;
|
||||
|
||||
bool LLRecentPeople::add(const LLUUID& id)
|
||||
bool LLRecentPeople::add(const LLUUID& id, const LLSD& userdata)
|
||||
{
|
||||
if (id == gAgent.getID())
|
||||
return false;
|
||||
|
|
@ -42,10 +42,16 @@ bool LLRecentPeople::add(const LLUUID& id)
|
|||
|
||||
if (is_not_group_id)
|
||||
{
|
||||
LLDate date_added = LLDate::now();
|
||||
// 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->date with new date value
|
||||
mPeople[id] = date_added;
|
||||
//[] instead of insert to replace existing id->llsd["date"] with new date value
|
||||
mPeople[id] = userdata;
|
||||
mChangedSignal();
|
||||
}
|
||||
|
||||
|
|
@ -64,15 +70,55 @@ void LLRecentPeople::get(uuid_vec_t& result) const
|
|||
result.push_back((*pos).first);
|
||||
}
|
||||
|
||||
const LLDate& LLRecentPeople::getDate(const LLUUID& id) const
|
||||
const LLDate LLRecentPeople::getDate(const LLUUID& id) const
|
||||
{
|
||||
recent_people_t::const_iterator it = mPeople.find(id);
|
||||
if (it!= mPeople.end()) return (*it).second;
|
||||
if (it!= mPeople.end()) return it->second["date"].asDate();
|
||||
|
||||
static LLDate no_date = LLDate();
|
||||
return no_date;
|
||||
}
|
||||
|
||||
const LLSD& LLRecentPeople::getData(const LLUUID& id) const
|
||||
{
|
||||
recent_people_t::const_iterator it = mPeople.find(id);
|
||||
|
||||
if (it != mPeople.end())
|
||||
return it->second;
|
||||
|
||||
static LLSD no_data = LLSD();
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,9 +58,15 @@ public:
|
|||
* Add specified avatar to the list if it's not there already.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @return false if the avatar is in the list already, true otherwise
|
||||
*/
|
||||
bool add(const LLUUID& id);
|
||||
bool add(const LLUUID& id, const LLSD& userdata = LLSD().with("date", LLDate::now()));
|
||||
|
||||
/**
|
||||
* @param id avatar to search.
|
||||
|
|
@ -75,7 +81,25 @@ public:
|
|||
*/
|
||||
void get(uuid_vec_t& result) const;
|
||||
|
||||
const LLDate& getDate(const LLUUID& id) const;
|
||||
/**
|
||||
* Returns last interaction time with specified participant
|
||||
*
|
||||
*/
|
||||
const LLDate getDate(const LLUUID& id) const;
|
||||
|
||||
/**
|
||||
* Returns data about specified participant
|
||||
*
|
||||
* @param id identifier of specific participant
|
||||
*/
|
||||
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.
|
||||
|
|
@ -92,7 +116,10 @@ public:
|
|||
/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
|
||||
|
||||
private:
|
||||
typedef std::map<LLUUID, LLDate> recent_people_t;
|
||||
|
||||
const LLUUID& getIDByPhoneNumber(const LLSD& userdata);
|
||||
|
||||
typedef std::map<LLUUID, LLSD> recent_people_t;
|
||||
recent_people_t mPeople;
|
||||
signal_t mChangedSignal;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -853,7 +853,7 @@ void LLVoiceChannelP2P::activate()
|
|||
}
|
||||
|
||||
// Add the party to the list of people with which we've recently interacted.
|
||||
LLRecentPeople::instance().add(mOtherUserID);
|
||||
addToTheRecentPeopleList();
|
||||
|
||||
//Default mic is ON on initiating/joining P2P calls
|
||||
if (!LLVoiceClient::getInstance()->getUserPTTState() && LLVoiceClient::getInstance()->getPTTIsToggle())
|
||||
|
|
@ -938,3 +938,25 @@ void LLVoiceChannelP2P::setState(EState state)
|
|||
|
||||
LLVoiceChannel::setState(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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,6 +191,13 @@ protected:
|
|||
virtual void setState(EState state);
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Add the caller to the list of people with which we've recently interacted
|
||||
*
|
||||
**/
|
||||
void addToTheRecentPeopleList();
|
||||
|
||||
std::string mSessionHandle;
|
||||
LLUUID mOtherUserID;
|
||||
BOOL mReceivedCall;
|
||||
|
|
|
|||
Loading…
Reference in New Issue