diff options
author | Richard Maudsley <richard.maudsley@isode.com> | 2014-07-31 09:12:51 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2014-08-10 10:29:59 (GMT) |
commit | cdc8e88963e2f12cf0a6398a4dd6bb787b456b46 (patch) | |
tree | 4f3593b4551e96cfa94a5c606c2388bf43f1a936 | |
parent | b3c5aaea2fe185378d340ad1cdfe7ef502c1ab24 (diff) | |
download | swift-contrib-cdc8e88963e2f12cf0a6398a4dd6bb787b456b46.zip swift-contrib-cdc8e88963e2f12cf0a6398a4dd6bb787b456b46.tar.bz2 |
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
-rw-r--r-- | Swift/Controllers/Roster/RosterController.cpp | 2 | ||||
-rw-r--r-- | Swiften/Client/ClientBlockListManager.cpp | 20 | ||||
-rw-r--r-- | Swiften/Client/ClientBlockListManager.h | 6 | ||||
-rw-r--r-- | Swiften/Client/UnitTest/ClientBlockListManagerTest.cpp | 2 |
4 files changed, 19 insertions, 11 deletions
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 @@ -281,19 +281,19 @@ void RosterController::updateItem(const XMPPRosterItem& item) { RosterPayload::ref roster = boost::make_shared<RosterPayload>(); roster->addItem(itemPayload); SetRosterRequest::ref request = SetRosterRequest::create(roster, iqRouter_); request->onResponse.connect(boost::bind(&RosterController::handleRosterItemUpdated, this, _1, roster)); request->send(); } void RosterController::initBlockingCommand() { - boost::shared_ptr<BlockList> blockList = clientBlockListManager_->getBlockList(); + boost::shared_ptr<BlockList> blockList = clientBlockListManager_->requestBlockList(); blockingOnStateChangedConnection_ = blockList->onStateChanged.connect(boost::bind(&RosterController::handleBlockingStateChanged, this)); blockingOnItemAddedConnection_ = blockList->onItemAdded.connect(boost::bind(&RosterController::handleBlockingItemAdded, this, _1)); blockingOnItemRemovedConnection_ = blockList->onItemRemoved.connect(boost::bind(&RosterController::handleBlockingItemRemoved, this, _1)); roster_->setBlockingSupported(true); if (blockList->getState() == BlockList::Available) { foreach(const JID& jid, blockList->getItems()) { roster_->applyOnItems(SetBlockingState(jid, ContactRosterItem::IsBlocked)); } 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 @@ -68,32 +68,36 @@ namespace { ClientBlockListManager::ClientBlockListManager(IQRouter* iqRouter) : iqRouter(iqRouter) { } ClientBlockListManager::~ClientBlockListManager() { if (blockList && blockList->getState() == BlockList::Available) { unblockResponder->stop(); blockResponder->stop(); } - if (getRequest) { - getRequest->onResponse.disconnect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); - } } boost::shared_ptr<BlockList> ClientBlockListManager::getBlockList() { if (!blockList) { blockList = boost::make_shared<BlockListImpl>(); - blockList->setState(BlockList::Requesting); - assert(!getRequest); - getRequest = boost::make_shared< GenericRequest<BlockListPayload> >(IQ::Get, JID(), boost::make_shared<BlockListPayload>(), iqRouter); - getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); - getRequest->send(); + blockList->setState(BlockList::Init); + } + return blockList; +} + +boost::shared_ptr<BlockList> ClientBlockListManager::requestBlockList() { + if (!blockList) { + blockList = boost::make_shared<BlockListImpl>(); } + blockList->setState(BlockList::Requesting); + boost::shared_ptr<GenericRequest<BlockListPayload> > getRequest = boost::make_shared< GenericRequest<BlockListPayload> >(IQ::Get, JID(), boost::make_shared<BlockListPayload>(), iqRouter); + getRequest->onResponse.connect(boost::bind(&ClientBlockListManager::handleBlockListReceived, this, _1, _2)); + getRequest->send(); return blockList; } GenericRequest<BlockPayload>::ref ClientBlockListManager::createBlockJIDRequest(const JID& jid) { return createBlockJIDsRequest(std::vector<JID>(1, jid)); } GenericRequest<BlockPayload>::ref ClientBlockListManager::createBlockJIDsRequest(const std::vector<JID>& jids) { boost::shared_ptr<BlockPayload> payload = boost::make_shared<BlockPayload>(jids); 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 @@ -25,28 +25,32 @@ namespace Swift { public: ClientBlockListManager(IQRouter *iqRouter); ~ClientBlockListManager(); /** * Returns the blocklist. */ boost::shared_ptr<BlockList> getBlockList(); + /** + * Get the blocklist from the server. + */ + boost::shared_ptr<BlockList> requestBlockList(); + GenericRequest<BlockPayload>::ref createBlockJIDRequest(const JID& jid); GenericRequest<BlockPayload>::ref createBlockJIDsRequest(const std::vector<JID>& jids); GenericRequest<UnblockPayload>::ref createUnblockJIDRequest(const JID& jid); GenericRequest<UnblockPayload>::ref createUnblockJIDsRequest(const std::vector<JID>& jids); GenericRequest<UnblockPayload>::ref createUnblockAllRequest(); private: void handleBlockListReceived(boost::shared_ptr<BlockListPayload> payload, ErrorPayload::ref); private: IQRouter* iqRouter; - boost::shared_ptr<GenericRequest<BlockListPayload> > getRequest; boost::shared_ptr<SetResponder<BlockPayload> > blockResponder; boost::shared_ptr<SetResponder<UnblockPayload> > unblockResponder; boost::shared_ptr<BlockListImpl> 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 @@ -146,19 +146,19 @@ class ClientBlockListManagerTest : public CppUnit::TestFixture { void tearDown() { delete clientBlockListManager_; delete iqRouter_; delete stanzaChannel_; } private: void helperInitialBlockListFetch(const std::vector<JID>& blockedJids) { - boost::shared_ptr<BlockList> blockList = clientBlockListManager_->getBlockList(); + boost::shared_ptr<BlockList> blockList = clientBlockListManager_->requestBlockList(); CPPUNIT_ASSERT(blockList); // check for IQ request IQ::ref request = stanzaChannel_->getStanzaAtIndex<IQ>(0); CPPUNIT_ASSERT(request.get() != NULL); boost::shared_ptr<BlockListPayload> requestPayload = request->getPayload<BlockListPayload>(); CPPUNIT_ASSERT(requestPayload.get() != NULL); CPPUNIT_ASSERT_EQUAL(BlockList::Requesting, blockList->getState()); |