summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/Controllers/Roster')
-rw-r--r--Swift/Controllers/Roster/RosterController.cpp16
-rw-r--r--Swift/Controllers/Roster/RosterController.h44
-rw-r--r--Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp34
3 files changed, 61 insertions, 33 deletions
diff --git a/Swift/Controllers/Roster/RosterController.cpp b/Swift/Controllers/Roster/RosterController.cpp
index 2d35b6a..73efa43 100644
--- a/Swift/Controllers/Roster/RosterController.cpp
+++ b/Swift/Controllers/Roster/RosterController.cpp
@@ -1,19 +1,20 @@
1/* 1/*
2 * Copyright (c) 2010-2014 Isode Limited. 2 * Copyright (c) 2010-2015 Isode Limited.
3 * All rights reserved. 3 * All rights reserved.
4 * See the COPYING file for more information. 4 * See the COPYING file for more information.
5 */ 5 */
6 6
7#include <Swift/Controllers/Roster/RosterController.h> 7#include <Swift/Controllers/Roster/RosterController.h>
8 8
9#include <boost/bind.hpp> 9#include <boost/bind.hpp>
10#include <boost/smart_ptr/make_shared.hpp> 10#include <boost/smart_ptr/make_shared.hpp>
11 11
12#include <Swiften/Avatars/AvatarManager.h>
13#include <Swiften/Base/Path.h>
12#include <Swiften/Base/foreach.h> 14#include <Swiften/Base/foreach.h>
13#include <Swiften/Base/format.h> 15#include <Swiften/Base/format.h>
14#include <Swiften/Base/Path.h>
15#include <Swiften/Client/ClientBlockListManager.h> 16#include <Swiften/Client/ClientBlockListManager.h>
16#include <Swiften/Client/NickManager.h> 17#include <Swiften/Client/NickManager.h>
17#include <Swiften/Client/NickResolver.h> 18#include <Swiften/Client/NickResolver.h>
18#include <Swiften/Disco/EntityCapsManager.h> 19#include <Swiften/Disco/EntityCapsManager.h>
19#include <Swiften/Elements/DiscoInfo.h> 20#include <Swiften/Elements/DiscoInfo.h>
@@ -25,23 +26,26 @@
25#include <Swiften/Queries/IQRouter.h> 26#include <Swiften/Queries/IQRouter.h>
26#include <Swiften/Roster/GetRosterRequest.h> 27#include <Swiften/Roster/GetRosterRequest.h>
27#include <Swiften/Roster/SetRosterRequest.h> 28#include <Swiften/Roster/SetRosterRequest.h>
28#include <Swiften/Roster/XMPPRoster.h> 29#include <Swiften/Roster/XMPPRoster.h>
29#include <Swiften/Roster/XMPPRosterItem.h> 30#include <Swiften/Roster/XMPPRosterItem.h>
31#include <Swiften/VCards/VCardManager.h>
30 32
33#include <Swift/Controllers/FileTransfer/FileTransferOverview.h>
31#include <Swift/Controllers/Intl.h> 34#include <Swift/Controllers/Intl.h>
32#include <Swift/Controllers/Roster/GroupRosterItem.h> 35#include <Swift/Controllers/Roster/GroupRosterItem.h>
33#include <Swift/Controllers/Roster/OfflineRosterFilter.h>
34#include <Swift/Controllers/Roster/Roster.h>
35#include <Swift/Controllers/Roster/RosterVCardProvider.h>
36#include <Swift/Controllers/Roster/ItemOperations/AppearOffline.h> 36#include <Swift/Controllers/Roster/ItemOperations/AppearOffline.h>
37#include <Swift/Controllers/Roster/ItemOperations/SetAvatar.h>
38#include <Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h> 37#include <Swift/Controllers/Roster/ItemOperations/SetAvailableFeatures.h>
38#include <Swift/Controllers/Roster/ItemOperations/SetAvatar.h>
39#include <Swift/Controllers/Roster/ItemOperations/SetBlockingState.h> 39#include <Swift/Controllers/Roster/ItemOperations/SetBlockingState.h>
40#include <Swift/Controllers/Roster/ItemOperations/SetName.h> 40#include <Swift/Controllers/Roster/ItemOperations/SetName.h>
41#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h> 41#include <Swift/Controllers/Roster/ItemOperations/SetPresence.h>
42#include <Swift/Controllers/Roster/ItemOperations/SetVCard.h> 42#include <Swift/Controllers/Roster/ItemOperations/SetVCard.h>
43#include <Swift/Controllers/Roster/OfflineRosterFilter.h>
44#include <Swift/Controllers/Roster/Roster.h>
45#include <Swift/Controllers/Roster/RosterGroupExpandinessPersister.h>
46#include <Swift/Controllers/Roster/RosterVCardProvider.h>
43#include <Swift/Controllers/SettingConstants.h> 47#include <Swift/Controllers/SettingConstants.h>
44#include <Swift/Controllers/UIEvents/AddContactUIEvent.h> 48#include <Swift/Controllers/UIEvents/AddContactUIEvent.h>
45#include <Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h> 49#include <Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h>
46#include <Swift/Controllers/UIEvents/RenameGroupUIEvent.h> 50#include <Swift/Controllers/UIEvents/RenameGroupUIEvent.h>
47#include <Swift/Controllers/UIEvents/RenameRosterItemUIEvent.h> 51#include <Swift/Controllers/UIEvents/RenameRosterItemUIEvent.h>
diff --git a/Swift/Controllers/Roster/RosterController.h b/Swift/Controllers/Roster/RosterController.h
index f4ae581..545abfc 100644
--- a/Swift/Controllers/Roster/RosterController.h
+++ b/Swift/Controllers/Roster/RosterController.h
@@ -1,55 +1,57 @@
1/* 1/*
2 * Copyright (c) 2010 Isode Limited. 2 * Copyright (c) 2010-2015 Isode Limited.
3 * All rights reserved. 3 * All rights reserved.
4 * See the COPYING file for more information. 4 * See the COPYING file for more information.
5 */ 5 */
6 6
7#pragma once 7#pragma once
8 8
9#include <string>
10#include <set> 9#include <set>
10#include <string>
11 11
12#include <boost/shared_ptr.hpp> 12#include <boost/shared_ptr.hpp>
13 13
14#include <Swiften/Avatars/AvatarManager.h>
14#include <Swiften/Base/boost_bsignals.h> 15#include <Swiften/Base/boost_bsignals.h>
15#include <Swiften/JID/JID.h>
16#include <Swiften/Elements/Presence.h>
17#include <Swiften/Elements/ErrorPayload.h> 16#include <Swiften/Elements/ErrorPayload.h>
17#include <Swiften/Elements/Presence.h>
18#include <Swiften/Elements/RosterPayload.h> 18#include <Swiften/Elements/RosterPayload.h>
19#include <Swiften/Avatars/AvatarManager.h> 19#include <Swiften/Elements/VCard.h>
20#include <Swiften/VCards/VCardManager.h> 20#include <Swiften/JID/JID.h>
21 21
22#include <Swift/Controllers/Roster/ContactRosterItem.h>
22#include <Swift/Controllers/UIEvents/UIEvent.h> 23#include <Swift/Controllers/UIEvents/UIEvent.h>
23#include <Swift/Controllers/FileTransfer/FileTransferOverview.h>
24#include <Swift/Controllers/Roster/RosterGroupExpandinessPersister.h>
25 24
26namespace Swift { 25namespace Swift {
26 class AvatarManager;
27 class ClientBlockListManager;
28 class EntityCapsProvider;
29 class EventController;
30 class FileTransferManager;
31 class FileTransferOverview;
27 class IQRouter; 32 class IQRouter;
28 class Roster;
29 class XMPPRoster;
30 class XMPPRosterItem;
31 class MainWindow; 33 class MainWindow;
32 class MainWindowFactory; 34 class MainWindowFactory;
33 class OfflineRosterFilter; 35 class NickManager;
34 class NickResolver; 36 class NickResolver;
37 class OfflineRosterFilter;
35 class PresenceOracle; 38 class PresenceOracle;
39 class Roster;
40 class RosterGroupExpandinessPersister;
41 class RosterVCardProvider;
42 class SettingsProvider;
36 class SubscriptionManager; 43 class SubscriptionManager;
37 class EventController;
38 class SubscriptionRequestEvent; 44 class SubscriptionRequestEvent;
39 class UIEventStream; 45 class UIEventStream;
40 class IQRouter; 46 class VCardManager;
41 class SettingsProvider; 47 class XMPPRoster;
42 class NickManager; 48 class XMPPRosterItem;
43 class EntityCapsProvider;
44 class FileTransferManager;
45 class ClientBlockListManager;
46 class RosterVCardProvider;
47 49
48 class RosterController { 50 class RosterController {
49 public: 51 public:
50 RosterController(const JID& jid, XMPPRoster* xmppRoster, AvatarManager* avatarManager, MainWindowFactory* mainWindowFactory, NickManager* nickManager, NickResolver* nickResolver, PresenceOracle* presenceOracle, SubscriptionManager* subscriptionManager, EventController* eventController, UIEventStream* uiEventStream, IQRouter* iqRouter_, SettingsProvider* settings, EntityCapsProvider* entityCapsProvider, FileTransferOverview* fileTransferOverview, ClientBlockListManager* clientBlockListManager, VCardManager* vcardManager); 52 RosterController(const JID& jid, XMPPRoster* xmppRoster, AvatarManager* avatarManager, MainWindowFactory* mainWindowFactory, NickManager* nickManager, NickResolver* nickResolver, PresenceOracle* presenceOracle, SubscriptionManager* subscriptionManager, EventController* eventController, UIEventStream* uiEventStream, IQRouter* iqRouter, SettingsProvider* settings, EntityCapsProvider* entityCapsProvider, FileTransferOverview* fileTransferOverview, ClientBlockListManager* clientBlockListManager, VCardManager* vcardManager);
51 ~RosterController(); 53 ~RosterController();
52 void showRosterWindow(); 54 void showRosterWindow();
53 void setJID(const JID& jid) { myJID_ = jid; } 55 void setJID(const JID& jid) { myJID_ = jid; }
54 MainWindow* getWindow() {return mainWindow_;} 56 MainWindow* getWindow() {return mainWindow_;}
55 boost::signal<void (StatusShow::Type, const std::string&)> onChangeStatusRequest; 57 boost::signal<void (StatusShow::Type, const std::string&)> onChangeStatusRequest;
diff --git a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
index c396e48..9320af1 100644
--- a/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
+++ b/Swift/Controllers/Roster/UnitTest/RosterControllerTest.cpp
@@ -1,8 +1,7 @@
1
2/* 1/*
3 * Copyright (c) 2010 Isode Limited. 2 * Copyright (c) 2010-2015 Isode Limited.
4 * All rights reserved. 3 * All rights reserved.
5 * See the COPYING file for more information. 4 * See the COPYING file for more information.
6 */ 5 */
7 6
8#include <cppunit/extensions/HelperMacros.h> 7#include <cppunit/extensions/HelperMacros.h>
@@ -26,15 +25,14 @@
26#include <Swiften/Presence/PresenceOracle.h> 25#include <Swiften/Presence/PresenceOracle.h>
27#include <Swiften/Presence/SubscriptionManager.h> 26#include <Swiften/Presence/SubscriptionManager.h>
28#include <Swiften/Queries/DummyIQChannel.h> 27#include <Swiften/Queries/DummyIQChannel.h>
29#include <Swiften/Queries/IQRouter.h> 28#include <Swiften/Queries/IQRouter.h>
30#include <Swiften/Roster/XMPPRosterImpl.h> 29#include <Swiften/Roster/XMPPRosterImpl.h>
30#include <Swiften/VCards/VCardManager.h>
31#include <Swiften/VCards/VCardMemoryStorage.h> 31#include <Swiften/VCards/VCardMemoryStorage.h>
32// #include <Swiften/Elements/Payload.h>
33// #include <Swiften/Elements/RosterItemPayload.h>
34// #include <Swiften/Elements/RosterPayload.h>
35 32
33#include <Swift/Controllers/FileTransfer/FileTransferOverview.h>
36#include <Swift/Controllers/Roster/ContactRosterItem.h> 34#include <Swift/Controllers/Roster/ContactRosterItem.h>
37#include <Swift/Controllers/Roster/GroupRosterItem.h> 35#include <Swift/Controllers/Roster/GroupRosterItem.h>
38#include <Swift/Controllers/Roster/Roster.h> 36#include <Swift/Controllers/Roster/Roster.h>
39#include <Swift/Controllers/Roster/RosterController.h> 37#include <Swift/Controllers/Roster/RosterController.h>
40#include <Swift/Controllers/Settings/DummySettingsProvider.h> 38#include <Swift/Controllers/Settings/DummySettingsProvider.h>
@@ -60,10 +58,11 @@ class RosterControllerTest : public CppUnit::TestFixture {
60 CPPUNIT_TEST(testSendRename); 58 CPPUNIT_TEST(testSendRename);
61 CPPUNIT_TEST(testPresence); 59 CPPUNIT_TEST(testPresence);
62 CPPUNIT_TEST(testHighestPresence); 60 CPPUNIT_TEST(testHighestPresence);
63 CPPUNIT_TEST(testNotHighestPresence); 61 CPPUNIT_TEST(testNotHighestPresence);
64 CPPUNIT_TEST(testUnavailablePresence); 62 CPPUNIT_TEST(testUnavailablePresence);
63 CPPUNIT_TEST(testRemoveResultsInUnavailablePresence);
65 CPPUNIT_TEST_SUITE_END(); 64 CPPUNIT_TEST_SUITE_END();
66 65
67 public: 66 public:
68 void setUp() { 67 void setUp() {
69 jid_ = JID("testjid@swift.im/swift"); 68 jid_ = JID("testjid@swift.im/swift");
@@ -73,11 +72,11 @@ class RosterControllerTest : public CppUnit::TestFixture {
73 mucRegistry_ = new MUCRegistry(); 72 mucRegistry_ = new MUCRegistry();
74 nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_); 73 nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_);
75 channel_ = new DummyIQChannel(); 74 channel_ = new DummyIQChannel();
76 router_ = new IQRouter(channel_); 75 router_ = new IQRouter(channel_);
77 stanzaChannel_ = new DummyStanzaChannel(); 76 stanzaChannel_ = new DummyStanzaChannel();
78 presenceOracle_ = new PresenceOracle(stanzaChannel_); 77 presenceOracle_ = new PresenceOracle(stanzaChannel_, xmppRoster_);
79 subscriptionManager_ = new SubscriptionManager(stanzaChannel_); 78 subscriptionManager_ = new SubscriptionManager(stanzaChannel_);
80 eventController_ = new EventController(); 79 eventController_ = new EventController();
81 uiEventStream_ = new UIEventStream(); 80 uiEventStream_ = new UIEventStream();
82 settings_ = new DummySettingsProvider(); 81 settings_ = new DummySettingsProvider();
83 nickManager_ = new DummyNickManager(); 82 nickManager_ = new DummyNickManager();
@@ -317,10 +316,33 @@ class RosterControllerTest : public CppUnit::TestFixture {
317 316
318 CPPUNIT_ASSERT_EQUAL(groups.size(), item.getGroups().size()); 317 CPPUNIT_ASSERT_EQUAL(groups.size(), item.getGroups().size());
319 assertVectorsEqual(groups, item.getGroups(), __LINE__); 318 assertVectorsEqual(groups, item.getGroups(), __LINE__);
320 } 319 }
321 320
321 void testRemoveResultsInUnavailablePresence() {
322 std::vector<std::string> groups;
323 groups.push_back("testGroup1");
324 JID from("test@testdomain.com");
325 xmppRoster_->addContact(from, "name", groups, RosterItemPayload::Both);
326 Presence::ref lowPresence(new Presence());
327 lowPresence->setFrom(withResource(from, "bob"));
328 lowPresence->setPriority(2);
329 lowPresence->setStatus("Not here");
330 Presence::ref highPresence(new Presence());
331 highPresence->setFrom(withResource(from, "bert"));
332 highPresence->setPriority(10);
333 highPresence->setStatus("So totally here");
334 stanzaChannel_->onPresenceReceived(highPresence);
335 stanzaChannel_->onPresenceReceived(lowPresence);
336
337 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), presenceOracle_->getAllPresence("test@testdomain.com").size());
338
339 xmppRoster_->onJIDRemoved(JID("test@testdomain.com"));
340 CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), presenceOracle_->getAllPresence("test@testdomain.com").size());
341 CPPUNIT_ASSERT_EQUAL(Presence::Unavailable, presenceOracle_->getAllPresence("test@testdomain.com")[0]->getType());
342 }
343
322 void assertVectorsEqual(const std::vector<std::string>& v1, const std::vector<std::string>& v2, int line) { 344 void assertVectorsEqual(const std::vector<std::string>& v1, const std::vector<std::string>& v2, int line) {
323 foreach (const std::string& entry, v1) { 345 foreach (const std::string& entry, v1) {
324 if (std::find(v2.begin(), v2.end(), entry) == v2.end()) { 346 if (std::find(v2.begin(), v2.end(), entry) == v2.end()) {
325 std::stringstream stream; 347 std::stringstream stream;
326 stream << "Couldn't find " << entry << " in v2 (line " << line << ")"; 348 stream << "Couldn't find " << entry << " in v2 (line " << line << ")";