diff options
Diffstat (limited to 'Swift/Controllers/Chat')
| -rw-r--r-- | Swift/Controllers/Chat/ChatControllerBase.cpp | 22 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatControllerBase.h | 4 | 
2 files changed, 21 insertions, 5 deletions
| diff --git a/Swift/Controllers/Chat/ChatControllerBase.cpp b/Swift/Controllers/Chat/ChatControllerBase.cpp index f590ffd..8523591 100644 --- a/Swift/Controllers/Chat/ChatControllerBase.cpp +++ b/Swift/Controllers/Chat/ChatControllerBase.cpp @@ -23,18 +23,19 @@  #include <Swiften/Elements/MUCInvitationPayload.h>  #include <Swiften/Elements/MUCUserPayload.h>  #include <Swiften/Base/foreach.h>  #include <Swift/Controllers/XMPPEvents/EventController.h>  #include <Swiften/Disco/EntityCapsProvider.h>  #include <Swift/Controllers/UIInterfaces/ChatWindow.h>  #include <Swift/Controllers/UIInterfaces/ChatWindowFactory.h>  #include <Swiften/Queries/Requests/GetSecurityLabelsCatalogRequest.h>  #include <Swiften/Avatars/AvatarManager.h> +#include <Swift/Controllers/XMPPEvents/MUCInviteEvent.h>  namespace Swift {  ChatControllerBase::ChatControllerBase(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &toJID, PresenceOracle* presenceOracle, AvatarManager* avatarManager, bool useDelayForLatency, UIEventStream* eventStream, EventController* eventController, TimerFactory* timerFactory, EntityCapsProvider* entityCapsProvider) : selfJID_(self), stanzaChannel_(stanzaChannel), iqRouter_(iqRouter), chatWindowFactory_(chatWindowFactory), toJID_(toJID), labelsEnabled_(false), presenceOracle_(presenceOracle), avatarManager_(avatarManager), useDelayForLatency_(useDelayForLatency), eventController_(eventController), timerFactory_(timerFactory), entityCapsProvider_(entityCapsProvider) {  	chatWindow_ = chatWindowFactory_->createChatWindow(toJID, eventStream);  	chatWindow_->onAllMessagesRead.connect(boost::bind(&ChatControllerBase::handleAllMessagesRead, this));  	chatWindow_->onSendMessageRequest.connect(boost::bind(&ChatControllerBase::handleSendMessageRequest, this, _1, _2));  	entityCapsProvider_->onCapsChanged.connect(boost::bind(&ChatControllerBase::handleCapsChanged, this, _1));  	setOnline(stanzaChannel->isAvailable() && iqRouter->isAvailable()); @@ -85,20 +86,20 @@ void ChatControllerBase::setAvailableServerFeatures(boost::shared_ptr<DiscoInfo>  		request->send();  	} else {  		chatWindow_->setSecurityLabelsEnabled(false);  		labelsEnabled_ = false;  	}  }  void ChatControllerBase::handleAllMessagesRead() {  	if (!unreadMessages_.empty()) { -		foreach (boost::shared_ptr<MessageEvent> messageEvent, unreadMessages_) { -			messageEvent->read(); +		foreach (boost::shared_ptr<StanzaEvent> stanzaEvent, unreadMessages_) { +			stanzaEvent->conclude();  		}  		unreadMessages_.clear();  		chatWindow_->setUnreadMessageCount(0);  		onUnreadCountChanged();  	}  }  int ChatControllerBase::getUnreadCount() {  	return unreadMessages_.size(); @@ -261,31 +262,44 @@ std::string ChatControllerBase::getErrorMessage(boost::shared_ptr<ErrorPayload>  			case ErrorPayload::ServiceUnavailable: return QT_TRANSLATE_NOOP("", "The service is unavailable"); break;  			case ErrorPayload::SubscriptionRequired: return QT_TRANSLATE_NOOP("", "A subscription is required"); break;  			case ErrorPayload::UndefinedCondition: return QT_TRANSLATE_NOOP("", "Undefined condition"); break;  			case ErrorPayload::UnexpectedRequest: return QT_TRANSLATE_NOOP("", "Unexpected request"); break;  		}  	}  	return defaultMessage;  } +void ChatControllerBase::handleGeneralMUCInvitation(MUCInviteEvent::ref event) { +	unreadMessages_.push_back(event); +	chatWindow_->show(); +	chatWindow_->setUnreadMessageCount(unreadMessages_.size()); +	onUnreadCountChanged(); +	chatWindow_->addMUCInvitation(senderDisplayNameFromMessage(event->getInviter()), event->getRoomJID(), event->getReason(), event->getPassword(), event->getDirect()); +	eventController_->handleIncomingEvent(event); +} +  void ChatControllerBase::handleMUCInvitation(Message::ref message) {  	MUCInvitationPayload::ref invite = message->getPayload<MUCInvitationPayload>(); -	chatWindow_->addMUCInvitation(invite->getJID(), invite->getReason(), invite->getPassword()); + +	MUCInviteEvent::ref inviteEvent = boost::make_shared<MUCInviteEvent>(toJID_, invite->getJID(), invite->getReason(), invite->getPassword(), true); +	handleGeneralMUCInvitation(inviteEvent);  }  void ChatControllerBase::handleMediatedMUCInvitation(Message::ref message) {  	MUCUserPayload::Invite invite = *message->getPayload<MUCUserPayload>()->getInvite();  	JID from = message->getFrom();  	std::string reason;  	if (!invite.reason.empty()) {  		reason = invite.reason;  	}  	std::string password;  	if (message->getPayload<MUCUserPayload>()->getPassword()) {  		password = *message->getPayload<MUCUserPayload>()->getPassword();  	} -	chatWindow_->addMUCInvitation(from, reason, password, false); + +	MUCInviteEvent::ref inviteEvent = boost::make_shared<MUCInviteEvent>(invite.from, from, reason, password, false); +	handleGeneralMUCInvitation(inviteEvent);  }  } diff --git a/Swift/Controllers/Chat/ChatControllerBase.h b/Swift/Controllers/Chat/ChatControllerBase.h index e1034d6..a4d23c0 100644 --- a/Swift/Controllers/Chat/ChatControllerBase.h +++ b/Swift/Controllers/Chat/ChatControllerBase.h @@ -14,18 +14,19 @@  #include <boost/optional.hpp>  #include <boost/date_time/posix_time/posix_time.hpp>  #include "Swiften/Network/Timer.h"  #include "Swiften/Network/TimerFactory.h"  #include "Swiften/Elements/Stanza.h"  #include <string>  #include "Swiften/Elements/DiscoInfo.h"  #include "Swift/Controllers/XMPPEvents/MessageEvent.h" +#include <Swift/Controllers/XMPPEvents/MUCInviteEvent.h>  #include "Swiften/JID/JID.h"  #include "Swiften/Elements/SecurityLabelsCatalog.h"  #include "Swiften/Elements/ErrorPayload.h"  #include "Swiften/Presence/PresenceOracle.h"  #include "Swiften/Queries/IQRouter.h"  #include "Swiften/Base/IDGenerator.h"  namespace Swift {  	class IQRouter; @@ -78,22 +79,23 @@ namespace Swift {  			IDGenerator idGenerator_;  			std::string lastSentMessageStanzaID_;  			void createDayChangeTimer();  			void handleSendMessageRequest(const std::string &body, bool isCorrectionMessage);  			void handleAllMessagesRead();  			void handleSecurityLabelsCatalogResponse(boost::shared_ptr<SecurityLabelsCatalog>, ErrorPayload::ref error);  			void handleDayChangeTick();  			void handleMUCInvitation(Message::ref message);  			void handleMediatedMUCInvitation(Message::ref message); +			void handleGeneralMUCInvitation(MUCInviteEvent::ref event);  		protected:  			JID selfJID_; -			std::vector<boost::shared_ptr<MessageEvent> > unreadMessages_; +			std::vector<boost::shared_ptr<StanzaEvent> > unreadMessages_;  			StanzaChannel* stanzaChannel_;  			IQRouter* iqRouter_;  			ChatWindowFactory* chatWindowFactory_;  			ChatWindow* chatWindow_;  			JID toJID_;  			bool labelsEnabled_;  			std::map<JID, std::string> lastMessagesUIID_;  			PresenceOracle* presenceOracle_;  			AvatarManager* avatarManager_; | 
 Swift
 Swift