From bc6a510af449b6e383a11fc20c9859b8bcac247c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Fri, 10 Sep 2010 15:16:00 +0200
Subject: Make AvatarManager abstract


diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
index 4b95948..ffd5185 100644
--- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
+++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp
@@ -18,7 +18,7 @@
 #include "Swift/Controllers/EventController.h"
 #include "Swift/Controllers/Chat/MUCController.h"
 #include "Swiften/Presence/PresenceSender.h"
-#include "Swiften/Avatars/AvatarManager.h"
+#include "Swiften/Avatars/NullAvatarManager.h"
 #include "Swiften/Avatars/AvatarMemoryStorage.h"
 #include "Swiften/VCards/VCardManager.h"
 #include "Swiften/VCards/VCardMemoryStorage.h"
@@ -70,18 +70,12 @@ public:
 		mocks_->ExpectCall(chatListWindowFactory_, ChatListWindowFactory::createWindow).With(uiEventStream_).Return(NULL);
 		manager_ = new ChatsManager(jid_, stanzaChannel_, iqRouter_, eventController_, chatWindowFactory_, nickResolver_, presenceOracle_, serverDiscoInfo_, presenceSender_, uiEventStream_, chatListWindowFactory_, true, NULL, mucRegistry_);
 
-		vcardStorage_ = new VCardMemoryStorage();
-		vcardManager_ = new VCardManager(jid_, iqRouter_, vcardStorage_);
-		avatarStorage_ = new AvatarMemoryStorage();
-		avatarManager_ = new AvatarManager(vcardManager_, stanzaChannel_, avatarStorage_, NULL);
+		avatarManager_ = new NullAvatarManager();
 		manager_->setAvatarManager(avatarManager_);
 	};
 	
 	void tearDown() {
 		delete avatarManager_;
-		delete avatarStorage_;
-		delete vcardManager_;
-		delete vcardStorage_;
 		delete manager_;
 		delete presenceSender_;
 		delete presenceOracle_;
@@ -315,9 +309,6 @@ private:
 	ChatWindowFactory* chatWindowFactory_;
 	NickResolver* nickResolver_;
 	PresenceOracle* presenceOracle_;
-	VCardStorage* vcardStorage_;
-	VCardManager* vcardManager_;
-	AvatarStorage* avatarStorage_;
 	AvatarManager* avatarManager_;
 	boost::shared_ptr<DiscoInfo> serverDiscoInfo_;
 	boost::shared_ptr<XMPPRoster> xmppRoster_;
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index f3bd6d5..afffa59 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -54,7 +54,7 @@
 #include "Swiften/Queries/Requests/GetDiscoInfoRequest.h"
 #include "Swiften/Queries/Requests/GetVCardRequest.h"
 #include "Swiften/Avatars/AvatarStorage.h"
-#include "Swiften/Avatars/AvatarManager.h"
+#include "Swiften/Avatars/AvatarManagerImpl.h"
 #include "Swiften/Disco/CapsFileStorage.h"
 #include "Swiften/Disco/CapsManager.h"
 #include "Swiften/Disco/EntityCapsManager.h"
@@ -243,7 +243,7 @@ void MainController::handleConnected() {
 		mucRegistry_ = new MUCRegistry();
 		vcardManager_ = new VCardManager(jid_, client_, getVCardStorageForProfile(jid_));
 		vcardManager_->onVCardChanged.connect(boost::bind(&MainController::handleVCardReceived, this, _1, _2));
-		avatarManager_ = new AvatarManager(vcardManager_, client_, avatarStorage_, mucRegistry_);
+		avatarManager_ = new AvatarManagerImpl(vcardManager_, client_, avatarStorage_, mucRegistry_);
 		capsManager_ = new CapsManager(capsStorage_, client_, client_);
 		entityCapsManager_ = new EntityCapsManager(capsManager_, client_);
 
diff --git a/Swift/Controllers/RosterController.h b/Swift/Controllers/RosterController.h
index ba8d4e2..389df44 100644
--- a/Swift/Controllers/RosterController.h
+++ b/Swift/Controllers/RosterController.h
@@ -10,6 +10,7 @@
 #include "Swiften/JID/JID.h"
 #include "Swiften/Base/String.h"
 #include "Swiften/Elements/Presence.h"
+#include "Swiften/Elements/ErrorPayload.h"
 #include "Swiften/Elements/RosterPayload.h"
 #include "Swiften/Avatars/AvatarManager.h"
 #include "Swift/Controllers/UIEvents/UIEvent.h"
diff --git a/Swift/Controllers/UnitTest/RosterControllerTest.cpp b/Swift/Controllers/UnitTest/RosterControllerTest.cpp
index 23fca2c..fdcc44f 100644
--- a/Swift/Controllers/UnitTest/RosterControllerTest.cpp
+++ b/Swift/Controllers/UnitTest/RosterControllerTest.cpp
@@ -20,6 +20,7 @@
 #include "Swiften/Roster/Roster.h"
 #include "Swiften/Roster/GroupRosterItem.h"
 #include "Swiften/Roster/ContactRosterItem.h"
+#include "Swiften/Avatars/NullAvatarManager.h"
 #include "Swift/Controllers/EventController.h"
 #include "Swiften/Presence/PresenceOracle.h"
 #include "Swift/Controllers/NickResolver.h"
@@ -43,7 +44,7 @@ class RosterControllerTest : public CppUnit::TestFixture
 		void setUp() {
 			jid_ = JID("testjid@swift.im/swift");
 			xmppRoster_ = boost::shared_ptr<XMPPRoster>(new XMPPRoster());
-			avatarManager_ = NULL;//new AvatarManager();
+			avatarManager_ = new NullAvatarManager();
 			mainWindowFactory_ = new MockMainWindowFactory();
 			mucRegistry_ = new MUCRegistry();
 			nickResolver_ = new NickResolver(jid_.toBare(), xmppRoster_, NULL, mucRegistry_);
diff --git a/Swiften/Avatars/AvatarManager.cpp b/Swiften/Avatars/AvatarManager.cpp
index 6ad39fb..a2b7200 100644
--- a/Swiften/Avatars/AvatarManager.cpp
+++ b/Swiften/Avatars/AvatarManager.cpp
@@ -6,39 +6,9 @@
 
 #include "Swiften/Avatars/AvatarManager.h"
 
-#include <boost/bind.hpp>
-
-#include "Swiften/Avatars/VCardUpdateAvatarManager.h"
-#include "Swiften/Avatars/VCardAvatarManager.h"
-#include "Swiften/Avatars/AvatarStorage.h"
-
 namespace Swift {
 
-AvatarManager::AvatarManager(VCardManager* vcardManager, StanzaChannel* stanzaChannel, AvatarStorage* avatarStorage, MUCRegistry* mucRegistry) : avatarStorage(avatarStorage) {
-	vcardUpdateAvatarManager = new VCardUpdateAvatarManager(vcardManager, stanzaChannel, avatarStorage, mucRegistry);
-	combinedAvatarProvider.addProvider(vcardUpdateAvatarManager);
-
-	vcardAvatarManager = new VCardAvatarManager(vcardManager, avatarStorage, mucRegistry);
-	combinedAvatarProvider.addProvider(vcardAvatarManager);
-
-	combinedAvatarProvider.onAvatarChanged.connect(boost::ref(onAvatarChanged));
-}
-
 AvatarManager::~AvatarManager() {
-	combinedAvatarProvider.removeProvider(vcardAvatarManager);
-	delete vcardAvatarManager;
-	combinedAvatarProvider.removeProvider(vcardUpdateAvatarManager);
-	delete vcardUpdateAvatarManager;
-}
-
-boost::filesystem::path AvatarManager::getAvatarPath(const JID& jid) const {
-	String hash = combinedAvatarProvider.getAvatarHash(jid);
-	if (!hash.isEmpty()) {
-		std::cout << "getAvatar " << jid << " " << avatarStorage->getAvatarPath(hash) << std::endl;
-		return avatarStorage->getAvatarPath(hash);
-	}
-	return boost::filesystem::path();
 }
 
-
 }
diff --git a/Swiften/Avatars/AvatarManager.h b/Swiften/Avatars/AvatarManager.h
index 0309b20..74e58f7 100644
--- a/Swiften/Avatars/AvatarManager.h
+++ b/Swiften/Avatars/AvatarManager.h
@@ -7,39 +7,18 @@
 #pragma once
 
 #include <boost/filesystem.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/optional.hpp>
-#include <map>
 
 #include "Swiften/Base/boost_bsignals.h"
-#include "Swiften/JID/JID.h"
-#include "Swiften/Elements/Presence.h"
-#include "Swiften/Elements/VCard.h"
-#include "Swiften/Elements/ErrorPayload.h"
-#include "Swiften/Avatars/CombinedAvatarProvider.h"
 
 namespace Swift {
-	class MUCRegistry;
-	class AvatarStorage;
-	class StanzaChannel;
-	class VCardManager;
-	class VCardUpdateAvatarManager;
-	class VCardAvatarManager;
+	class JID;
 
 	class AvatarManager {
 		public:
-			AvatarManager(VCardManager*, StanzaChannel*, AvatarStorage*, MUCRegistry* = NULL);
 			virtual ~AvatarManager();
 
-			virtual boost::filesystem::path getAvatarPath(const JID&) const;
+			virtual boost::filesystem::path getAvatarPath(const JID&) const = 0;
 
-		public:
 			boost::signal<void (const JID&)> onAvatarChanged;
-
-		private:
-			CombinedAvatarProvider combinedAvatarProvider;
-			AvatarStorage* avatarStorage;
-			VCardUpdateAvatarManager* vcardUpdateAvatarManager;
-			VCardAvatarManager* vcardAvatarManager;
 	};
 }
diff --git a/Swiften/Avatars/AvatarManagerImpl.cpp b/Swiften/Avatars/AvatarManagerImpl.cpp
new file mode 100644
index 0000000..384994b
--- /dev/null
+++ b/Swiften/Avatars/AvatarManagerImpl.cpp
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "Swiften/Avatars/AvatarManagerImpl.h"
+
+#include <boost/bind.hpp>
+
+#include "Swiften/Avatars/VCardUpdateAvatarManager.h"
+#include "Swiften/Avatars/VCardAvatarManager.h"
+#include "Swiften/Avatars/AvatarStorage.h"
+
+namespace Swift {
+
+AvatarManagerImpl::AvatarManagerImpl(VCardManager* vcardManager, StanzaChannel* stanzaChannel, AvatarStorage* avatarStorage, MUCRegistry* mucRegistry) : avatarStorage(avatarStorage) {
+	vcardUpdateAvatarManager = new VCardUpdateAvatarManager(vcardManager, stanzaChannel, avatarStorage, mucRegistry);
+	combinedAvatarProvider.addProvider(vcardUpdateAvatarManager);
+
+	vcardAvatarManager = new VCardAvatarManager(vcardManager, avatarStorage, mucRegistry);
+	combinedAvatarProvider.addProvider(vcardAvatarManager);
+
+	combinedAvatarProvider.onAvatarChanged.connect(boost::ref(onAvatarChanged));
+}
+
+AvatarManagerImpl::~AvatarManagerImpl() {
+	combinedAvatarProvider.removeProvider(vcardAvatarManager);
+	delete vcardAvatarManager;
+	combinedAvatarProvider.removeProvider(vcardUpdateAvatarManager);
+	delete vcardUpdateAvatarManager;
+}
+
+boost::filesystem::path AvatarManagerImpl::getAvatarPath(const JID& jid) const {
+	String hash = combinedAvatarProvider.getAvatarHash(jid);
+	if (!hash.isEmpty()) {
+		return avatarStorage->getAvatarPath(hash);
+	}
+	return boost::filesystem::path();
+}
+
+
+}
diff --git a/Swiften/Avatars/AvatarManagerImpl.h b/Swiften/Avatars/AvatarManagerImpl.h
new file mode 100644
index 0000000..f533160
--- /dev/null
+++ b/Swiften/Avatars/AvatarManagerImpl.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <boost/filesystem.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/optional.hpp>
+#include <map>
+
+#include "Swiften/Avatars/AvatarManager.h"
+#include "Swiften/Base/boost_bsignals.h"
+#include "Swiften/JID/JID.h"
+#include "Swiften/Elements/Presence.h"
+#include "Swiften/Elements/VCard.h"
+#include "Swiften/Elements/ErrorPayload.h"
+#include "Swiften/Avatars/CombinedAvatarProvider.h"
+
+namespace Swift {
+	class MUCRegistry;
+	class AvatarStorage;
+	class StanzaChannel;
+	class VCardManager;
+	class VCardUpdateAvatarManager;
+	class VCardAvatarManager;
+
+	class AvatarManagerImpl : public AvatarManager {
+		public:
+			AvatarManagerImpl(VCardManager*, StanzaChannel*, AvatarStorage*, MUCRegistry* = NULL);
+			virtual ~AvatarManagerImpl();
+
+			virtual boost::filesystem::path getAvatarPath(const JID&) const;
+
+		private:
+			CombinedAvatarProvider combinedAvatarProvider;
+			AvatarStorage* avatarStorage;
+			VCardUpdateAvatarManager* vcardUpdateAvatarManager;
+			VCardAvatarManager* vcardAvatarManager;
+	};
+}
diff --git a/Swiften/Avatars/NullAvatarManager.h b/Swiften/Avatars/NullAvatarManager.h
new file mode 100644
index 0000000..7f3c646
--- /dev/null
+++ b/Swiften/Avatars/NullAvatarManager.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Avatars/AvatarManager.h"
+
+namespace Swift {
+	class NullAvatarManager : public AvatarManager {
+		public:
+			virtual boost::filesystem::path getAvatarPath(const JID&) const {
+				return boost::filesystem::path();
+			}
+	};
+}
diff --git a/Swiften/Avatars/SConscript b/Swiften/Avatars/SConscript
index 60bee08..7922a51 100644
--- a/Swiften/Avatars/SConscript
+++ b/Swiften/Avatars/SConscript
@@ -5,6 +5,7 @@ objects = swiften_env.StaticObject([
 			"VCardUpdateAvatarManager.cpp",
 			"VCardAvatarManager.cpp",
 			"AvatarManager.cpp",
+			"AvatarManagerImpl.cpp",
 			"AvatarStorage.cpp",
 			"AvatarProvider.cpp",
 			"CombinedAvatarProvider.cpp",
diff --git a/Swiften/Roster/UnitTest/RosterTest.cpp b/Swiften/Roster/UnitTest/RosterTest.cpp
index 9c8e65b..0300188 100644
--- a/Swiften/Roster/UnitTest/RosterTest.cpp
+++ b/Swiften/Roster/UnitTest/RosterTest.cpp
@@ -14,8 +14,7 @@
 
 using namespace Swift;
 
-class RosterTest : public CppUnit::TestFixture
-{
+class RosterTest : public CppUnit::TestFixture {
 		CPPUNIT_TEST_SUITE(RosterTest);
 		CPPUNIT_TEST(testGetGroup);
 		CPPUNIT_TEST(testRemoveContact);
@@ -24,17 +23,11 @@ class RosterTest : public CppUnit::TestFixture
 		CPPUNIT_TEST(testApplyPresenceLikeMUC);
 		CPPUNIT_TEST_SUITE_END();
 
-	private:
-		Roster *roster_;
-		JID jid1_;
-		JID jid2_; 
-		JID jid3_;
-
 	public:
-
-		RosterTest() : jid1_(JID("a@b.c")), jid2_(JID("b@c.d")), jid3_(JID("c@d.e")) {}
-
 		void setUp() {
+			jid1_ = JID("a@b.c");
+			jid2_ = JID("b@c.d");
+			jid3_ = JID("c@d.e");
 			roster_ = new Roster();
 		}
 
@@ -124,6 +117,12 @@ class RosterTest : public CppUnit::TestFixture
 
 		}
 
+	private:
+		Roster *roster_;
+		JID jid1_;
+		JID jid2_; 
+		JID jid3_;
 };
+
 CPPUNIT_TEST_SUITE_REGISTRATION(RosterTest);
 
-- 
cgit v0.10.2-6-g49f6