diff options
Diffstat (limited to 'Swift/Controllers/Chat')
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 17 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/MUCController.cpp | 9 |
2 files changed, 17 insertions, 9 deletions
diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 3cd9169..30870fa 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp | |||
| @@ -688,8 +688,6 @@ void ChatsManager::setOnline(bool enabled) { | |||
| 688 | } | 688 | } |
| 689 | } | 689 | } |
| 690 | if (!enabled) { | 690 | if (!enabled) { |
| 691 | delete mucBookmarkManager_; | ||
| 692 | mucBookmarkManager_ = NULL; | ||
| 693 | chatListWindow_->setBookmarksEnabled(false); | 691 | chatListWindow_->setBookmarksEnabled(false); |
| 694 | markAllRecentsOffline(); | 692 | markAllRecentsOffline(); |
| 695 | } else { | 693 | } else { |
| @@ -775,10 +773,6 @@ void ChatsManager::rebindControllerJID(const JID& from, const JID& to) { | |||
| 775 | 773 | ||
| 776 | MUC::ref ChatsManager::handleJoinMUCRequest(const JID &mucJID, const boost::optional<std::string>& password, const boost::optional<std::string>& nickMaybe, bool addAutoJoin, bool createAsReservedIfNew, bool isImpromptu, ChatWindow* reuseChatwindow) { | 774 | MUC::ref ChatsManager::handleJoinMUCRequest(const JID &mucJID, const boost::optional<std::string>& password, const boost::optional<std::string>& nickMaybe, bool addAutoJoin, bool createAsReservedIfNew, bool isImpromptu, ChatWindow* reuseChatwindow) { |
| 777 | MUC::ref muc; | 775 | MUC::ref muc; |
| 778 | if (!stanzaChannel_->isAvailable()) { | ||
| 779 | /* This is potentially not the optimal solution, but it will avoid consistency issues.*/ | ||
| 780 | return muc; | ||
| 781 | } | ||
| 782 | if (addAutoJoin) { | 776 | if (addAutoJoin) { |
| 783 | MUCBookmark bookmark(mucJID, mucJID.getNode()); | 777 | MUCBookmark bookmark(mucJID, mucJID.getNode()); |
| 784 | bookmark.setAutojoin(true); | 778 | bookmark.setAutojoin(true); |
| @@ -793,7 +787,9 @@ MUC::ref ChatsManager::handleJoinMUCRequest(const JID &mucJID, const boost::opti | |||
| 793 | 787 | ||
| 794 | std::map<JID, MUCController*>::iterator it = mucControllers_.find(mucJID); | 788 | std::map<JID, MUCController*>::iterator it = mucControllers_.find(mucJID); |
| 795 | if (it != mucControllers_.end()) { | 789 | if (it != mucControllers_.end()) { |
| 796 | it->second->rejoin(); | 790 | if (stanzaChannel_->isAvailable()) { |
| 791 | it->second->rejoin(); | ||
| 792 | } | ||
| 797 | } else { | 793 | } else { |
| 798 | std::string nick = (nickMaybe && !(*nickMaybe).empty()) ? nickMaybe.get() : nickResolver_->jidToNick(jid_); | 794 | std::string nick = (nickMaybe && !(*nickMaybe).empty()) ? nickMaybe.get() : nickResolver_->jidToNick(jid_); |
| 799 | muc = mucManager->createMUC(mucJID); | 795 | muc = mucManager->createMUC(mucJID); |
| @@ -825,6 +821,13 @@ MUC::ref ChatsManager::handleJoinMUCRequest(const JID &mucJID, const boost::opti | |||
| 825 | controller->onUserNicknameChanged.connect(boost::bind(&ChatsManager::handleUserNicknameChanged, this, controller, _1, _2)); | 821 | controller->onUserNicknameChanged.connect(boost::bind(&ChatsManager::handleUserNicknameChanged, this, controller, _1, _2)); |
| 826 | controller->onActivity.connect(boost::bind(&ChatsManager::handleChatActivity, this, mucJID.toBare(), _1, true)); | 822 | controller->onActivity.connect(boost::bind(&ChatsManager::handleChatActivity, this, mucJID.toBare(), _1, true)); |
| 827 | controller->onUnreadCountChanged.connect(boost::bind(&ChatsManager::handleUnreadCountChanged, this, controller)); | 823 | controller->onUnreadCountChanged.connect(boost::bind(&ChatsManager::handleUnreadCountChanged, this, controller)); |
| 824 | if (!stanzaChannel_->isAvailable()) { | ||
| 825 | /* When online, the MUC is added to the registry in MUCImpl::internalJoin. This method is not | ||
| 826 | * called when Swift is offline, so we add it here as only MUCs in the registry are rejoined | ||
| 827 | * when going back online. | ||
| 828 | */ | ||
| 829 | mucRegistry_->addMUC(mucJID.toBare()); | ||
| 830 | } | ||
| 828 | handleChatActivity(mucJID.toBare(), "", true); | 831 | handleChatActivity(mucJID.toBare(), "", true); |
| 829 | } | 832 | } |
| 830 | 833 | ||
diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index 5788465..c9936c0 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp | |||
| @@ -133,11 +133,14 @@ MUCController::MUCController ( | |||
| 133 | muc_->onConfigurationFormReceived.connect(boost::bind(&MUCController::handleConfigurationFormReceived, this, _1)); | 133 | muc_->onConfigurationFormReceived.connect(boost::bind(&MUCController::handleConfigurationFormReceived, this, _1)); |
| 134 | highlighter_->setMode(isImpromptu_ ? Highlighter::ChatMode : Highlighter::MUCMode); | 134 | highlighter_->setMode(isImpromptu_ ? Highlighter::ChatMode : Highlighter::MUCMode); |
| 135 | highlighter_->setNick(nick_); | 135 | highlighter_->setNick(nick_); |
| 136 | if (timerFactory) { | 136 | if (timerFactory && stanzaChannel_->isAvailable()) { |
| 137 | loginCheckTimer_ = boost::shared_ptr<Timer>(timerFactory->createTimer(MUC_JOIN_WARNING_TIMEOUT_MILLISECONDS)); | 137 | loginCheckTimer_ = boost::shared_ptr<Timer>(timerFactory->createTimer(MUC_JOIN_WARNING_TIMEOUT_MILLISECONDS)); |
| 138 | loginCheckTimer_->onTick.connect(boost::bind(&MUCController::handleJoinTimeoutTick, this)); | 138 | loginCheckTimer_->onTick.connect(boost::bind(&MUCController::handleJoinTimeoutTick, this)); |
| 139 | loginCheckTimer_->start(); | 139 | loginCheckTimer_->start(); |
| 140 | } | 140 | } |
| 141 | else { | ||
| 142 | chatWindow_->addSystemMessage(chatMessageParser_->parseMessageBody(QT_TRANSLATE_NOOP("", "You are currently offline. You will enter this room when you are connected.")), ChatWindow::DefaultDirection); | ||
| 143 | } | ||
| 141 | if (isImpromptu) { | 144 | if (isImpromptu) { |
| 142 | muc_->onUnlocked.connect(boost::bind(&MUCController::handleRoomUnlocked, this)); | 145 | muc_->onUnlocked.connect(boost::bind(&MUCController::handleRoomUnlocked, this)); |
| 143 | chatWindow_->convertToMUC(ChatWindow::ImpromptuMUC); | 146 | chatWindow_->convertToMUC(ChatWindow::ImpromptuMUC); |
| @@ -147,7 +150,9 @@ MUCController::MUCController ( | |||
| 147 | chatWindow_->convertToMUC(ChatWindow::StandardMUC); | 150 | chatWindow_->convertToMUC(ChatWindow::StandardMUC); |
| 148 | chatWindow_->setName(muc->getJID().getNode()); | 151 | chatWindow_->setName(muc->getJID().getNode()); |
| 149 | } | 152 | } |
| 150 | setOnline(true); | 153 | if (stanzaChannel->isAvailable()) { |
| 154 | setOnline(true); | ||
| 155 | } | ||
| 151 | if (avatarManager_ != NULL) { | 156 | if (avatarManager_ != NULL) { |
| 152 | avatarChangedConnection_ = (avatarManager_->onAvatarChanged.connect(boost::bind(&MUCController::handleAvatarChanged, this, _1))); | 157 | avatarChangedConnection_ = (avatarManager_->onAvatarChanged.connect(boost::bind(&MUCController::handleAvatarChanged, this, _1))); |
| 153 | } | 158 | } |
Swift