summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-10-24 13:46:12 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-10-24 15:56:44 (GMT)
commit9dccf1e0c86b10d41dd2d5f3bf71faf1bf8d77c8 (patch)
tree4d054c17e759f5f206c67fbbef1ca3e77647ba07 /Swift/Controllers
parentefc2bed8610f6e1b7fc29b3dd6f13137fc19bdf6 (diff)
downloadswift-9dccf1e0c86b10d41dd2d5f3bf71faf1bf8d77c8.zip
swift-9dccf1e0c86b10d41dd2d5f3bf71faf1bf8d77c8.tar.bz2
Created Storages interface.
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/FileStoragesFactory.h24
-rw-r--r--Swift/Controllers/MainController.cpp46
-rw-r--r--Swift/Controllers/MainController.h22
-rw-r--r--Swift/Controllers/StoragesFactory.h18
4 files changed, 61 insertions, 49 deletions
diff --git a/Swift/Controllers/FileStoragesFactory.h b/Swift/Controllers/FileStoragesFactory.h
new file mode 100644
index 0000000..bd7cdfb
--- /dev/null
+++ b/Swift/Controllers/FileStoragesFactory.h
@@ -0,0 +1,24 @@
+/*
+ * 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 "Swift/Controllers/StoragesFactory.h"
+#include "Swiften/Client/FileStorages.h"
+
+namespace Swift {
+ class FileStoragesFactory : public StoragesFactory {
+ public:
+ FileStoragesFactory(const boost::filesystem::path& basePath) : basePath(basePath) {}
+
+ virtual Storages* createStorages(const JID& profile) const {
+ return new FileStorages(basePath, profile);
+ }
+
+ private:
+ boost::filesystem::path basePath;
+ };
+}
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index c5b55bf..a2d8331 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -16,9 +16,9 @@
#include "Swiften/Network/BoostIOServiceThread.h"
#include "Swiften/Network/MainBoostIOServiceThread.h"
#include "Swift/Controllers/BuildVersion.h"
-#include "Swiften/VCards/VCardStorageFactory.h"
+#include "Swift/Controllers/StoragesFactory.h"
+#include "Swiften/Client/Storages.h"
#include "Swiften/VCards/VCardManager.h"
-#include "Swiften/VCards/VCardStorage.h"
#include "Swift/Controllers/Chat/MUCSearchController.h"
#include "Swift/Controllers/Chat/ChatsManager.h"
#include "Swift/Controllers/XMPPEvents/EventController.h"
@@ -53,9 +53,7 @@
#include "Swiften/Disco/CapsInfoGenerator.h"
#include "Swiften/Disco/GetDiscoInfoRequest.h"
#include "Swiften/VCards/GetVCardRequest.h"
-#include "Swiften/Avatars/AvatarStorage.h"
#include "Swiften/Avatars/AvatarManagerImpl.h"
-#include "Swiften/Disco/CapsFileStorage.h"
#include "Swiften/Disco/CapsManager.h"
#include "Swiften/Disco/EntityCapsManager.h"
#include "Swiften/StringCodecs/SHA1.h"
@@ -83,25 +81,23 @@ MainController::MainController(
XMLConsoleWidgetFactory* xmlConsoleWidgetFactory,
ChatListWindowFactory* chatListWindowFactory,
MUCSearchWindowFactory* mucSearchWindowFactory,
- AvatarStorage* avatarStorage,
- CapsStorage* capsStorage,
- VCardStorageFactory* vcardStorageFactory,
+ StoragesFactory* storagesFactory,
Dock* dock,
Notifier* notifier,
bool useDelayForLatency) :
timerFactory_(&boostIOServiceThread_.getIOService()),
idleDetector_(&idleQuerier_, &timerFactory_, 100),
+ storagesFactory_(storagesFactory),
chatWindowFactory_(chatWindowFactory),
mainWindowFactory_(mainWindowFactory),
loginWindowFactory_(loginWindowFactory),
settings_(settings),
- vcardStorageFactory_(vcardStorageFactory),
loginWindow_(NULL) ,
useDelayForLatency_(useDelayForLatency) {
+ storages_ = NULL;
statusTracker_ = NULL;
client_ = NULL;
- vcardManager_ = NULL;
avatarManager_ = NULL;
capsManager_ = NULL;
entityCapsManager_ = NULL;
@@ -122,8 +118,6 @@ MainController::MainController(
chatListWindowFactory_ = chatListWindowFactory;
uiEventStream_ = new UIEventStream();
- avatarStorage_ = avatarStorage;
- capsStorage_ = capsStorage;
notifier_ = new TogglableNotifier(notifier);
eventController_ = new EventController();
eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1));
@@ -180,9 +174,6 @@ MainController::~MainController() {
resetClient();
delete eventController_;
delete notifier_;
- for(VCardStorageMap::iterator i = vcardStorages_.begin(); i != vcardStorages_.end(); ++i) {
- delete i->second;
- }
}
void MainController::resetClient() {
@@ -213,10 +204,10 @@ void MainController::resetClient() {
avatarManager_ = NULL;
delete nickResolver_;
nickResolver_ = NULL;
- delete vcardManager_;
- vcardManager_ = NULL;
delete client_;
client_ = NULL;
+ delete storages_;
+ storages_ = NULL;
delete statusTracker_;
statusTracker_ = NULL;
delete profileSettings_;
@@ -288,7 +279,7 @@ void MainController::handleConnected() {
discoInfoRequest->onResponse.connect(boost::bind(&MainController::handleServerDiscoInfoResponse, this, _1, _2));
discoInfoRequest->send();
- vcardManager_->requestOwnVCard();
+ client_->getVCardManager()->requestOwnVCard();
rosterController_->setEnabled(true);
/* Send presence later to catch all the incoming presences. */
@@ -390,7 +381,8 @@ void MainController::performLoginFromCachedCredentials() {
statusTracker_ = new StatusTracker();
}
if (!client_) {
- client_ = new Swift::Client(jid_, password_);
+ storages_ = storagesFactory_->createStorages(jid_);
+ client_ = new Swift::Client(jid_, password_, storages_);
client_->onDataRead.connect(boost::bind(&XMLConsoleController::handleDataRead, xmlConsoleController_, _1));
client_->onDataWritten.connect(boost::bind(&XMLConsoleController::handleDataWritten, xmlConsoleController_, _1));
client_->onError.connect(boost::bind(&MainController::handleError, this, _1));
@@ -398,11 +390,10 @@ void MainController::performLoginFromCachedCredentials() {
client_->setSoftwareVersion(CLIENT_NAME, buildVersion);
- vcardManager_ = new VCardManager(jid_, client_->getIQRouter(), getVCardStorageForProfile(jid_));
- vcardManager_->onVCardChanged.connect(boost::bind(&MainController::handleVCardReceived, this, _1, _2));
- nickResolver_ = new NickResolver(this->jid_.toBare(), client_->getRoster(), vcardManager_, client_->getMUCRegistry());
- avatarManager_ = new AvatarManagerImpl(vcardManager_, client_->getStanzaChannel(), avatarStorage_, client_->getMUCRegistry());
- capsManager_ = new CapsManager(capsStorage_, client_->getStanzaChannel(), client_->getIQRouter());
+ client_->getVCardManager()->onVCardChanged.connect(boost::bind(&MainController::handleVCardReceived, this, _1, _2));
+ nickResolver_ = new NickResolver(this->jid_.toBare(), client_->getRoster(), client_->getVCardManager(), client_->getMUCRegistry());
+ avatarManager_ = new AvatarManagerImpl(client_->getVCardManager(), client_->getStanzaChannel(), storages_->getAvatarStorage(), client_->getMUCRegistry());
+ capsManager_ = new CapsManager(storages_->getCapsStorage(), client_->getStanzaChannel(), client_->getIQRouter());
entityCapsManager_ = new EntityCapsManager(capsManager_, client_->getStanzaChannel());
presenceNotifier_ = new PresenceNotifier(client_->getStanzaChannel(), notifier_, client_->getMUCRegistry(), avatarManager_, nickResolver_, client_->getPresenceOracle(), &timerFactory_);
presenceNotifier_->onNotificationActivated.connect(boost::bind(&MainController::handleNotificationClicked, this, _1));
@@ -541,14 +532,5 @@ void MainController::handleNotificationClicked(const JID& jid) {
uiEventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(jid)));
}
-VCardStorage* MainController::getVCardStorageForProfile(const JID& jid) {
- String profile = jid.toBare().toString();
- std::pair<VCardStorageMap::iterator, bool> r = vcardStorages_.insert(std::make_pair<String, VCardStorage*>(profile, NULL));
- if (r.second) {
- r.first->second = vcardStorageFactory_->createVCardStorage(profile);
- }
- return r.first->second;
-}
-
}
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index e04123c..0a14993 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -28,10 +28,6 @@
#include "Swift/Controllers/UIEvents/UIEvent.h"
namespace Swift {
- class AvatarStorage;
- class CapsStorage;
- class VCardStorage;
- class VCardManager;
class Application;
class Client;
class ChatWindowFactory;
@@ -67,8 +63,9 @@ namespace Swift {
class MUCSearchController;
class MUCSearchWindowFactory;
class StatusTracker;
- class VCardStorageFactory;
class Dock;
+ class Storages;
+ class StoragesFactory;
class MainController {
public:
@@ -83,9 +80,7 @@ namespace Swift {
XMLConsoleWidgetFactory* xmlConsoleWidgetFactory,
ChatListWindowFactory* chatListWindowFactory_,
MUCSearchWindowFactory* mucSearchWindowFactory,
- AvatarStorage* avatarStorage,
- CapsStorage* capsStorage,
- VCardStorageFactory* vcardStorageFactory,
+ StoragesFactory* storagesFactory,
Dock* dock,
Notifier* notifier,
bool useDelayForLatency);
@@ -116,13 +111,13 @@ namespace Swift {
void setManagersOffline();
void handleNotificationClicked(const JID& jid);
- VCardStorage* getVCardStorageForProfile(const JID& jid);
-
private:
BoostIOServiceThread boostIOServiceThread_;
BoostTimerFactory timerFactory_;
PlatformIdleQuerier idleQuerier_;
ActualIdleDetector idleDetector_;
+ StoragesFactory* storagesFactory_;
+ Storages* storages_;
Client* client_;
ChatWindowFactory* chatWindowFactory_;
MainWindowFactory* mainWindowFactory_;
@@ -130,10 +125,6 @@ namespace Swift {
EventWindowFactory* eventWindowFactory_;
SettingsProvider *settings_;
ProfileSettingsProvider* profileSettings_;
- AvatarStorage* avatarStorage_;
- CapsStorage* capsStorage_;
- VCardStorageFactory* vcardStorageFactory_;
- VCardManager* vcardManager_;
Dock* dock_;
TogglableNotifier* notifier_;
PresenceNotifier* presenceNotifier_;
@@ -167,8 +158,5 @@ namespace Swift {
Timer::ref reconnectTimer_;
StatusTracker* statusTracker_;
bool myStatusLooksOnline_;
-
- typedef std::map<String, VCardStorage*> VCardStorageMap;
- VCardStorageMap vcardStorages_;
};
}
diff --git a/Swift/Controllers/StoragesFactory.h b/Swift/Controllers/StoragesFactory.h
new file mode 100644
index 0000000..441a4e9
--- /dev/null
+++ b/Swift/Controllers/StoragesFactory.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
+
+namespace Swift {
+ class Storages;
+
+ class StoragesFactory {
+ public:
+ virtual ~StoragesFactory() {}
+
+ virtual Storages* createStorages(const JID& profile) const = 0;
+ };
+}