aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJacek Antonelli2010-08-23 23:45:31 -0500
committerJacek Antonelli2010-08-27 13:25:15 -0500
commit05da24f82bad8cf31de5cb6a3a6aaac73c94810e (patch)
tree0e721a4ac7bb7cf3d0283e112ad4d7d33c248f23
parentWip - mute group chat (diff)
downloadmeta-impy-05da24f82bad8cf31de5cb6a3a6aaac73c94810e.zip
meta-impy-05da24f82bad8cf31de5cb6a3a6aaac73c94810e.tar.gz
meta-impy-05da24f82bad8cf31de5cb6a3a6aaac73c94810e.tar.bz2
meta-impy-05da24f82bad8cf31de5cb6a3a6aaac73c94810e.tar.xz
Finished up ability to ignore group chat from specific groups.
Uncheck the "Join group chat" checkbox in the group info window. The list of ignored groups is saved per-account in ignore_groups.xml.
-rw-r--r--linden/indra/newview/llimview.cpp79
-rw-r--r--linden/indra/newview/llimview.h2
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.cpp10
-rw-r--r--linden/indra/newview/llstartup.cpp4
-rw-r--r--linden/indra/newview/llviewerwindow.cpp4
5 files changed, 56 insertions, 43 deletions
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index 2ad743b..e3ec5e6 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -535,8 +535,6 @@ LLIMMgr::LLIMMgr() :
535 535
536 mPendingInvitations = LLSD::emptyMap(); 536 mPendingInvitations = LLSD::emptyMap();
537 mPendingAgentListUpdates = LLSD::emptyMap(); 537 mPendingAgentListUpdates = LLSD::emptyMap();
538
539 loadIgnoreGroup();
540} 538}
541 539
542LLIMMgr::~LLIMMgr() 540LLIMMgr::~LLIMMgr()
@@ -615,8 +613,9 @@ void LLIMMgr::addMessage(
615 } 613 }
616 614
617 // If the group is in our list then return 615 // If the group is in our list then return
618 if (group_data && (mIgnoreGroupList.count(group_data->mID) == 1)) 616 if (group_data && getIgnoreGroup(group_data->mID))
619 { 617 {
618 // llinfos << "ignoring chat from group " << group_data->mID << llendl;
620 return; 619 return;
621 } 620 }
622 } 621 }
@@ -1304,7 +1303,6 @@ void LLIMMgr::updateFloaterSessionID(
1304 1303
1305void LLIMMgr::loadIgnoreGroup() 1304void LLIMMgr::loadIgnoreGroup()
1306{ 1305{
1307 // Load groups we want to ignore in chat -- MC
1308 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "ignore_groups.xml"); 1306 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "ignore_groups.xml");
1309 1307
1310 LLSD settings_llsd; 1308 LLSD settings_llsd;
@@ -1312,38 +1310,41 @@ void LLIMMgr::loadIgnoreGroup()
1312 file.open(filename); 1310 file.open(filename);
1313 if (file.is_open()) 1311 if (file.is_open())
1314 { 1312 {
1315 llinfos << "loading ignore_groups.xml" << llendl; 1313 // llinfos << "loading group chat ignore from " << filename << "..." << llendl;
1316 LLSDSerialize::fromXML(settings_llsd, file); 1314 LLSDSerialize::fromXML(settings_llsd, file);
1315
1316 mIgnoreGroupList.clear();
1317
1318 for(LLSD::array_const_iterator iter = settings_llsd.beginArray();
1319 iter != settings_llsd.endArray(); ++iter)
1320 {
1321 // llinfos << "added " << iter->asUUID()
1322 // << " to group chat ignore list" << llendl;
1323 mIgnoreGroupList.push_back( iter->asUUID() );
1324 }
1317 } 1325 }
1318 else 1326 else
1319 { 1327 {
1320 llinfos << "creating blank ignore_groups.xml" << llendl; 1328 // llinfos << "can't load " << filename
1321 FILE* fp = LLFile::fopen(filename, "w+"); 1329 // << " (probably it doesn't exist yet)" << llendl;
1322 fclose(fp);
1323 }
1324
1325 for (LLSD::map_const_iterator iter = settings_llsd.beginMap();
1326 iter != settings_llsd.endMap(); ++iter)
1327 {
1328 llinfos << "group chat for id " << iter->first << " is ignored? " << iter->second << llendl;
1329 mIgnoreGroupList.insert(std::make_pair(LLUUID(iter->first), (bool)(iter->second.asBoolean())));
1330 } 1330 }
1331} 1331}
1332 1332
1333void LLIMMgr::saveIgnoreGroup() 1333void LLIMMgr::saveIgnoreGroup()
1334{ 1334{
1335 // Save groups we want to ignore in chat before killing gIMMgr 1335 // llinfos << "saving ignore_groups.xml" << llendl;
1336
1336 std::string user_dir = gDirUtilp->getLindenUserDir(); 1337 std::string user_dir = gDirUtilp->getLindenUserDir();
1337 if (!user_dir.empty()) 1338 if (!user_dir.empty())
1338 { 1339 {
1339 llinfos << "saving ignore_groups.xml" << llendl;
1340 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "ignore_groups.xml"); 1340 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "ignore_groups.xml");
1341 LLSD settings_llsd;
1342 1341
1343 for(std::map<LLUUID, bool>::iterator iter = mIgnoreGroupList.begin(); 1342 LLSD settings_llsd = LLSD::emptyArray();
1344 iter != mIgnoreGroupList.end(); ++iter) 1343
1344 for(std::list<LLUUID>::iterator iter = mIgnoreGroupList.begin();
1345 iter != mIgnoreGroupList.end(); ++iter)
1345 { 1346 {
1346 settings_llsd[iter->first.asString()] = iter->second; 1347 settings_llsd.append(*iter);
1347 } 1348 }
1348 1349
1349 llofstream file; 1350 llofstream file;
@@ -1356,16 +1357,27 @@ void LLIMMgr::updateIgnoreGroup(const LLUUID& group_id, const bool& ignore)
1356{ 1357{
1357 if (group_id.notNull()) 1358 if (group_id.notNull())
1358 { 1359 {
1359 std::map<LLUUID, bool>::iterator found_it = mIgnoreGroupList.find(group_id); 1360 std::list<LLUUID>::iterator found =
1360 if (found_it != mIgnoreGroupList.end()) 1361 std::find( mIgnoreGroupList.begin(), mIgnoreGroupList.end(),
1362 group_id);
1363
1364 if (found != mIgnoreGroupList.end() && !ignore)
1361 { 1365 {
1362 llinfos << "existing group " << group_id << " updated to " << ignore << llendl; 1366 // change from ignored to not ignored
1363 mIgnoreGroupList[group_id] = ignore; 1367 // llinfos << "unignoring group " << group_id << llendl;
1368 mIgnoreGroupList.remove(group_id);
1369 }
1370 else if (found == mIgnoreGroupList.end() && ignore)
1371 {
1372 // change from not ignored to ignored
1373 // llinfos << "ignoring group " << group_id << llendl;
1374 mIgnoreGroupList.push_back(group_id);
1364 } 1375 }
1365 else 1376 else
1366 { 1377 {
1367 llinfos << "new group " << group_id << " created and set to " << ignore << llendl; 1378 // nothing to do
1368 mIgnoreGroupList.insert(std::make_pair(group_id, ignore)); 1379 // llinfos << "no change to group " << group_id << ", it is already "
1380 // << (ignore ? "" : "not ") << "ignored" << llendl;
1369 } 1381 }
1370 } 1382 }
1371} 1383}
@@ -1374,14 +1386,17 @@ bool LLIMMgr::getIgnoreGroup(const LLUUID& group_id)
1374{ 1386{
1375 if (group_id.notNull()) 1387 if (group_id.notNull())
1376 { 1388 {
1377 std::map<LLUUID, bool>::iterator found_it = mIgnoreGroupList.find(group_id); 1389 std::list<LLUUID>::iterator found =
1378 if (found_it != mIgnoreGroupList.end()) 1390 std::find( mIgnoreGroupList.begin(), mIgnoreGroupList.end(),
1391 group_id);
1392
1393 if (found != mIgnoreGroupList.end())
1379 { 1394 {
1380 llinfos << "group found in ignore_groups.xml, " << found_it->second << llendl; 1395 // llinfos << "group " << group_id << " is ignored." << llendl;
1381 return found_it->second; 1396 return true;
1382 } 1397 }
1383 } 1398 }
1384 llinfos << "no group info found in ignore_groups.xml" << llendl; 1399 // llinfos << "group " << group_id << " is not ignored." << llendl;
1385 return false; 1400 return false;
1386} 1401}
1387 1402
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h
index a7a088a..8f665d2 100644
--- a/linden/indra/newview/llimview.h
+++ b/linden/indra/newview/llimview.h
@@ -218,7 +218,7 @@ private:
218 LLSD mPendingInvitations; 218 LLSD mPendingInvitations;
219 LLSD mPendingAgentListUpdates; 219 LLSD mPendingAgentListUpdates;
220 220
221 std::map<LLUUID, bool> mIgnoreGroupList; 221 std::list<LLUUID> mIgnoreGroupList;
222}; 222};
223 223
224 224
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index 402929e..55e1b33 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -545,7 +545,6 @@ bool LLPanelGroupGeneral::apply(std::string& mesg)
545 } 545 }
546 546
547 BOOL receive_notices = false; 547 BOOL receive_notices = false;
548 BOOL receive_chat = false;
549 BOOL list_in_profile = false; 548 BOOL list_in_profile = false;
550 if (mCtrlReceiveNotices) 549 if (mCtrlReceiveNotices)
551 receive_notices = mCtrlReceiveNotices->get(); 550 receive_notices = mCtrlReceiveNotices->get();
@@ -556,13 +555,12 @@ bool LLPanelGroupGeneral::apply(std::string& mesg)
556 555
557 if (mCtrlReceiveChat) 556 if (mCtrlReceiveChat)
558 { 557 {
559 receive_chat = mCtrlReceiveChat->get(); 558 bool receive_chat = mCtrlReceiveChat->get();
559 gIMMgr->updateIgnoreGroup(mGroupID, !receive_chat);
560 // Save here too in case we crash somewhere down the road -- MC
561 gIMMgr->saveIgnoreGroup();
560 } 562 }
561 563
562 gIMMgr->updateIgnoreGroup(mGroupID, receive_chat);
563 // Save here too in case we crash somewhere down the road -- MC
564 gIMMgr->saveIgnoreGroup();
565
566 mChanged = FALSE; 564 mChanged = FALSE;
567 565
568 return true; 566 return true;
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 3f55fd8..0464e99 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -111,6 +111,7 @@
111#include "llhudmanager.h" 111#include "llhudmanager.h"
112#include "llhttpclient.h" 112#include "llhttpclient.h"
113#include "llimagebmp.h" 113#include "llimagebmp.h"
114#include "llimview.h" // for gIMMgr
114#include "llinventorymodel.h" 115#include "llinventorymodel.h"
115#include "llinventoryview.h" 116#include "llinventoryview.h"
116#include "llkeyboard.h" 117#include "llkeyboard.h"
@@ -1716,6 +1717,9 @@ bool idle_startup()
1716 gHippoGridManager->saveFile(); 1717 gHippoGridManager->saveFile();
1717 gHippoLimits->setLimits(); 1718 gHippoLimits->setLimits();
1718 1719
1720 // Load list of groups to ignore incoming chat from.
1721 gIMMgr->loadIgnoreGroup();
1722
1719 // JC: gesture loading done below, when we have an asset system 1723 // JC: gesture loading done below, when we have an asset system
1720 // in place. Don't delete/clear user_credentials until then. 1724 // in place. Don't delete/clear user_credentials until then.
1721 1725
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index dd27726..c89e0c5 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -1660,10 +1660,6 @@ void LLViewerWindow::initWorldUI()
1660 mRootView->addChild(gHoverView); 1660 mRootView->addChild(gHoverView);
1661 1661
1662 gIMMgr = LLIMMgr::getInstance(); 1662 gIMMgr = LLIMMgr::getInstance();
1663 if (gIMMgr)
1664 {
1665 gIMMgr->loadIgnoreGroup();
1666 }
1667 1663
1668 if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) 1664 if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") )
1669 { 1665 {