diff options
Diffstat (limited to 'Swiftob/MUCs.cpp')
-rw-r--r-- | Swiftob/MUCs.cpp | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/Swiftob/MUCs.cpp b/Swiftob/MUCs.cpp deleted file mode 100644 index 23099d3..0000000 --- a/Swiftob/MUCs.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2011 Isode Limited. - * All rights reserved. - * See the COPYING file for more information. - */ - -#include <Swiftob/MUCs.h> - -#include <boost/bind.hpp> -#include <boost/date_time/posix_time/posix_time.hpp> - -#include <Swiften/Base/foreach.h> -#include <Swiften/Client/Client.h> -#include <Swiften/MUC/MUC.h> -#include <Swiften/MUC/MUCManager.h> -#include <Swiften/Base/String.h> - -#include <Swiftob/Storage.h> - -using namespace Swift; - -#define MUC_LIST_SETTING "muc_list" -#define NICK "default_nick" - -typedef std::pair<JID, MUC::ref> JIDMUCPair; - -MUCs::MUCs(Client* client, Storage* storage) : defaultNick_("Kanchil+") { - client_ = client; - storage_ = storage; - std::string storedNick = storage_->getSetting(NICK); - if (!storedNick.empty()) { - defaultNick_ = storedNick; - } - client_->onConnected.connect(boost::bind(&MUCs::handleConnected, this)); -} - -void MUCs::handleConnected() { - foreach (std::string room, String::split(storage_->getSetting(MUC_LIST_SETTING), ' ')) { - join(JID(room), boost::bind(&MUCs::handleInitialJoinSuccess, this), boost::bind(&MUCs::handleInitialJoinFailure, this, _1)); - } -} - -void MUCs::handleInitialJoinSuccess() { - -} - -void MUCs::handleInitialJoinFailure(const std::string&) { - -} - -void MUCs::join(const JID& room, boost::signal<void (const std::string&)>::slot_type successCallback, boost::function<void(const std::string& /*reason*/)> failureCallback) { - if (contains(room)) { - failureCallback("Already in room"); - } - mucs_[room] = client_->getMUCManager()->createMUC(room); - mucs_[room]->onJoinComplete.connect(successCallback); - mucs_[room]->onJoinFailed.connect(boost::bind(&MUCs::handleJoinFailed, this, room, _1, failureCallback)); - mucs_[room]->joinWithContextSince(defaultNick_, boost::posix_time::microsec_clock::universal_time()); - save(); -} - -void MUCs::part(const JID& room) { - if (!contains(room)) { - return; - } - mucs_[room]->part(); -} - -bool MUCs::contains(const JID& room) { - return mucs_.find(room) != mucs_.end(); -} - -void MUCs::handleJoinFailed(const JID& muc, ErrorPayload::ref error, boost::function<void(const std::string& /*reason*/)> failureCallback) { - std::string errorMessage("Couldn't join room"); - if (error) { - switch (error->getCondition()) { - case ErrorPayload::Conflict: - // rejoinNick = nick_ + "_"; - errorMessage += ": Nickname in use"; - // errorMessage = str(format("Unable to enter this room as %1%, retrying as %2%") % nick_ % rejoinNick); - break; - case ErrorPayload::JIDMalformed: - errorMessage += ": "; - errorMessage += "No nickname specified"; - break; - case ErrorPayload::NotAuthorized: - errorMessage += ": "; - errorMessage += "A password needed"; - break; - case ErrorPayload::RegistrationRequired: - errorMessage += ": "; - errorMessage += "Only members may enter"; - break; - case ErrorPayload::Forbidden: - errorMessage += ": "; - errorMessage += "You are banned from the room"; - break; - case ErrorPayload::ServiceUnavailable: - errorMessage += ": "; - errorMessage += "The room is full"; - break; - case ErrorPayload::ItemNotFound: - errorMessage += ": "; - errorMessage += "The room does not exist"; - break; - default: - break; - } - if (!error->getText().empty()) { - errorMessage += " - " + error->getText(); - } - } - mucs_.erase(muc); - failureCallback(errorMessage); -} - -void MUCs::save() { - std::string concat; - foreach (JIDMUCPair pair, mucs_) { - concat += pair.first.toString() + " "; - } - storage_->saveSetting(MUC_LIST_SETTING, concat); -} - -MUC::ref MUCs::getMUC(const JID& room) { - return (mucs_.find(room) != mucs_.end()) ? mucs_[room] : MUC::ref(); -} - -bool MUCs::setDefaultNick(const std::string& nick) { - JID testJID("alice", "wonderland.lit", nick); - if (testJID.isValid()) { - defaultNick_ = testJID.getResource(); - storage_->saveSetting(NICK, defaultNick_); - return true; - } - return false; -} |