diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-11-15 13:15:15 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-11-15 13:15:15 (GMT) |
commit | 0c6c79df29c58ff8790941ea40d40f84fae773c6 (patch) | |
tree | 0e7c99f5a8ad8ec286e89f1a69630d6de468ec30 /Swift | |
parent | 004677623739ef53ae9f565d3ffd4d2b02a65d5a (diff) | |
download | swift-contrib-0c6c79df29c58ff8790941ea40d40f84fae773c6.zip swift-contrib-0c6c79df29c58ff8790941ea40d40f84fae773c6.tar.bz2 |
Clean MUC joins slightly.
In an attempt to catch errors, this doesn't
Resolves: #691
but does add an assert that may help.
It also fixes an error with created rooms not receiving updates presences.
Release-Notes: Newly-created rooms will now receive your presence updates, consistent with existing rooms.
Diffstat (limited to 'Swift')
-rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 32 | ||||
-rw-r--r-- | Swift/Controllers/Chat/ChatsManager.h | 1 | ||||
-rw-r--r-- | Swift/Controllers/Chat/MUCController.cpp | 1 | ||||
-rw-r--r-- | Swift/Controllers/UIInterfaces/ChatListWindow.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/ChatList/ChatListGroupItem.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/ChatList/ChatListModel.cpp | 6 | ||||
-rw-r--r-- | Swift/QtUI/ChatList/ChatListModel.h | 1 | ||||
-rw-r--r-- | Swift/QtUI/ChatList/QtChatListWindow.cpp | 4 | ||||
-rw-r--r-- | Swift/QtUI/ChatList/QtChatListWindow.h | 1 |
9 files changed, 40 insertions, 8 deletions
diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index e1a9adc..2fc5a43 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -39,16 +39,11 @@ ChatsManager::ChatsManager(JID jid, StanzaChannel* stanzaChannel, IQRouter* iqRo serverDiscoInfo_ = boost::shared_ptr<DiscoInfo>(new DiscoInfo()); presenceSender_ = presenceSender; uiEventStream_ = uiEventStream; - mucBookmarkManager_ = new MUCBookmarkManager(iqRouter); - mucBookmarkManager_->onBookmarksReady.connect(boost::bind(&ChatsManager::handleBookmarksReady, this)); - mucBookmarkManager_->onBookmarkAdded.connect(boost::bind(&ChatsManager::handleMUCBookmarkAdded, this, _1)); - mucBookmarkManager_->onBookmarkRemoved.connect(boost::bind(&ChatsManager::handleMUCBookmarkRemoved, this, _1)); + mucBookmarkManager_ = NULL; presenceOracle_->onPresenceChange.connect(boost::bind(&ChatsManager::handlePresenceChange, this, _1)); uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&ChatsManager::handleUIEvent, this, _1)); chatListWindow_ = chatListWindowFactory->createWindow(uiEventStream_); - if (chatListWindow_) { - chatListWindow_->setBookmarksEnabled(false); - } + setupBookmarks(); } ChatsManager::~ChatsManager() { @@ -61,6 +56,20 @@ ChatsManager::~ChatsManager() { delete mucBookmarkManager_; } +void ChatsManager::setupBookmarks() { + if (!mucBookmarkManager_) { + mucBookmarkManager_ = new MUCBookmarkManager(iqRouter_); + mucBookmarkManager_->onBookmarksReady.connect(boost::bind(&ChatsManager::handleBookmarksReady, this)); + mucBookmarkManager_->onBookmarkAdded.connect(boost::bind(&ChatsManager::handleMUCBookmarkAdded, this, _1)); + mucBookmarkManager_->onBookmarkRemoved.connect(boost::bind(&ChatsManager::handleMUCBookmarkRemoved, this, _1)); + + if (chatListWindow_) { + chatListWindow_->setBookmarksEnabled(false); + chatListWindow_->clear(); + } + } +} + void ChatsManager::handleBookmarksReady() { if (chatListWindow_) { chatListWindow_->setBookmarksEnabled(true); @@ -161,7 +170,14 @@ void ChatsManager::setOnline(bool enabled) { controllerPair.second->rejoin(); } } - chatListWindow_->setBookmarksEnabled(enabled); + if (!enabled) { + delete mucBookmarkManager_; + mucBookmarkManager_ = NULL; + chatListWindow_->setBookmarksEnabled(false); + } else { + setupBookmarks(); + } + } void ChatsManager::handleChatRequest(const String &contact) { diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index 6dab532..2b771eb 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -56,6 +56,7 @@ namespace Swift { void handleMUCBookmarkRemoved(const MUCBookmark& bookmark); void handleUserLeftMUC(MUCController* mucController); void handleBookmarksReady(); + void setupBookmarks(); ChatController* getChatControllerOrFindAnother(const JID &contact); ChatController* createNewChatController(const JID &contact); ChatController* getChatControllerOrCreate(const JID &contact); diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index 6ac6a0c..975a2d2 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp @@ -284,6 +284,7 @@ String MUCController::roleToGroupName(MUCOccupant::Role role) { void MUCController::setOnline(bool online) { ChatControllerBase::setOnline(online); if (!online) { + muc_->part(); parting_ = true; processUserPart(); } else { diff --git a/Swift/Controllers/UIInterfaces/ChatListWindow.h b/Swift/Controllers/UIInterfaces/ChatListWindow.h index 3a7c30e..a2a0874 100644 --- a/Swift/Controllers/UIInterfaces/ChatListWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatListWindow.h @@ -18,5 +18,6 @@ namespace Swift { virtual void setBookmarksEnabled(bool enabled) = 0; virtual void addMUCBookmark(const MUCBookmark& bookmark) = 0; virtual void removeMUCBookmark(const MUCBookmark& bookmark) = 0; + virtual void clear() = 0; }; } diff --git a/Swift/QtUI/ChatList/ChatListGroupItem.h b/Swift/QtUI/ChatList/ChatListGroupItem.h index 389410a..cc4d4af 100644 --- a/Swift/QtUI/ChatList/ChatListGroupItem.h +++ b/Swift/QtUI/ChatList/ChatListGroupItem.h @@ -20,6 +20,7 @@ namespace Swift { ChatListItem* item(int i) {return items_[i];}; int row(ChatListItem* item) {return items_.indexOf(item);}; QVariant data(int role) const {return (role == Qt::DisplayRole) ? name_ : QVariant();}; + void clear() {items_.clear();}; private: static bool pointerItemLessThan(const ChatListItem* first, const ChatListItem* second) { QString myName = first->data(Qt::DisplayRole).toString().toLower(); diff --git a/Swift/QtUI/ChatList/ChatListModel.cpp b/Swift/QtUI/ChatList/ChatListModel.cpp index 50a6ad3..39b6a3c 100644 --- a/Swift/QtUI/ChatList/ChatListModel.cpp +++ b/Swift/QtUI/ChatList/ChatListModel.cpp @@ -16,6 +16,12 @@ ChatListModel::ChatListModel() { root_->addItem(mucBookmarks_); } +void ChatListModel::clear() { + emit layoutAboutToBeChanged(); + mucBookmarks_->clear(); + emit layoutChanged(); +} + void ChatListModel::addMUCBookmark(const Swift::MUCBookmark& bookmark) { emit layoutAboutToBeChanged(); mucBookmarks_->addItem(new ChatListMUCItem(bookmark, mucBookmarks_)); diff --git a/Swift/QtUI/ChatList/ChatListModel.h b/Swift/QtUI/ChatList/ChatListModel.h index 05fa60b..adde148 100644 --- a/Swift/QtUI/ChatList/ChatListModel.h +++ b/Swift/QtUI/ChatList/ChatListModel.h @@ -28,6 +28,7 @@ namespace Swift { QModelIndex parent(const QModelIndex& index) const; int rowCount(const QModelIndex& parent = QModelIndex()) const; ChatListItem* getItemForIndex(const QModelIndex& index) const; + void clear(); private: ChatListGroupItem* mucBookmarks_; ChatListGroupItem* root_; diff --git a/Swift/QtUI/ChatList/QtChatListWindow.cpp b/Swift/QtUI/ChatList/QtChatListWindow.cpp index 887d9a4..48ccf7f 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.cpp +++ b/Swift/QtUI/ChatList/QtChatListWindow.cpp @@ -79,6 +79,10 @@ void QtChatListWindow::handleItemActivated(const QModelIndex& index) { } } +void QtChatListWindow::clear() { + model_->clear(); +} + void QtChatListWindow::addMUCBookmark(const MUCBookmark& bookmark) { model_->addMUCBookmark(bookmark); } diff --git a/Swift/QtUI/ChatList/QtChatListWindow.h b/Swift/QtUI/ChatList/QtChatListWindow.h index 2c13300..b389474 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.h +++ b/Swift/QtUI/ChatList/QtChatListWindow.h @@ -24,6 +24,7 @@ namespace Swift { void addMUCBookmark(const MUCBookmark& bookmark); void removeMUCBookmark(const MUCBookmark& bookmark); void setBookmarksEnabled(bool enabled); + void clear(); private slots: void handleItemActivated(const QModelIndex&); void handleAddBookmark(); |