summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-02-10 11:14:50 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-02-10 11:14:50 (GMT)
commit4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f (patch)
tree63ce3df61e88f27ed183d373e3496d8f56af7fb1 /Swift/Controllers/ChatControllerBase.cpp
parent936f7ff9b80aca95040301a4b3cfcd2a248e3334 (diff)
downloadswift-contrib-4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f.zip
swift-contrib-4d0c1d3b8a40cb74cfb30ed27a294afaa6ced56f.tar.bz2
Move the Chat stuff in Controllers into Chat folder.
It was starting to get a bit unwieldly in Controllers/
Diffstat (limited to 'Swift/Controllers/ChatControllerBase.cpp')
-rw-r--r--Swift/Controllers/ChatControllerBase.cpp154
1 files changed, 0 insertions, 154 deletions
diff --git a/Swift/Controllers/ChatControllerBase.cpp b/Swift/Controllers/ChatControllerBase.cpp
deleted file mode 100644
index 3e1ce5e..0000000
--- a/Swift/Controllers/ChatControllerBase.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "Swift/Controllers/ChatControllerBase.h"
-
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include "Swiften/Client/StanzaChannel.h"
-#include "Swiften/Base/foreach.h"
-#include "Swift/Controllers/UIInterfaces/ChatWindow.h"
-#include "Swift/Controllers/UIInterfaces/ChatWindowFactory.h"
-#include "Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h"
-#include "Swiften/Avatars/AvatarManager.h"
-
-namespace Swift {
-
-ChatControllerBase::ChatControllerBase(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &toJID, PresenceOracle* presenceOracle, AvatarManager* avatarManager) : selfJID_(self), stanzaChannel_(stanzaChannel), iqRouter_(iqRouter), chatWindowFactory_(chatWindowFactory), toJID_(toJID), labelsEnabled_(false), presenceOracle_(presenceOracle), avatarManager_(avatarManager) {
- chatWindow_ = chatWindowFactory_->createChatWindow(toJID);
- chatWindow_->onAllMessagesRead.connect(boost::bind(&ChatControllerBase::handleAllMessagesRead, this));
- chatWindow_->onSendMessageRequest.connect(boost::bind(&ChatControllerBase::handleSendMessageRequest, this, _1));
- setEnabled(stanzaChannel->isAvailable() && iqRouter->isAvailable());
-}
-
-ChatControllerBase::~ChatControllerBase() {
- delete chatWindow_;
-}
-
-void ChatControllerBase::setEnabled(bool enabled) {
- chatWindow_->setInputEnabled(enabled);
-}
-
-void ChatControllerBase::setAvailableServerFeatures(boost::shared_ptr<DiscoInfo> info) {
- if (iqRouter_->isAvailable() && info->hasFeature(DiscoInfo::SecurityLabels)) {
- chatWindow_->setSecurityLabelsEnabled(true);
- chatWindow_->setSecurityLabelsError();
- boost::shared_ptr<GetSecurityLabelsCatalogRequest> request(new GetSecurityLabelsCatalogRequest(JID(toJID_.toBare()), iqRouter_));
- request->onResponse.connect(boost::bind(&ChatControllerBase::handleSecurityLabelsCatalogResponse, this, _1, _2));
- request->send();
- labelsEnabled_ = true;
- } else {
- chatWindow_->setSecurityLabelsEnabled(false);
- labelsEnabled_ = false;
- }
-}
-
-void ChatControllerBase::handleAllMessagesRead() {
- foreach (boost::shared_ptr<MessageEvent> messageEvent, unreadMessages_) {
- messageEvent->read();
- }
- unreadMessages_.clear();
- chatWindow_->setUnreadMessageCount(0);
-}
-
-void ChatControllerBase::handleSendMessageRequest(const String &body) {
- if (!stanzaChannel_->isAvailable() || body.isEmpty()) {
- return;
- }
- boost::shared_ptr<Message> message(new Message());
- message->setTo(toJID_);
- message->setType(Swift::Message::Chat);
- message->setBody(body);
- boost::optional<SecurityLabel> label;
- if (labelsEnabled_) {
- message->addPayload(boost::shared_ptr<SecurityLabel>(new SecurityLabel(chatWindow_->getSelectedSecurityLabel())));
- label = boost::optional<SecurityLabel>(chatWindow_->getSelectedSecurityLabel());
- }
- preSendMessageRequest(message);
- stanzaChannel_->sendMessage(message);
- postSendMessage(message->getBody());
-}
-
-void ChatControllerBase::handleSecurityLabelsCatalogResponse(boost::shared_ptr<SecurityLabelsCatalog> catalog, const boost::optional<ErrorPayload>& error) {
- if (!error) {
- if (catalog->getLabels().size() == 0) {
- chatWindow_->setSecurityLabelsEnabled(false);
- labelsEnabled_ = false;
- } else {
- chatWindow_->setAvailableSecurityLabels(catalog->getLabels());
- chatWindow_->setSecurityLabelsEnabled(true);
- }
- } else {
- chatWindow_->setSecurityLabelsError();
- }
-}
-
-void ChatControllerBase::showChatWindow() {
- chatWindow_->show();
-}
-
-void ChatControllerBase::activateChatWindow() {
- chatWindow_->activate();
-}
-
-void ChatControllerBase::addMessage(const String& message, const String& senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath) {
- if (message.beginsWith("/me ")) {
- chatWindow_->addMessage(message, senderName, senderIsSelf, label, avatarPath);
- } else {
- chatWindow_->addAction(message, senderName, senderIsSelf, label, avatarPath);
- }
-}
-
-void ChatControllerBase::handleIncomingMessage(boost::shared_ptr<MessageEvent> messageEvent) {
- unreadMessages_.push_back(messageEvent);
- chatWindow_->setUnreadMessageCount(unreadMessages_.size());
-
- boost::shared_ptr<Message> message = messageEvent->getStanza();
- preHandleIncomingMessage(message);
- String body = message->getBody();
- if (message->isError()) {
- String errorMessage = getErrorMessage(message->getPayload<ErrorPayload>());
- chatWindow_->addErrorMessage(errorMessage);
- }
- else {
- showChatWindow();
- boost::shared_ptr<SecurityLabel> label = message->getPayload<SecurityLabel>();
- boost::optional<SecurityLabel> maybeLabel = label ? boost::optional<SecurityLabel>(*label) : boost::optional<SecurityLabel>();
- JID from = message->getFrom();
- addMessage(body, senderDisplayNameFromMessage(from), isIncomingMessageFromMe(message), maybeLabel, String(avatarManager_->getAvatarPath(from).string()));
- }
-}
-
-String ChatControllerBase::getErrorMessage(boost::shared_ptr<ErrorPayload> error) {
- String defaultMessage = "Error sending message";
- if (!error->getText().isEmpty()) {
- return error->getText();
- }
- else {
- switch (error->getCondition()) {
- case ErrorPayload::BadRequest: return defaultMessage; break;
- case ErrorPayload::Conflict: return defaultMessage; break;
- case ErrorPayload::FeatureNotImplemented: return defaultMessage; break;
- case ErrorPayload::Forbidden: return defaultMessage; break;
- case ErrorPayload::Gone: return "Recipient can no longer be contacted"; break;
- case ErrorPayload::InternalServerError: return "Internal server error"; break;
- case ErrorPayload::ItemNotFound: return defaultMessage; break;
- case ErrorPayload::JIDMalformed: return defaultMessage; break;
- case ErrorPayload::NotAcceptable: return "Message was rejected"; break;
- case ErrorPayload::NotAllowed: return defaultMessage; break;
- case ErrorPayload::NotAuthorized: return defaultMessage; break;
- case ErrorPayload::PaymentRequired: return defaultMessage; break;
- case ErrorPayload::RecipientUnavailable: return "Recipient is unavailable."; break;
- case ErrorPayload::Redirect: return defaultMessage; break;
- case ErrorPayload::RegistrationRequired: return defaultMessage; break;
- case ErrorPayload::RemoteServerNotFound: return "Recipient's server not found."; break;
- case ErrorPayload::RemoteServerTimeout: return defaultMessage; break;
- case ErrorPayload::ResourceConstraint: return defaultMessage; break;
- case ErrorPayload::ServiceUnavailable: return defaultMessage; break;
- case ErrorPayload::SubscriptionRequired: return defaultMessage; break;
- case ErrorPayload::UndefinedCondition: return defaultMessage; break;
- case ErrorPayload::UnexpectedRequest: return defaultMessage; break;
- }
- }
- return defaultMessage;
-}
-
-}