diff options
| author | Richard Maudsley <richard.maudsley@isode.com> | 2014-05-06 13:08:57 (GMT) | 
|---|---|---|
| committer | Swift Review <review@swift.im> | 2014-05-29 16:18:23 (GMT) | 
| commit | b70a50f11da1ea57a0e89ff14882eed03944eb2a (patch) | |
| tree | bbe3d3f28104dcba7d276a7016da283665b8f326 /Swift | |
| parent | ab612d0f18ff545b4ebcb2bf2bb400996e751181 (diff) | |
| download | swift-contrib-b70a50f11da1ea57a0e89ff14882eed03944eb2a.zip swift-contrib-b70a50f11da1ea57a0e89ff14882eed03944eb2a.tar.bz2 | |
Right-click MUC in Recents to bookmark.
Change-Id: Idfb5907adf9bf53f0ac1f417dd57d49ecc897bb0
Diffstat (limited to 'Swift')
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 17 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/MUCController.cpp | 4 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/MUCController.h | 1 | ||||
| -rw-r--r-- | Swift/Controllers/UIInterfaces/ChatListWindow.h | 7 | ||||
| -rw-r--r-- | Swift/QtUI/ChatList/QtChatListWindow.cpp | 39 | ||||
| -rw-r--r-- | Swift/QtUI/ChatList/QtChatListWindow.h | 3 | 
6 files changed, 57 insertions, 14 deletions
| diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 654f735..1698b4a 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -12,4 +12,5 @@  #include <boost/archive/text_oarchive.hpp>  #include <boost/archive/text_iarchive.hpp> +#include <boost/serialization/optional.hpp>  #include <boost/serialization/vector.hpp>  #include <boost/serialization/map.hpp> @@ -63,4 +64,6 @@  #include <Swiften/Base/Log.h> +BOOST_CLASS_VERSION(Swift::ChatListWindow::Chat, 1) +  namespace boost {  namespace serialization { @@ -80,5 +83,5 @@ namespace serialization {  	} -	template<class Archive> void serialize(Archive& ar, Swift::ChatListWindow::Chat& chat, const unsigned int /*version*/) { +	template<class Archive> void serialize(Archive& ar, Swift::ChatListWindow::Chat& chat, const unsigned int version) {  		ar & chat.jid;  		ar & chat.chatName; @@ -87,4 +90,7 @@ namespace serialization {  		ar & chat.nick;  		ar & chat.impromptuJIDs; +		if (version > 0) { +			ar & chat.password; +		}  	}  } @@ -370,4 +376,5 @@ ChatListWindow::Chat ChatsManager::createChatListChatItem(const JID& jid, const  		StatusShow::Type type = StatusShow::None;  		std::string nick = ""; +		std::string password = "";  		if (controller) {  			unreadCount = controller->getUnreadCount(); @@ -377,6 +384,10 @@ ChatListWindow::Chat ChatsManager::createChatListChatItem(const JID& jid, const  			nick = controller->getNick(); +			if (controller->getPassword()) { +				password = *controller->getPassword(); +			} +  			if (controller->isImpromptu()) { -				ChatListWindow::Chat chat = ChatListWindow::Chat(jid, jid.toString(), activity, unreadCount, type, boost::filesystem::path(), true, nick); +				ChatListWindow::Chat chat = ChatListWindow::Chat(jid, jid.toString(), activity, unreadCount, type, boost::filesystem::path(), true, nick, password);  				typedef std::pair<std::string, JID> StringJIDPair;  				std::map<std::string, JID> participants = controller->getParticipantJIDs(); @@ -385,5 +396,5 @@ ChatListWindow::Chat ChatsManager::createChatListChatItem(const JID& jid, const  			}  		} -		return ChatListWindow::Chat(jid, jid.toString(), activity, unreadCount, type, boost::filesystem::path(), true, nick); +		return ChatListWindow::Chat(jid, jid.toString(), activity, unreadCount, type, boost::filesystem::path(), true, nick, password);  	} else {  		ChatController* controller = getChatControllerIfExists(jid, false); diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index 4860fc8..6bc7067 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp @@ -244,4 +244,8 @@ const std::string& MUCController::getNick() {  } +const boost::optional<std::string> MUCController::getPassword() const { +	return password_; +} +  bool MUCController::isImpromptu() const {  	return isImpromptu_; diff --git a/Swift/Controllers/Chat/MUCController.h b/Swift/Controllers/Chat/MUCController.h index e78ff77..feffaba 100644 --- a/Swift/Controllers/Chat/MUCController.h +++ b/Swift/Controllers/Chat/MUCController.h @@ -63,4 +63,5 @@ namespace Swift {  			bool isJoined();  			const std::string& getNick(); +			const boost::optional<std::string> getPassword() const;  			bool isImpromptu() const;  			std::map<std::string, JID> getParticipantJIDs() const; diff --git a/Swift/Controllers/UIInterfaces/ChatListWindow.h b/Swift/Controllers/UIInterfaces/ChatListWindow.h index 67cd0ff..38d8c3e 100644 --- a/Swift/Controllers/UIInterfaces/ChatListWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatListWindow.h @@ -1,4 +1,4 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2014 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information. @@ -23,6 +23,6 @@ namespace Swift {  				public:  					Chat() : statusType(StatusShow::None), isMUC(false), unreadCount(0) {} -					Chat(const JID& jid, const std::string& chatName, const std::string& activity, int unreadCount, StatusShow::Type statusType, const boost::filesystem::path& avatarPath, bool isMUC, const std::string& nick = "") -					: jid(jid), chatName(chatName), activity(activity), statusType(statusType), isMUC(isMUC), nick(nick), unreadCount(unreadCount), avatarPath(avatarPath) {} +					Chat(const JID& jid, const std::string& chatName, const std::string& activity, int unreadCount, StatusShow::Type statusType, const boost::filesystem::path& avatarPath, bool isMUC, const std::string& nick = "", const boost::optional<std::string> password = boost::optional<std::string>()) +					: jid(jid), chatName(chatName), activity(activity), statusType(statusType), isMUC(isMUC), nick(nick), password(password), unreadCount(unreadCount), avatarPath(avatarPath) {}  					/** Assume that nicks and other transient features aren't important for equality */  					bool operator==(const Chat& other) const { @@ -74,4 +74,5 @@ namespace Swift {  					bool isMUC;  					std::string nick; +					boost::optional<std::string> password;  					int unreadCount;  					boost::filesystem::path avatarPath; diff --git a/Swift/QtUI/ChatList/QtChatListWindow.cpp b/Swift/QtUI/ChatList/QtChatListWindow.cpp index 7455fb5..210124b 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.cpp +++ b/Swift/QtUI/ChatList/QtChatListWindow.cpp @@ -69,4 +69,8 @@ void QtChatListWindow::handleSettingChanged(const std::string& setting) {  } +void QtChatListWindow::handleClearRecentsRequested() { +	onClearRecentsRequested(); +} +  void QtChatListWindow::setBookmarksEnabled(bool enabled) {  	bookmarksEnabled_ = enabled; @@ -85,7 +89,9 @@ void QtChatListWindow::setupContextMenus() {  	mucMenu_->addAction(tr("Edit Bookmark"), this, SLOT(handleEditBookmark()));  	mucMenu_->addAction(tr("Remove Bookmark"), this, SLOT(handleRemoveBookmark())); +	mucRecentsMenu_ = new QMenu(); +	mucRecentsMenu_->addAction(tr("Add to Bookmarks"), this, SLOT(handleAddBookmarkFromRecents())); +	mucRecentsMenu_->addAction(tr("Clear recents"), this, SLOT(handleClearRecentsRequested()));  	emptyMenu_ = new QMenu();  	emptyMenu_->addAction(tr("Add New Bookmark"), this, SLOT(handleAddBookmark())); -	  } @@ -143,4 +149,15 @@ void QtChatListWindow::handleRemoveBookmark() {  } +void QtChatListWindow::handleAddBookmarkFromRecents() { +	ChatListRecentItem* item = dynamic_cast<ChatListRecentItem*>(contextMenuItem_); +	if (item) { +		const ChatListWindow::Chat& chat = item->getChat(); +		MUCBookmark bookmark(chat.jid, chat.jid.toBare().toString()); +		bookmark.setNick(chat.nick); +		bookmark.setPassword(chat.password); +		eventStream_->send(boost::shared_ptr<UIEvent>(new AddMUCBookmarkUIEvent(bookmark))); +	} +} +  void QtChatListWindow::handleAddBookmark() {  	(new QtAddBookmarkWindow(eventStream_))->show(); @@ -169,4 +186,5 @@ void QtChatListWindow::contextMenuEvent(QContextMenuEvent* event) {  		return;  	} +  	ChatListMUCItem* mucItem = dynamic_cast<ChatListMUCItem*>(baseItem);  	if (mucItem) { @@ -175,14 +193,19 @@ void QtChatListWindow::contextMenuEvent(QContextMenuEvent* event) {  		}  		mucMenu_->exec(QCursor::pos()); +		return;  	} -	else { -		QMenu menu; -		QAction* clearRecents = menu.addAction(tr("Clear recents")); -		menu.addAction(clearRecents); -		QAction* result = menu.exec(event->globalPos()); -		if (result == clearRecents) { -			onClearRecentsRequested(); + +	ChatListRecentItem* recentItem = dynamic_cast<ChatListRecentItem*>(baseItem); +	if (recentItem) { +		const ChatListWindow::Chat& chat = recentItem->getChat(); +		if (chat.isMUC) { +			mucRecentsMenu_->exec(QCursor::pos()); +			return;  		}  	} + +	QMenu menu; +	menu.addAction(tr("Clear recents"), this, SLOT(handleClearRecentsRequested())); +	menu.exec(event->globalPos());  } diff --git a/Swift/QtUI/ChatList/QtChatListWindow.h b/Swift/QtUI/ChatList/QtChatListWindow.h index e218266..1cba3a4 100644 --- a/Swift/QtUI/ChatList/QtChatListWindow.h +++ b/Swift/QtUI/ChatList/QtChatListWindow.h @@ -37,6 +37,8 @@ namespace Swift {  			void handleEditBookmark();  			void handleRemoveBookmark(); +			void handleAddBookmarkFromRecents();  			void handleClicked(const QModelIndex& index);  			void handleSettingChanged(const std::string& setting); +			void handleClearRecentsRequested();  		protected: @@ -52,4 +54,5 @@ namespace Swift {  			QMenu* mucMenu_;  			QMenu* emptyMenu_; +			QMenu* mucRecentsMenu_;  			ChatListItem* contextMenuItem_;  			SettingsProvider* settings_; | 
 Swift
 Swift