From cdc8e88963e2f12cf0a6398a4dd6bb787b456b46 Mon Sep 17 00:00:00 2001 From: Richard Maudsley Date: Thu, 31 Jul 2014 10:12:51 +0100 Subject: Fix blocklist not being requested on reconnect. Test-Information: Connect client and confirm that blocklist is requested only once. Reconnect client and confirm that blocklist is requested again. Change-Id: Iebf38c9f3c1ff9749c239b6cf785feb7a539a9b1 diff --git a/Swift/Controllers/Roster/RosterController.cpp b/Swift/Controllers/Roster/RosterController.cpp index e823a1c..43623d5 100644 --- a/Swift/Controllers/Roster/RosterController.cpp +++ b/Swift/Controllers/Roster/RosterController.cpp @@ -287,7 +287,7 @@ void RosterController::updateItem(const XMPPRosterItem& item) { } void RosterController::initBlockingCommand() { - boost::shared_ptr blockList = clientBlockListManager_->getBlockList(); + boost::shared_ptr blockList = clientBlockListManager_->requestBlockList(); blockingOnStateChangedConnection_ = blockList->onStateChanged.connect(boost::bind(&RosterController::handleBlockingStateChanged, this)); blockingOnItemAddedConnection_ = blockList->onItemAdded.connect(boost::bind(&RosterController::handleBlockingItemAdded, this, _1)); diff --git a/Swiften/Client/ClientBlockListManager.cpp b/Swiften/Client/ClientBlockListManager.cpp index 6646a5c..d446315 100644 --- a/Swiften/Client/ClientBlockListManager.cpp +++ b/Swiften/Client/ClientBlockListManager.cpp @@ -74,20 +74,24 @@ ClientBlockListManager::~ClientBlockListManager() { unblockResponder->stop(); blockResponder->stop(); } - if (getRequest) { - getRequest->onResponse.disconnect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); - } } boost::shared_ptr ClientBlockListManager::getBlockList() { if (!blockList) { blockList = boost::make_shared(); - blockList->setState(BlockList::Requesting); - assert(!getRequest); - getRequest = boost::make_shared< GenericRequest >(IQ::Get, JID(), boost::make_shared(), iqRouter); - getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); - getRequest->send(); + blockList->setState(BlockList::Init); + } + return blockList; +} + +boost::shared_ptr ClientBlockListManager::requestBlockList() { + if (!blockList) { + blockList = boost::make_shared(); } + blockList->setState(BlockList::Requesting); + boost::shared_ptr > getRequest = boost::make_shared< GenericRequest >(IQ::Get, JID(), boost::make_shared(), iqRouter); + getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); + getRequest->send(); return blockList; } diff --git a/Swiften/Client/ClientBlockListManager.h b/Swiften/Client/ClientBlockListManager.h index e8d4ac6..e715737 100644 --- a/Swiften/Client/ClientBlockListManager.h +++ b/Swiften/Client/ClientBlockListManager.h @@ -31,6 +31,11 @@ namespace Swift { */ boost::shared_ptr getBlockList(); + /** + * Get the blocklist from the server. + */ + boost::shared_ptr requestBlockList(); + GenericRequest::ref createBlockJIDRequest(const JID& jid); GenericRequest::ref createBlockJIDsRequest(const std::vector& jids); @@ -43,7 +48,6 @@ namespace Swift { private: IQRouter* iqRouter; - boost::shared_ptr > getRequest; boost::shared_ptr > blockResponder; boost::shared_ptr > unblockResponder; boost::shared_ptr blockList; diff --git a/Swiften/Client/UnitTest/ClientBlockListManagerTest.cpp b/Swiften/Client/UnitTest/ClientBlockListManagerTest.cpp index 9010042..dd6c95d 100644 --- a/Swiften/Client/UnitTest/ClientBlockListManagerTest.cpp +++ b/Swiften/Client/UnitTest/ClientBlockListManagerTest.cpp @@ -152,7 +152,7 @@ class ClientBlockListManagerTest : public CppUnit::TestFixture { private: void helperInitialBlockListFetch(const std::vector& blockedJids) { - boost::shared_ptr blockList = clientBlockListManager_->getBlockList(); + boost::shared_ptr blockList = clientBlockListManager_->requestBlockList(); CPPUNIT_ASSERT(blockList); // check for IQ request -- cgit v0.10.2-6-g49f6