diff options
| -rw-r--r-- | Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp | 37 | ||||
| -rw-r--r-- | Swiften/Avatars/VCardUpdateAvatarManager.cpp | 7 | ||||
| -rw-r--r-- | Swiften/Avatars/VCardUpdateAvatarManager.h | 1 | ||||
| -rw-r--r-- | Swiften/Client/Client.cpp | 10 | ||||
| -rw-r--r-- | Swiften/Client/Client.h | 1 | ||||
| -rw-r--r-- | Swiften/Client/DummyStanzaChannel.h | 10 | ||||
| -rw-r--r-- | Swiften/Client/StanzaChannel.h | 1 |
7 files changed, 40 insertions, 27 deletions
diff --git a/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp b/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp index e3d9c58..ce100ee 100644 --- a/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp +++ b/Swiften/Avatars/UnitTest/VCardUpdateAvatarManagerTest.cpp | |||
| @@ -25,26 +25,18 @@ class VCardUpdateAvatarManagerTest : public CppUnit::TestFixture { | |||
| 25 | CPPUNIT_TEST_SUITE(VCardUpdateAvatarManagerTest); | 25 | CPPUNIT_TEST_SUITE(VCardUpdateAvatarManagerTest); |
| 26 | CPPUNIT_TEST(testUpdate_NewHashNewVCardRequestsVCard); | 26 | CPPUNIT_TEST(testUpdate_NewHashNewVCardRequestsVCard); |
| 27 | CPPUNIT_TEST(testUpdate_NewHashStoresAvatarAndEmitsNotificationOnVCardReceive); | 27 | CPPUNIT_TEST(testUpdate_NewHashStoresAvatarAndEmitsNotificationOnVCardReceive); |
| 28 | CPPUNIT_TEST(testUpdate_KnownHash); | 28 | CPPUNIT_TEST(testUpdate_KnownHash); |
| 29 | CPPUNIT_TEST(testUpdate_KnownHashFromDifferentUserDoesNotRequestVCardButTriggersNotification); | 29 | CPPUNIT_TEST(testUpdate_KnownHashFromDifferentUserDoesNotRequestVCardButTriggersNotification); |
| 30 | /*& | 30 | CPPUNIT_TEST(testStanzaChannelReset); |
| 31 | CPPUNIT_TEST(testUpdate_UpdateNewHashAlreadyHaveAvatar); | ||
| 32 | CPPUNIT_TEST(testUpdate_UpdateNewHashFromMUC); | ||
| 33 | CPPUNIT_TEST(testUpdate_UpdateSameHash);*/ | ||
| 34 | //CPPUNIT_TEST(testUpdate_UpdateWithError); | ||
| 35 | /* | ||
| 36 | CPPUNIT_TEST(testUpdate_UpdateNewHashSameThanOtherUser); | ||
| 37 | CPPUNIT_TEST(testReceiveVCard); | ||
| 38 | CPPUNIT_TEST(testGetAvatarPath); | ||
| 39 | CPPUNIT_TEST(testGetAvatarPathFromMUC);*/ | ||
| 40 | CPPUNIT_TEST_SUITE_END(); | 31 | CPPUNIT_TEST_SUITE_END(); |
| 41 | 32 | ||
| 42 | public: | 33 | public: |
| 43 | void setUp() { | 34 | void setUp() { |
| 44 | ownJID = JID("foo@fum.com/bum"); | 35 | ownJID = JID("foo@fum.com/bum"); |
| 45 | stanzaChannel = new DummyStanzaChannel(); | 36 | stanzaChannel = new DummyStanzaChannel(); |
| 37 | stanzaChannel->setAvailable(true); | ||
| 46 | iqRouter = new IQRouter(stanzaChannel); | 38 | iqRouter = new IQRouter(stanzaChannel); |
| 47 | mucRegistry = new DummyMUCRegistry(); | 39 | mucRegistry = new DummyMUCRegistry(); |
| 48 | avatarStorage = new AvatarMemoryStorage(); | 40 | avatarStorage = new AvatarMemoryStorage(); |
| 49 | vcardStorage = new VCardMemoryStorage(); | 41 | vcardStorage = new VCardMemoryStorage(); |
| 50 | vcardManager = new VCardManager(ownJID, iqRouter, vcardStorage); | 42 | vcardManager = new VCardManager(ownJID, iqRouter, vcardStorage); |
| @@ -109,26 +101,25 @@ class VCardUpdateAvatarManagerTest : public CppUnit::TestFixture { | |||
| 109 | CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(changes.size())); | 101 | CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(changes.size())); |
| 110 | CPPUNIT_ASSERT_EQUAL(user2.toBare(), changes[0].first); | 102 | CPPUNIT_ASSERT_EQUAL(user2.toBare(), changes[0].first); |
| 111 | CPPUNIT_ASSERT_EQUAL(avatar1Hash, changes[0].second); | 103 | CPPUNIT_ASSERT_EQUAL(avatar1Hash, changes[0].second); |
| 112 | } | 104 | } |
| 113 | 105 | ||
| 114 | /* | 106 | void testStanzaChannelReset() { |
| 115 | void testUpdate_UpdateNewHashFromMUC() { | ||
| 116 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); | 107 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); |
| 117 | } | 108 | stanzaChannel->onPresenceReceived(createPresenceWithPhotoHash(user1, avatar1Hash)); |
| 118 | 109 | stanzaChannel->onIQReceived(createVCardResult(avatar1)); | |
| 119 | */ | 110 | changes.clear(); |
| 120 | 111 | stanzaChannel->sentStanzas.clear(); | |
| 121 | /*void testUpdate_UpdateWithError() { | ||
| 122 | std::auto_ptr<VCardUpdateAvatarManager> testling = createManager(); | ||
| 123 | boost::shared_ptr<Presence> update = createPresenceWithPhotoHash(); | ||
| 124 | update->addPayload(boost::shared_ptr<ErrorPayload>(new ErrorPayload())); | ||
| 125 | stanzaChannel_->onPresenceReceived(update); | ||
| 126 | 112 | ||
| 127 | CPPUNIT_ASSERT_EQUAL(0, static_cast<int>(stanzaChannel_->sentStanzas.size())); | 113 | stanzaChannel->setAvailable(false); |
| 128 | }*/ | 114 | stanzaChannel->setAvailable(true); |
| 115 | stanzaChannel->onPresenceReceived(createPresenceWithPhotoHash(user1, avatar1Hash)); | ||
| 129 | 116 | ||
| 117 | CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(changes.size())); | ||
| 118 | CPPUNIT_ASSERT_EQUAL(user1.toBare(), changes[0].first); | ||
| 119 | CPPUNIT_ASSERT_EQUAL(avatar1Hash, changes[0].second); | ||
| 120 | } | ||
| 130 | 121 | ||
| 131 | private: | 122 | private: |
| 132 | std::auto_ptr<VCardUpdateAvatarManager> createManager() { | 123 | std::auto_ptr<VCardUpdateAvatarManager> createManager() { |
| 133 | std::auto_ptr<VCardUpdateAvatarManager> result(new VCardUpdateAvatarManager(vcardManager, stanzaChannel, avatarStorage, mucRegistry)); | 124 | std::auto_ptr<VCardUpdateAvatarManager> result(new VCardUpdateAvatarManager(vcardManager, stanzaChannel, avatarStorage, mucRegistry)); |
| 134 | result->onAvatarChanged.connect(boost::bind(&VCardUpdateAvatarManagerTest::handleAvatarChanged, this, _1, _2)); | 125 | result->onAvatarChanged.connect(boost::bind(&VCardUpdateAvatarManagerTest::handleAvatarChanged, this, _1, _2)); |
diff --git a/Swiften/Avatars/VCardUpdateAvatarManager.cpp b/Swiften/Avatars/VCardUpdateAvatarManager.cpp index 80d7730..dbc0b9b 100644 --- a/Swiften/Avatars/VCardUpdateAvatarManager.cpp +++ b/Swiften/Avatars/VCardUpdateAvatarManager.cpp | |||
| @@ -19,10 +19,11 @@ | |||
| 19 | 19 | ||
| 20 | namespace Swift { | 20 | namespace Swift { |
| 21 | 21 | ||
| 22 | VCardUpdateAvatarManager::VCardUpdateAvatarManager(VCardManager* vcardManager, StanzaChannel* stanzaChannel, AvatarStorage* avatarStorage, MUCRegistry* mucRegistry) : vcardManager_(vcardManager), stanzaChannel_(stanzaChannel), avatarStorage_(avatarStorage), mucRegistry_(mucRegistry) { | 22 | VCardUpdateAvatarManager::VCardUpdateAvatarManager(VCardManager* vcardManager, StanzaChannel* stanzaChannel, AvatarStorage* avatarStorage, MUCRegistry* mucRegistry) : vcardManager_(vcardManager), stanzaChannel_(stanzaChannel), avatarStorage_(avatarStorage), mucRegistry_(mucRegistry) { |
| 23 | stanzaChannel->onPresenceReceived.connect(boost::bind(&VCardUpdateAvatarManager::handlePresenceReceived, this, _1)); | 23 | stanzaChannel->onPresenceReceived.connect(boost::bind(&VCardUpdateAvatarManager::handlePresenceReceived, this, _1)); |
| 24 | stanzaChannel->onAvailableChanged.connect(boost::bind(&VCardUpdateAvatarManager::handleStanzaChannelAvailableChanged, this, _1)); | ||
| 24 | vcardManager_->onVCardChanged.connect(boost::bind(&VCardUpdateAvatarManager::handleVCardChanged, this, _1, _2)); | 25 | vcardManager_->onVCardChanged.connect(boost::bind(&VCardUpdateAvatarManager::handleVCardChanged, this, _1, _2)); |
| 25 | } | 26 | } |
| 26 | 27 | ||
| 27 | VCardUpdateAvatarManager::~VCardUpdateAvatarManager() { | 28 | VCardUpdateAvatarManager::~VCardUpdateAvatarManager() { |
| 28 | 29 | ||
| @@ -90,7 +91,13 @@ boost::filesystem::path VCardUpdateAvatarManager::getAvatarPath(const JID& jid) | |||
| 90 | JID VCardUpdateAvatarManager::getAvatarJID(const JID& jid) const { | 91 | JID VCardUpdateAvatarManager::getAvatarJID(const JID& jid) const { |
| 91 | JID bareFrom = jid.toBare(); | 92 | JID bareFrom = jid.toBare(); |
| 92 | return (mucRegistry_ && mucRegistry_->isMUC(bareFrom)) ? jid : bareFrom; | 93 | return (mucRegistry_ && mucRegistry_->isMUC(bareFrom)) ? jid : bareFrom; |
| 93 | } | 94 | } |
| 94 | 95 | ||
| 96 | void VCardUpdateAvatarManager::handleStanzaChannelAvailableChanged(bool available) { | ||
| 97 | if (available) { | ||
| 98 | avatarHashes_.clear(); | ||
| 99 | } | ||
| 100 | } | ||
| 101 | |||
| 95 | 102 | ||
| 96 | } | 103 | } |
diff --git a/Swiften/Avatars/VCardUpdateAvatarManager.h b/Swiften/Avatars/VCardUpdateAvatarManager.h index 16c0ca3..e29db1c 100644 --- a/Swiften/Avatars/VCardUpdateAvatarManager.h +++ b/Swiften/Avatars/VCardUpdateAvatarManager.h | |||
| @@ -33,10 +33,11 @@ namespace Swift { | |||
| 33 | public: | 33 | public: |
| 34 | boost::signal<void (const JID&, const String& /*hash*/)> onAvatarChanged; | 34 | boost::signal<void (const JID&, const String& /*hash*/)> onAvatarChanged; |
| 35 | 35 | ||
| 36 | private: | 36 | private: |
| 37 | void handlePresenceReceived(boost::shared_ptr<Presence>); | 37 | void handlePresenceReceived(boost::shared_ptr<Presence>); |
| 38 | void handleStanzaChannelAvailableChanged(bool); | ||
| 38 | void handleVCardChanged(const JID& from, VCard::ref); | 39 | void handleVCardChanged(const JID& from, VCard::ref); |
| 39 | void setAvatarHash(const JID& from, const String& hash); | 40 | void setAvatarHash(const JID& from, const String& hash); |
| 40 | JID getAvatarJID(const JID& o) const; | 41 | JID getAvatarJID(const JID& o) const; |
| 41 | String getAvatarHash(const JID&) const; | 42 | String getAvatarHash(const JID&) const; |
| 42 | 43 | ||
diff --git a/Swiften/Client/Client.cpp b/Swiften/Client/Client.cpp index 2406b0f..bf651cc 100644 --- a/Swiften/Client/Client.cpp +++ b/Swiften/Client/Client.cpp | |||
| @@ -35,11 +35,11 @@ Client::~Client() { | |||
| 35 | delete timerFactory_; | 35 | delete timerFactory_; |
| 36 | delete connectionFactory_; | 36 | delete connectionFactory_; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | bool Client::isAvailable() { | 39 | bool Client::isAvailable() { |
| 40 | return session_; | 40 | return session_ && session_->getState() == ClientSession::Initialized; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | void Client::connect() { | 43 | void Client::connect() { |
| 44 | connect(jid_.getDomain()); | 44 | connect(jid_.getDomain()); |
| 45 | } | 45 | } |
| @@ -78,11 +78,11 @@ void Client::handleConnectorFinished(boost::shared_ptr<Connection> connection, C | |||
| 78 | sessionStream_->onDataRead.connect(boost::bind(&Client::handleDataRead, this, _1)); | 78 | sessionStream_->onDataRead.connect(boost::bind(&Client::handleDataRead, this, _1)); |
| 79 | sessionStream_->onDataWritten.connect(boost::bind(&Client::handleDataWritten, this, _1)); | 79 | sessionStream_->onDataWritten.connect(boost::bind(&Client::handleDataWritten, this, _1)); |
| 80 | sessionStream_->initialize(); | 80 | sessionStream_->initialize(); |
| 81 | 81 | ||
| 82 | session_ = ClientSession::create(jid_, sessionStream_); | 82 | session_ = ClientSession::create(jid_, sessionStream_); |
| 83 | session_->onInitialized.connect(boost::bind(boost::ref(onConnected))); | 83 | session_->onInitialized.connect(boost::bind(&Client::handleSessionInitialized, this)); |
| 84 | session_->onStanzaAcked.connect(boost::bind(&Client::handleStanzaAcked, this, _1)); | 84 | session_->onStanzaAcked.connect(boost::bind(&Client::handleStanzaAcked, this, _1)); |
| 85 | session_->onFinished.connect(boost::bind(&Client::handleSessionFinished, this, _1)); | 85 | session_->onFinished.connect(boost::bind(&Client::handleSessionFinished, this, _1)); |
| 86 | session_->onNeedCredentials.connect(boost::bind(&Client::handleNeedCredentials, this)); | 86 | session_->onNeedCredentials.connect(boost::bind(&Client::handleNeedCredentials, this)); |
| 87 | session_->onStanzaReceived.connect(boost::bind(&Client::handleStanza, this, _1)); | 87 | session_->onStanzaReceived.connect(boost::bind(&Client::handleStanza, this, _1)); |
| 88 | session_->start(); | 88 | session_->start(); |
| @@ -160,10 +160,11 @@ void Client::setCertificate(const String& certificate) { | |||
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | void Client::handleSessionFinished(boost::shared_ptr<Error> error) { | 162 | void Client::handleSessionFinished(boost::shared_ptr<Error> error) { |
| 163 | session_.reset(); | 163 | session_.reset(); |
| 164 | closeConnection(); | 164 | closeConnection(); |
| 165 | onAvailableChanged(false); | ||
| 165 | if (error) { | 166 | if (error) { |
| 166 | ClientError clientError; | 167 | ClientError clientError; |
| 167 | if (boost::shared_ptr<ClientSession::Error> actualError = boost::dynamic_pointer_cast<ClientSession::Error>(error)) { | 168 | if (boost::shared_ptr<ClientSession::Error> actualError = boost::dynamic_pointer_cast<ClientSession::Error>(error)) { |
| 168 | switch(actualError->type) { | 169 | switch(actualError->type) { |
| 169 | case ClientSession::Error::AuthenticationFailedError: | 170 | case ClientSession::Error::AuthenticationFailedError: |
| @@ -240,6 +241,11 @@ void Client::handleDataWritten(const String& data) { | |||
| 240 | 241 | ||
| 241 | void Client::handleStanzaAcked(boost::shared_ptr<Stanza> stanza) { | 242 | void Client::handleStanzaAcked(boost::shared_ptr<Stanza> stanza) { |
| 242 | onStanzaAcked(stanza); | 243 | onStanzaAcked(stanza); |
| 243 | } | 244 | } |
| 244 | 245 | ||
| 246 | void Client::handleSessionInitialized() { | ||
| 247 | onConnected(); | ||
| 248 | onAvailableChanged(true); | ||
| 249 | } | ||
| 250 | |||
| 245 | } | 251 | } |
diff --git a/Swiften/Client/Client.h b/Swiften/Client/Client.h index 57228ef..1023108 100644 --- a/Swiften/Client/Client.h +++ b/Swiften/Client/Client.h | |||
| @@ -56,10 +56,11 @@ namespace Swift { | |||
| 56 | boost::signal<void (const String&)> onDataRead; | 56 | boost::signal<void (const String&)> onDataRead; |
| 57 | boost::signal<void (const String&)> onDataWritten; | 57 | boost::signal<void (const String&)> onDataWritten; |
| 58 | 58 | ||
| 59 | private: | 59 | private: |
| 60 | void handleConnectorFinished(boost::shared_ptr<Connection>, Connector::ref); | 60 | void handleConnectorFinished(boost::shared_ptr<Connection>, Connector::ref); |
| 61 | void handleSessionInitialized(); | ||
| 61 | void send(boost::shared_ptr<Stanza>); | 62 | void send(boost::shared_ptr<Stanza>); |
| 62 | virtual String getNewIQID(); | 63 | virtual String getNewIQID(); |
| 63 | void handleStanza(boost::shared_ptr<Stanza>); | 64 | void handleStanza(boost::shared_ptr<Stanza>); |
| 64 | void handleSessionFinished(boost::shared_ptr<Error>); | 65 | void handleSessionFinished(boost::shared_ptr<Error>); |
| 65 | void handleNeedCredentials(); | 66 | void handleNeedCredentials(); |
diff --git a/Swiften/Client/DummyStanzaChannel.h b/Swiften/Client/DummyStanzaChannel.h index d43d68a..05066a8 100644 --- a/Swiften/Client/DummyStanzaChannel.h +++ b/Swiften/Client/DummyStanzaChannel.h | |||
| @@ -11,16 +11,21 @@ | |||
| 11 | #include "Swiften/Client/StanzaChannel.h" | 11 | #include "Swiften/Client/StanzaChannel.h" |
| 12 | 12 | ||
| 13 | namespace Swift { | 13 | namespace Swift { |
| 14 | class DummyStanzaChannel : public StanzaChannel { | 14 | class DummyStanzaChannel : public StanzaChannel { |
| 15 | public: | 15 | public: |
| 16 | DummyStanzaChannel() {} | 16 | DummyStanzaChannel() : available_(true) {} |
| 17 | 17 | ||
| 18 | virtual void sendStanza(boost::shared_ptr<Stanza> stanza) { | 18 | virtual void sendStanza(boost::shared_ptr<Stanza> stanza) { |
| 19 | sentStanzas.push_back(stanza); | 19 | sentStanzas.push_back(stanza); |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | void setAvailable(bool available) { | ||
| 23 | available_ = available; | ||
| 24 | onAvailableChanged(available); | ||
| 25 | } | ||
| 26 | |||
| 22 | virtual void sendIQ(boost::shared_ptr<IQ> iq) { | 27 | virtual void sendIQ(boost::shared_ptr<IQ> iq) { |
| 23 | sentStanzas.push_back(iq); | 28 | sentStanzas.push_back(iq); |
| 24 | } | 29 | } |
| 25 | 30 | ||
| 26 | virtual void sendMessage(boost::shared_ptr<Message> message) { | 31 | virtual void sendMessage(boost::shared_ptr<Message> message) { |
| @@ -34,11 +39,11 @@ namespace Swift { | |||
| 34 | virtual String getNewIQID() { | 39 | virtual String getNewIQID() { |
| 35 | return "test-id"; | 40 | return "test-id"; |
| 36 | } | 41 | } |
| 37 | 42 | ||
| 38 | virtual bool isAvailable() { | 43 | virtual bool isAvailable() { |
| 39 | return true; | 44 | return available_; |
| 40 | } | 45 | } |
| 41 | 46 | ||
| 42 | virtual bool getStreamManagementEnabled() const { | 47 | virtual bool getStreamManagementEnabled() const { |
| 43 | return false; | 48 | return false; |
| 44 | } | 49 | } |
| @@ -47,7 +52,8 @@ namespace Swift { | |||
| 47 | boost::shared_ptr<IQ> iqStanza = boost::dynamic_pointer_cast<IQ>(sentStanzas[index]); | 52 | boost::shared_ptr<IQ> iqStanza = boost::dynamic_pointer_cast<IQ>(sentStanzas[index]); |
| 48 | return iqStanza && iqStanza->getType() == type && iqStanza->getTo() == jid && iqStanza->getPayload<T>(); | 53 | return iqStanza && iqStanza->getType() == type && iqStanza->getTo() == jid && iqStanza->getPayload<T>(); |
| 49 | } | 54 | } |
| 50 | 55 | ||
| 51 | std::vector<boost::shared_ptr<Stanza> > sentStanzas; | 56 | std::vector<boost::shared_ptr<Stanza> > sentStanzas; |
| 57 | bool available_; | ||
| 52 | }; | 58 | }; |
| 53 | } | 59 | } |
diff --git a/Swiften/Client/StanzaChannel.h b/Swiften/Client/StanzaChannel.h index 09a6db3..f7bb26a 100644 --- a/Swiften/Client/StanzaChannel.h +++ b/Swiften/Client/StanzaChannel.h | |||
| @@ -19,10 +19,11 @@ namespace Swift { | |||
| 19 | virtual void sendMessage(boost::shared_ptr<Message>) = 0; | 19 | virtual void sendMessage(boost::shared_ptr<Message>) = 0; |
| 20 | virtual void sendPresence(boost::shared_ptr<Presence>) = 0; | 20 | virtual void sendPresence(boost::shared_ptr<Presence>) = 0; |
| 21 | virtual bool isAvailable() = 0; | 21 | virtual bool isAvailable() = 0; |
| 22 | virtual bool getStreamManagementEnabled() const = 0; | 22 | virtual bool getStreamManagementEnabled() const = 0; |
| 23 | 23 | ||
| 24 | boost::signal<void (bool /* isAvailable */)> onAvailableChanged; | ||
| 24 | boost::signal<void (boost::shared_ptr<Message>)> onMessageReceived; | 25 | boost::signal<void (boost::shared_ptr<Message>)> onMessageReceived; |
| 25 | boost::signal<void (boost::shared_ptr<Presence>) > onPresenceReceived; | 26 | boost::signal<void (boost::shared_ptr<Presence>) > onPresenceReceived; |
| 26 | boost::signal<void (boost::shared_ptr<Stanza>)> onStanzaAcked; | 27 | boost::signal<void (boost::shared_ptr<Stanza>)> onStanzaAcked; |
| 27 | }; | 28 | }; |
| 28 | } | 29 | } |
Swift