summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Controllers/ChatControllerBase.cpp')
-rw-r--r--Swiften/Controllers/ChatControllerBase.cpp171
1 files changed, 0 insertions, 171 deletions
diff --git a/Swiften/Controllers/ChatControllerBase.cpp b/Swiften/Controllers/ChatControllerBase.cpp
deleted file mode 100644
index 5f8535e..0000000
--- a/Swiften/Controllers/ChatControllerBase.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-#include "Swiften/Controllers/ChatControllerBase.h"
-
-#include <boost/bind.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include "Swiften/Client/StanzaChannel.h"
-#include "Swiften/Base/foreach.h"
-#include "Swiften/Controllers/ChatWindow.h"
-#include "Swiften/Controllers/ChatWindowFactory.h"
-#include "Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h"
-
-namespace Swift {
-
-ChatControllerBase::ChatControllerBase(StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &toJID, PresenceOracle* presenceOracle) : stanzaChannel_(stanzaChannel), iqRouter_(iqRouter), chatWindowFactory_(chatWindowFactory), toJID_(toJID), labelsEnabled_(false), presenceOracle_(presenceOracle) {
- chatWindow_ = chatWindowFactory_->createChatWindow(toJID);
- chatWindow_->onAllMessagesRead.connect(boost::bind(&ChatControllerBase::handleAllMessagesRead, this));
- chatWindow_->onSendMessageRequest.connect(boost::bind(&ChatControllerBase::handleSendMessageRequest, this, _1));
- presenceOracle_->onPresenceChange.connect(boost::bind(&ChatControllerBase::handlePresenceChange, this, _1, _2));
-}
-
-ChatControllerBase::~ChatControllerBase() {
- delete chatWindow_;
-}
-
-void ChatControllerBase::setAvailableServerFeatures(boost::shared_ptr<DiscoInfo> info) {
- if (info->hasFeature(DiscoInfo::SecurityLabels)) {
- chatWindow_->setSecurityLabelsEnabled(true);
- chatWindow_->setSecurityLabelsError();
- GetSecurityLabelsCatalogRequest* request = new GetSecurityLabelsCatalogRequest(JID(toJID_.toBare()), iqRouter_, Request::AutoDeleteAfterResponse);
- request->onResponse.connect(boost::bind(&ChatControllerBase::handleSecurityLabelsCatalogResponse, this, _1, _2));
- request->send();
- labelsEnabled_ = true;
- } else {
- chatWindow_->setSecurityLabelsEnabled(false);
- labelsEnabled_ = false;
- }
-}
-
-String ChatControllerBase::getStatusChangeString(boost::shared_ptr<Presence> presence) {
- String nick = senderDisplayNameFromMessage(presence->getFrom());
- if (presence->getType() == Presence::Unavailable) {
- return nick + " has gone offline.";
- } else if (presence->getType() == Presence::Available) {
- StatusShow::Type show = presence->getShow();
- if (show == StatusShow::Online || show == StatusShow::FFC) {
- return nick + " has become available.";
- } else if (show == StatusShow::Away || show == StatusShow::XA) {
- return nick + " has gone away.";
- } else if (show == StatusShow::DND) {
- return nick + " is now busy.";
- }
- }
-
- return "";
-}
-
-void ChatControllerBase::handlePresenceChange(boost::shared_ptr<Presence> newPresence, boost::shared_ptr<Presence> previousPresence) {
- if (!(toJID_.isBare() && newPresence->getFrom().equals(toJID_, JID::WithoutResource)) && newPresence->getFrom() != toJID_) {
- return;
- }
- String newStatusChangeString = getStatusChangeString(newPresence);
- if (previousPresence.get() == NULL || newStatusChangeString != getStatusChangeString(previousPresence)) {
- chatWindow_->addSystemMessage(newStatusChangeString);
- }
-}
-
-void ChatControllerBase::handleAllMessagesRead() {
- foreach (boost::shared_ptr<MessageEvent> messageEvent, unreadMessages_) {
- messageEvent->read();
- }
- unreadMessages_.clear();
- chatWindow_->setUnreadMessageCount(0);
-}
-
-void ChatControllerBase::handleSendMessageRequest(const String &body) {
- if (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<Error>& 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();
-}
-
-String ChatControllerBase::senderDisplayNameFromMessage(JID from) {
- return from;
-}
-
-
-
-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<Error>());
- 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();
- chatWindow_->addMessage(body, senderDisplayNameFromMessage(from), isIncomingMessageFromMe(message), maybeLabel);
- }
-}
-
-String ChatControllerBase::getErrorMessage(boost::shared_ptr<Error> error) {
- String defaultMessage = "Error sending message";
- if (!error->getText().isEmpty()) {
- return error->getText();
- }
- else {
- switch (error->getCondition()) {
- case Error::BadRequest: return defaultMessage; break;
- case Error::Conflict: return defaultMessage; break;
- case Error::FeatureNotImplemented: return defaultMessage; break;
- case Error::Forbidden: return defaultMessage; break;
- case Error::Gone: return "Recipient can no longer be contacted"; break;
- case Error::InternalServerError: return "Internal server error"; break;
- case Error::ItemNotFound: return defaultMessage; break;
- case Error::JIDMalformed: return defaultMessage; break;
- case Error::NotAcceptable: return "Message was rejected"; break;
- case Error::NotAllowed: return defaultMessage; break;
- case Error::NotAuthorized: return defaultMessage; break;
- case Error::PaymentRequired: return defaultMessage; break;
- case Error::RecipientUnavailable: return "Recipient is unavailable."; break;
- case Error::Redirect: return defaultMessage; break;
- case Error::RegistrationRequired: return defaultMessage; break;
- case Error::RemoteServerNotFound: return "Recipient's server not found."; break;
- case Error::RemoteServerTimeout: return defaultMessage; break;
- case Error::ResourceConstraint: return defaultMessage; break;
- case Error::ServiceUnavailable: return defaultMessage; break;
- case Error::SubscriptionRequired: return defaultMessage; break;
- case Error::UndefinedCondition: return defaultMessage; break;
- case Error::UnexpectedRequest: return defaultMessage; break;
- }
- }
- return defaultMessage;
-}
-
-}