summaryrefslogtreecommitdiff
path: root/indra/newview/llfloaterconversationpreview.cpp
diff options
context:
space:
mode:
authorPaul ProductEngine <pguslisty@productengine.com>2012-08-28 14:48:32 +0300
committerPaul ProductEngine <pguslisty@productengine.com>2012-08-28 14:48:32 +0300
commitd4ee17e533d652e90989e60bcbc097c81e73d081 (patch)
treed1782ac876502d12455e8bff3981ba60aae3737e /indra/newview/llfloaterconversationpreview.cpp
parenta1a1410d25c3e4ff87e33344b416b7a827cdb1c2 (diff)
CHUI-275 FIXED (Chat history viewer does not show entire user.txt IM log file)
- Renamed LLLogChat::loadAllHistory to LLLogChat::loadChatHistory because it doesn't actually loads all history. Also added parameter to the function which is a flag whether to load all file's content or not. - Implemented displaying history by pages (as was decided on meeting page): Added showHistory() method to the LLFloaterConversationPreview which shows the chat history page by page starting from the last conversation (or may say starting from the last page). One page contains 100 entries. Added "More history..." button to display next page of history.
Diffstat (limited to 'indra/newview/llfloaterconversationpreview.cpp')
-rw-r--r--indra/newview/llfloaterconversationpreview.cpp90
1 files changed, 53 insertions, 37 deletions
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index e8554bb066..2c34029c5c 100644
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -33,12 +33,15 @@
LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_id)
: LLFloater(session_id),
mChatHistory(NULL),
- mSessionID(session_id.asUUID())
+ mSessionID(session_id.asUUID()),
+ mCurrentPage(0),
+ mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize"))
{}
BOOL LLFloaterConversationPreview::postBuild()
{
mChatHistory = getChild<LLChatHistory>("chat_history");
+ getChild<LLUICtrl>("more_history")->setCommitCallback(boost::bind(&LLFloaterConversationPreview::onMoreHistoryBtnClick, this));
const LLConversation* conv = LLConversationLog::instance().getConversation(mSessionID);
if (conv)
@@ -52,6 +55,11 @@ BOOL LLFloaterConversationPreview::postBuild()
getChild<LLLineEditor>("description")->setValue(name);
}
+ std::string file = conv->getHistoryFileName();
+ LLLogChat::loadChatHistory(file, mMessages, true);
+
+ mCurrentPage = mMessages.size() / mPageSize;
+
return LLFloater::postBuild();
}
@@ -62,51 +70,59 @@ void LLFloaterConversationPreview::draw()
void LLFloaterConversationPreview::onOpen(const LLSD& session_id)
{
- const LLConversation* conv = LLConversationLog::instance().getConversation(session_id);
- if (!conv)
+ showHistory();
+}
+
+void LLFloaterConversationPreview::showHistory()
+{
+ if (!mMessages.size())
{
return;
}
- std::list<LLSD> messages;
- std::string file = conv->getHistoryFileName();
- LLLogChat::loadAllHistory(file, messages);
- if (messages.size())
+ mChatHistory->clear();
+
+ std::ostringstream message;
+ std::list<LLSD>::const_iterator iter = mMessages.begin();
+
+ int delta = 0;
+ if (mCurrentPage)
{
- std::ostringstream message;
- std::list<LLSD>::const_iterator iter = messages.begin();
- for (; iter != messages.end(); ++iter)
- {
- LLSD msg = *iter;
-
- std::string time = msg["time"].asString();
- LLUUID from_id = msg["from_id"].asUUID();
- std::string from = msg["from"].asString();
- std::string message = msg["message"].asString();
- bool is_history = msg["is_history"].asBoolean();
-
- LLChat chat;
- chat.mFromID = from_id;
- chat.mSessionID = session_id;
- chat.mFromName = from;
- chat.mTimeStr = time;
- chat.mChatStyle = is_history ? CHAT_STYLE_HISTORY : chat.mChatStyle;
- chat.mText = message;
-
- appendMessage(chat);
- }
+ double num_of_pages = (double)mMessages.size() / mPageSize;
+ delta = (ceil(num_of_pages) - num_of_pages) * mPageSize;
}
-}
-void LLFloaterConversationPreview::appendMessage(const LLChat& chat)
-{
- if (!chat.mMuted)
+ std::advance(iter, (mCurrentPage * mPageSize) - delta);
+
+ for (int msg_num = 0; (iter != mMessages.end() && msg_num < mPageSize); ++iter, ++msg_num)
{
- LLSD args;
- args["use_plain_text_chat_history"] = true;
- args["show_time"] = true;
- args["show_names_for_p2p_conv"] = true;
+ LLSD msg = *iter;
+
+ std::string time = msg["time"].asString();
+ LLUUID from_id = msg["from_id"].asUUID();
+ std::string from = msg["from"].asString();
+ std::string message = msg["message"].asString();
+ bool is_history = msg["is_history"].asBoolean();
+
+ LLChat chat;
+ chat.mFromID = from_id;
+ chat.mSessionID = mSessionID;
+ chat.mFromName = from;
+ chat.mTimeStr = time;
+ chat.mChatStyle = is_history ? CHAT_STYLE_HISTORY : chat.mChatStyle;
+ chat.mText = message;
mChatHistory->appendMessage(chat);
}
+
+}
+
+void LLFloaterConversationPreview::onMoreHistoryBtnClick()
+{
+ if (--mCurrentPage < 0)
+ {
+ return;
+ }
+
+ showHistory();
}