diff options
author | Tobias Markmann <tm@ayena.de> | 2016-12-08 08:55:19 (GMT) |
---|---|---|
committer | Edwin Mons <edwin.mons@isode.com> | 2016-12-09 08:15:44 (GMT) |
commit | da7162b6e80ed6ce802bece3891fe85f30770c56 (patch) | |
tree | 11cffaa17e475a0854b0726bdb4d4f126632dbe9 /Swift/Controllers/Chat/UserSearchController.cpp | |
parent | c65a90e2a73814d09ad8c60adc4a259e90006db7 (diff) | |
download | swift-da7162b6e80ed6ce802bece3891fe85f30770c56.zip swift-da7162b6e80ed6ce802bece3891fe85f30770c56.tar.bz2 |
Fix issue with invites to MUC if a MUC PM for that room is open
Previously if you wanted to invite people to a MUC and had
a PM window for a MUC occupant open at the same time, the
InviteToMUCUIEvent would be handled by the PM window, by the
ChatController of the PM window and not the MUCController of
the MUC window.
Test-Information:
Verified that some scenarios work correctly:
- Tested a drop to a MUC window while a MUC PM window is open
to an occupant in the MUC. Previously this crashed due to
ChatsManager::localMUCServiceJID_ being empty.
- Test that impromptu MUC creation to a normal chat works.
- Test that impromptu MUC creation to a MUC PM chat works.
All unit and integration tests pass on macOS 10.12.1.
Change-Id: Ib20de7e925e3503308211936ee47d4ba829d0394
Diffstat (limited to 'Swift/Controllers/Chat/UserSearchController.cpp')
-rw-r--r-- | Swift/Controllers/Chat/UserSearchController.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/Swift/Controllers/Chat/UserSearchController.cpp b/Swift/Controllers/Chat/UserSearchController.cpp index 91e0dea..91de670 100644 --- a/Swift/Controllers/Chat/UserSearchController.cpp +++ b/Swift/Controllers/Chat/UserSearchController.cpp @@ -54,92 +54,93 @@ UserSearchController::~UserSearchController() { window_->onContactSuggestionsRequested.disconnect(boost::bind(&UserSearchController::handleContactSuggestionsRequested, this, _1)); window_->onJIDUpdateRequested.disconnect(boost::bind(&UserSearchController::handleJIDUpdateRequested, this, _1)); window_->onJIDAddRequested.disconnect(boost::bind(&UserSearchController::handleJIDAddRequested, this, _1)); window_->onJIDEditFieldChanged.disconnect(boost::bind(&UserSearchController::handleJIDEditingFinished, this, _1)); delete window_; } presenceOracle_->onPresenceChange.disconnect(boost::bind(&UserSearchController::handlePresenceChanged, this, _1)); avatarManager_->onAvatarChanged.disconnect(boost::bind(&UserSearchController::handleAvatarChanged, this, _1)); vcardManager_->onVCardChanged.disconnect(boost::bind(&UserSearchController::handleVCardChanged, this, _1, _2)); uiEventStream_->onUIEvent.disconnect(boost::bind(&UserSearchController::handleUIEvent, this, _1)); } UserSearchWindow* UserSearchController::getUserSearchWindow() { initializeUserWindow(); assert(window_); return window_; } void UserSearchController::setCanInitiateImpromptuMUC(bool supportsImpromptu) { if (!window_) { initializeUserWindow(); } if (window_) { window_->setCanStartImpromptuChats(supportsImpromptu); } // Else doesn't support search } void UserSearchController::handleUIEvent(std::shared_ptr<UIEvent> event) { bool handle = false; std::shared_ptr<RequestAddUserDialogUIEvent> addUserRequest = std::shared_ptr<RequestAddUserDialogUIEvent>(); - RequestInviteToMUCUIEvent::ref inviteToMUCRequest = RequestInviteToMUCUIEvent::ref(); + auto inviteToMUCRequest = RequestInviteToMUCUIEvent::ref(); switch (type_) { case AddContact: if ((addUserRequest = std::dynamic_pointer_cast<RequestAddUserDialogUIEvent>(event))) { handle = true; } break; case StartChat: if (std::dynamic_pointer_cast<RequestChatWithUserDialogUIEvent>(event)) { handle = true; } break; case InviteToChat: if ((inviteToMUCRequest = std::dynamic_pointer_cast<RequestInviteToMUCUIEvent>(event))) { handle = true; } break; } if (handle) { initializeUserWindow(); window_->show(); window_->addSavedServices(savedDirectories_); if (addUserRequest) { const std::string& name = addUserRequest->getPredefinedName(); const JID& jid = addUserRequest->getPredefinedJID(); if (!name.empty() && jid.isValid()) { window_->prepopulateJIDAndName(jid, name); } - } else if (inviteToMUCRequest) { + } + else if (inviteToMUCRequest) { window_->setCanSupplyDescription(!inviteToMUCRequest->isImpromptu()); window_->setJIDs(inviteToMUCRequest->getInvites()); - window_->setRoomJID(inviteToMUCRequest->getRoom()); + window_->setOriginator(inviteToMUCRequest->getOriginator()); } return; } } void UserSearchController::handleFormRequested(const JID& service) { window_->setSearchError(false); window_->setServerSupportsSearch(true); //Abort a previous search if is active endDiscoWalker(); delete discoWalker_; discoWalker_ = new DiscoServiceWalker(service, iqRouter_); discoWalker_->onServiceFound.connect(boost::bind(&UserSearchController::handleDiscoServiceFound, this, _1, _2)); discoWalker_->onWalkComplete.connect(boost::bind(&UserSearchController::handleDiscoWalkFinished, this)); discoWalker_->beginWalk(); } void UserSearchController::endDiscoWalker() { if (discoWalker_) { discoWalker_->endWalk(); discoWalker_->onServiceFound.disconnect(boost::bind(&UserSearchController::handleDiscoServiceFound, this, _1, _2)); discoWalker_->onWalkComplete.disconnect(boost::bind(&UserSearchController::handleDiscoWalkFinished, this)); } } void UserSearchController::handleDiscoServiceFound(const JID& jid, std::shared_ptr<DiscoInfo> info) { //bool isUserDirectory = false; bool supports55 = false; // TODO: Cleanup code |