summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llappviewer.cpp5
-rw-r--r--indra/newview/llconversationlog.cpp36
-rw-r--r--indra/newview/llconversationlog.h4
-rw-r--r--indra/newview/llfloaterconversationlog.cpp13
-rw-r--r--indra/newview/llfloaterconversationlog.h2
-rw-r--r--indra/newview/llfloaterconversationpreview.cpp6
-rwxr-xr-xindra/newview/llimfloatercontainer.cpp21
-rw-r--r--indra/newview/lllogchat.cpp17
-rw-r--r--indra/newview/lllogchat.h4
-rw-r--r--indra/newview/skins/default/xui/en/floater_conversation_log.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_container.xml2
11 files changed, 82 insertions, 33 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 4dacde4792..08a1a237f5 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1834,10 +1834,7 @@ bool LLAppViewer::cleanup()
LLMuteList::getInstance()->cache(gAgent.getID());
//save call log list
- if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
- {
- LLConversationLog::instance().cache();
- }
+ LLConversationLog::instance().cache();
if (mPurgeOnExit)
{
diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp
index 239a89015f..27be2bc5ae 100644
--- a/indra/newview/llconversationlog.cpp
+++ b/indra/newview/llconversationlog.cpp
@@ -193,37 +193,40 @@ void LLConversationLogFriendObserver::changed(U32 mask)
LLConversationLog::LLConversationLog()
{
- loadFromFile(getFileName());
-
LLControlVariable* ctrl = gSavedPerAccountSettings.getControl("LogInstantMessages").get();
if (ctrl)
{
- ctrl->getSignal()->connect(boost::bind(&LLConversationLog::observeIMSession, this));
-
+ ctrl->getSignal()->connect(boost::bind(&LLConversationLog::enableLogging, this, _2));
if (ctrl->getValue().asBoolean())
{
- LLIMMgr::instance().addSessionObserver(this);
- newMessageSignalConnection = LLIMModel::instance().addNewMsgCallback(boost::bind(&LLConversationLog::onNewMessageReceived, this, _1));
+ enableLogging(true);
}
}
-
- mFriendObserver = new LLConversationLogFriendObserver;
- LLAvatarTracker::instance().addObserver(mFriendObserver);
-
}
-void LLConversationLog::observeIMSession()
+void LLConversationLog::enableLogging(bool enable)
{
- if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
+ if (enable)
{
+ loadFromFile(getFileName());
+
LLIMMgr::instance().addSessionObserver(this);
- LLIMModel::instance().addNewMsgCallback(boost::bind(&LLConversationLog::onNewMessageReceived, this, _1));
+ newMessageSignalConnection = LLIMModel::instance().addNewMsgCallback(boost::bind(&LLConversationLog::onNewMessageReceived, this, _1));
+
+ mFriendObserver = new LLConversationLogFriendObserver;
+ LLAvatarTracker::instance().addObserver(mFriendObserver);
}
else
{
+ saveToFile(getFileName());
+
LLIMMgr::instance().removeSessionObserver(this);
newMessageSignalConnection.disconnect();
+ LLAvatarTracker::instance().removeObserver(mFriendObserver);
+ mConversations.clear();
}
+
+ notifyObservers();
}
void LLConversationLog::logConversation(const LLUUID& session_id)
@@ -338,7 +341,10 @@ void LLConversationLog::sessionAdded(const LLUUID& session_id, const std::string
void LLConversationLog::cache()
{
- saveToFile(getFileName());
+ if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
+ {
+ saveToFile(getFileName());
+ }
}
std::string LLConversationLog::getFileName()
@@ -349,7 +355,7 @@ std::string LLConversationLog::getFileName()
bool LLConversationLog::saveToFile(const std::string& filename)
{
- if(!filename.size())
+ if (!filename.size())
{
llwarns << "Call log list filename is empty!" << llendl;
return false;
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
index ffd27f7e20..a458e975bb 100644
--- a/indra/newview/llconversationlog.h
+++ b/indra/newview/llconversationlog.h
@@ -144,6 +144,8 @@ private:
LLConversationLog();
+ void enableLogging(bool enable);
+
/**
* adds conversation to the conversation list and notifies observers
*/
@@ -151,8 +153,6 @@ private:
void notifyPrticularConversationObservers(const LLUUID& session_id, U32 mask);
- void observeIMSession();
-
/**
* constructs file name in which conversations log will be saved
* file name is conversation.log
diff --git a/indra/newview/llfloaterconversationlog.cpp b/indra/newview/llfloaterconversationlog.cpp
index 7b4c999e52..089aec1905 100644
--- a/indra/newview/llfloaterconversationlog.cpp
+++ b/indra/newview/llfloaterconversationlog.cpp
@@ -63,6 +63,13 @@ BOOL LLFloaterConversationLog::postBuild()
getChild<LLFilterEditor>("people_filter_input")->setCommitCallback(boost::bind(&LLFloaterConversationLog::onFilterEdit, this, _2));
+ LLControlVariable* ctrl = gSavedPerAccountSettings.getControl("LogInstantMessages").get();
+ if (ctrl)
+ {
+ ctrl->getSignal()->connect(boost::bind(&LLFloaterConversationLog::onCallLoggingEnabledDisabled, this, _2));
+ onCallLoggingEnabledDisabled(ctrl->getValue().asBoolean());
+ }
+
return LLFloater::postBuild();
}
@@ -130,3 +137,9 @@ bool LLFloaterConversationLog::isActionChecked(const LLSD& userdata)
return false;
}
+
+void LLFloaterConversationLog::onCallLoggingEnabledDisabled(bool enabled)
+{
+ std::string no_items_msg = enabled ? "" : getString("logging_calls_disabled");
+ mConversationLogList->setNoItemsCommentText(no_items_msg);
+}
diff --git a/indra/newview/llfloaterconversationlog.h b/indra/newview/llfloaterconversationlog.h
index e971330f3d..9e79cbd7d8 100644
--- a/indra/newview/llfloaterconversationlog.h
+++ b/indra/newview/llfloaterconversationlog.h
@@ -49,6 +49,8 @@ private:
bool isActionEnabled(const LLSD& userdata);
bool isActionChecked(const LLSD& userdata);
+ void onCallLoggingEnabledDisabled(bool enabled);
+
LLConversationLogList* mConversationLogList;
};
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index dbcf154ef2..88efc39764 100644
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -65,7 +65,11 @@ BOOL LLFloaterConversationPreview::postBuild()
std::string title = getString("Title", args);
setTitle(title);
- LLLogChat::loadChatHistory(file, mMessages, true);
+ LLSD load_params;
+ load_params["load_all_history"] = true;
+ load_params["cut_off_todays_date"] = false;
+
+ LLLogChat::loadChatHistory(file, mMessages, load_params);
mCurrentPage = mMessages.size() / mPageSize;
mPageSpinner = getChild<LLSpinCtrl>("history_page_spin");
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index 3243fd48de..9320117eb5 100755
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -118,7 +118,7 @@ BOOL LLIMFloaterContainer::postBuild()
mConversationsListPanel = getChild<LLPanel>("conversations_list_panel");
- // CHUI-98 : View Model for conversations
+ // Create the root model and view for all conversation sessions
LLConversationItem* base_item = new LLConversationItem(getRootViewModel());
LLFolderView::Params p;
p.view_model = &mConversationViewModel;
@@ -129,6 +129,8 @@ BOOL LLIMFloaterContainer::postBuild()
p.root = NULL;
mConversationsRoot = LLUICtrlFactory::create<LLFolderView>(p);
+ mConversationsRoot->setVisible(TRUE);
+
mConversationsListPanel->addChild(mConversationsRoot);
addConversationListItem(LLUUID()); // manually add nearby chat
@@ -370,8 +372,13 @@ void LLIMFloaterContainer::draw()
}
}
- repositioningWidgets();
-
+ // CHUI-308 : Hack! We shouldn't have to do that but we have too as long as
+ // we don't have a scroll container.
+ // *TODO: Take those 3 lines out once we implement the scroll container.
+ repositioningWidgets();
+ mConversationsRoot->setRect(mConversationsListPanel->getLocalRect());
+ mConversationsRoot->setFollowsAll();
+
if (mTabContainer->getTabCount() == 0)
{
// Do not close the container when every conversation is torn off because the user
@@ -485,6 +492,13 @@ void LLIMFloaterContainer::updateState(bool collapse, S32 delta_width)
setCanResize(is_left_pane_expanded || is_right_pane_expanded);
setCanMinimize(is_left_pane_expanded || is_right_pane_expanded);
+ // force set correct size for the title after show/hide minimize button
+ LLRect cur_rect = getRect();
+ LLRect force_rect = cur_rect;
+ force_rect.mRight = cur_rect.mRight + 1;
+ setRect(force_rect);
+ setRect(cur_rect);
+
// restore floater's resize limits (prevent collapse when left panel is expanded)
if (is_left_pane_expanded && !is_right_pane_expanded)
{
@@ -630,7 +644,6 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid)
widget->addToFolder(mConversationsRoot);
// Add it to the UI
- mConversationsListPanel->addChild(widget);
widget->setVisible(TRUE);
// Create the participants widgets now
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 073f5f00c5..3692658e9e 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -387,13 +387,16 @@ void append_to_last_message(std::list<LLSD>& messages, const std::string& line)
}
// static
-void LLLogChat::loadChatHistory(const std::string& file_name, std::list<LLSD>& messages, bool load_all_history/*= false*/)
+void LLLogChat::loadChatHistory(const std::string& file_name, std::list<LLSD>& messages, const LLSD& load_params)
{
if (file_name.empty())
{
llwarns << "Session name is Empty!" << llendl;
return ;
}
+
+ bool load_all_history = load_params.has("load_all_history") ? load_params["load_all_history"].asBoolean() : false;
+
//LL_INFOS("") << "Loading:" << file_name << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
//LL_INFOS("") << "Current:" << makeLogFileName(file_name) << LL_ENDL;/* uncomment if you want to verify step, delete on commit */
LLFILE* fptr = LLFile::fopen(makeLogFileName(file_name), "r");/*Flawfinder: ignore*/
@@ -449,7 +452,7 @@ void LLLogChat::loadChatHistory(const std::string& file_name, std::list<LLSD>& m
else
{
LLSD item;
- if (!LLChatLogParser::parse(line, item))
+ if (!LLChatLogParser::parse(line, item, load_params))
{
item[IM_TEXT] = line;
}
@@ -500,10 +503,11 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
}
}
-bool LLChatLogParser::parse(std::string& raw, LLSD& im)
+bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params)
{
if (!raw.length()) return false;
+ bool cut_off_todays_date = parse_params.has("cut_off_todays_date") ? parse_params["cut_off_todays_date"].asBoolean() : true;
im = LLSD::emptyMap();
//matching a timestamp
@@ -518,7 +522,12 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im)
boost::trim(timestamp);
timestamp.erase(0, 1);
timestamp.erase(timestamp.length()-1, 1);
- LLLogChatTimeScanner::instance().checkAndCutOffDate(timestamp);
+
+ if (cut_off_todays_date)
+ {
+ LLLogChatTimeScanner::instance().checkAndCutOffDate(timestamp);
+ }
+
im[IM_TIME] = timestamp;
}
else
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 95f83e64e5..d3e9adcc37 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -55,7 +55,7 @@ public:
void (*callback)(ELogLineType, const LLSD&, void*),
void* userdata);
- static void loadChatHistory(const std::string& file_name, std::list<LLSD>& messages, bool load_all_history = false);
+ static void loadChatHistory(const std::string& file_name, std::list<LLSD>& messages, const LLSD& load_params = LLSD());
private:
static std::string cleanFileName(std::string filename);
};
@@ -105,7 +105,7 @@ public:
*
* @return false if failed to parse mandatory data - message text
*/
- static bool parse(std::string& raw, LLSD& im);
+ static bool parse(std::string& raw, LLSD& im, const LLSD& parse_params = LLSD());
protected:
LLChatLogParser();
diff --git a/indra/newview/skins/default/xui/en/floater_conversation_log.xml b/indra/newview/skins/default/xui/en/floater_conversation_log.xml
index 9cdeb0d788..df78bbccec 100644
--- a/indra/newview/skins/default/xui/en/floater_conversation_log.xml
+++ b/indra/newview/skins/default/xui/en/floater_conversation_log.xml
@@ -13,6 +13,11 @@
reuse_instance="true"
title="CONVERSATION LOG"
width="450">
+
+ <string name="logging_calls_disabled">
+ Conversations are not being logged. To log conversations in the future, select "Save IM logs in my computer" under Preferences > Privacy.
+ </string>
+
<panel
follows="left|top|right"
height="27"
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
index 1583add857..413e66738d 100644
--- a/indra/newview/skins/default/xui/en/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_container.xml
@@ -36,7 +36,7 @@
name="conversations_layout_panel"
min_dim="38"
width="268"
- expanded_min_dim="165">
+ expanded_min_dim="120">
<layout_stack
animate="false"
follows="left|top|right"