diff options
| -rw-r--r-- | Swiften/Elements/Storage.h | 13 | ||||
| -rw-r--r-- | Swiften/MUC/MUCBookmark.h | 71 | ||||
| -rw-r--r-- | Swiften/MUC/MUCBookmarkManager.cpp | 25 | ||||
| -rw-r--r-- | Swiften/MUC/MUCBookmarkManager.h | 2 | ||||
| -rw-r--r-- | Swiften/Queries/Requests/SetPrivateStorageRequest.h | 2 | 
5 files changed, 85 insertions, 28 deletions
diff --git a/Swiften/Elements/Storage.h b/Swiften/Elements/Storage.h index 7d978d1..447ca2e 100644 --- a/Swiften/Elements/Storage.h +++ b/Swiften/Elements/Storage.h @@ -35,12 +35,17 @@ namespace Swift {  			Storage() {  			} +			 +			void clearRooms() { +				rooms.clear(); +			} +  			const std::vector<Room>& getRooms() const { -				return conferences; +				return rooms;  			} -			void addRoom(const Room& conference) { -				conferences.push_back(conference); +			void addRoom(const Room& room) { +				rooms.push_back(room);  			}  			const std::vector<URL>& getURLs() const { @@ -52,7 +57,7 @@ namespace Swift {  			}  		private: -			std::vector<Room> conferences; +			std::vector<Room> rooms;  			std::vector<URL> urls;  	};  } diff --git a/Swiften/MUC/MUCBookmark.h b/Swiften/MUC/MUCBookmark.h index 7afbe76..c6c22bf 100644 --- a/Swiften/MUC/MUCBookmark.h +++ b/Swiften/MUC/MUCBookmark.h @@ -10,21 +10,70 @@  #include "Swiften/Base/String.h"  #include "Swiften/JID/JID.h" +#include "Swiften/Elements/Storage.h"  namespace Swift {  	class MUCBookmark {  		public: -			MUCBookmark(const JID& room, const String& bookmarkName) : room_(room), name_(bookmarkName){}; -			void setAutojoin(bool enabled) {autojoin_ = enabled;}; -			void setNick(const boost::optional<String>& nick) {nick_ = nick;}; -			void setPassword(const boost::optional<String>& password) {password_ = password;}; -			bool getAutojoin() const {return autojoin_;}; -			const boost::optional<String>& getNick() const {return nick_;}; -			const boost::optional<String>& getPassword() const {return password_;}; -			const String& getName() const {return name_;}; -			const JID& getRoom() const {return room_;}; - -			bool operator==(const MUCBookmark& rhs) const {return rhs.room_ == room_ && rhs.name_ == name_ && rhs.nick_ == nick_ && rhs.password_ == password_ && rhs.autojoin_ == autojoin_;}; +			MUCBookmark(const Storage::Room& room) { +				name_ = room.name; +				room_ = room.jid; +				nick_ = room.nick; +				password_ = room.password; +			} + +			MUCBookmark(const JID& room, const String& bookmarkName) : room_(room), name_(bookmarkName) { +			} + +			void setAutojoin(bool enabled) { +				autojoin_ = enabled;  +			} + +			bool getAutojoin() const { +				return autojoin_; +			} + +			void setNick(const boost::optional<String>& nick) { +				nick_ = nick; +			} + +			void setPassword(const boost::optional<String>& password) { +				password_ = password; +			} + +			const boost::optional<String>& getNick() const { +				return nick_; +			} + +			const boost::optional<String>& getPassword() const { +				return password_; +			} + +			const String& getName() const { +				return name_; +			} + +			const JID& getRoom() const { +				return room_; +			} + +			bool operator==(const MUCBookmark& rhs) const { +				return rhs.room_ == room_ && rhs.name_ == name_ && rhs.nick_ == nick_ && rhs.password_ == password_ && rhs.autojoin_ == autojoin_; +			} + +			Storage::Room toStorage() const { +				Storage::Room room; +				room.name = name_; +				room.jid = room_; +				if (nick_) { +					room.nick = *nick_; +				} +				if (password_) { +					room.password = *password_; +				} +				return room; +			} +  		private:  			JID room_;  			String name_; diff --git a/Swiften/MUC/MUCBookmarkManager.cpp b/Swiften/MUC/MUCBookmarkManager.cpp index 3675635..cc1c8d6 100644 --- a/Swiften/MUC/MUCBookmarkManager.cpp +++ b/Swiften/MUC/MUCBookmarkManager.cpp @@ -10,6 +10,8 @@  #include <iostream>  #include "Swiften/Queries/IQRouter.h" +#include "Swiften/Queries/Requests/GetPrivateStorageRequest.h" +#include "Swiften/Queries/Requests/SetPrivateStorageRequest.h"  namespace Swift { @@ -29,16 +31,7 @@ void MUCBookmarkManager::handleBookmarksReceived(boost::shared_ptr<Storage> payl  	std::vector<MUCBookmark> receivedBookmarks;  	foreach (Storage::Room room, payload->getRooms()) { -		String name = (!room.name.isEmpty()) ? room.name : room.jid.getNode(); -		MUCBookmark bookmark(room.jid, name); -		bookmark.setAutojoin(room.autoJoin); -		if (!room.nick.isEmpty()) { -			bookmark.setNick(room.nick); -		} -		if (!room.password.isEmpty()) { -			bookmark.setPassword(room.password); -		} -		receivedBookmarks.push_back(bookmark); +		receivedBookmarks.push_back(MUCBookmark(room));  	}  	std::vector<MUCBookmark> newBookmarks; @@ -95,7 +88,17 @@ void MUCBookmarkManager::removeBookmark(const MUCBookmark& bookmark) {  }  void MUCBookmarkManager::flush() { -	//FIXME: some code may be useful +	// Update the storage element +	storage->clearRooms(); +	foreach(const MUCBookmark& bookmark, bookmarks_) { +		storage->addRoom(bookmark.toStorage()); +	} + +	// Send an iq to save the storage element +	boost::shared_ptr<SetPrivateStorageRequest<Storage> > request(new SetPrivateStorageRequest<Storage>(storage, iqRouter_)); +	// FIXME: We should care about the result +	//request->onResponse.connect(boost::bind(&MUCBookmarkManager::handleBookmarksSet, this, _1, _2)); +	request->send();  }  const std::vector<MUCBookmark>& MUCBookmarkManager::getBookmarks() const { diff --git a/Swiften/MUC/MUCBookmarkManager.h b/Swiften/MUC/MUCBookmarkManager.h index 594a805..136c76f 100644 --- a/Swiften/MUC/MUCBookmarkManager.h +++ b/Swiften/MUC/MUCBookmarkManager.h @@ -14,7 +14,7 @@  #include "Swiften/MUC/MUCBookmark.h"  #include "Swiften/Elements/Storage.h" -#include "Swiften/Queries/Requests/GetPrivateStorageRequest.h" +#include "Swiften/Elements/ErrorPayload.h"  namespace Swift {  	class IQRouter; diff --git a/Swiften/Queries/Requests/SetPrivateStorageRequest.h b/Swiften/Queries/Requests/SetPrivateStorageRequest.h index 997d434..2bdb133 100644 --- a/Swiften/Queries/Requests/SetPrivateStorageRequest.h +++ b/Swiften/Queries/Requests/SetPrivateStorageRequest.h @@ -20,7 +20,7 @@ namespace Swift {  			SetPrivateStorageRequest(boost::shared_ptr<PAYLOAD_TYPE> payload, IQRouter* router) : Request(IQ::Set, JID(), boost::shared_ptr<PrivateStorage>(new PrivateStorage(payload)), router) {  			} -			virtual void handleResponse(boost::shared_ptr<Payload> payload, boost::optional<ErrorPayload> error) { +			virtual void handleResponse(boost::shared_ptr<Payload>, boost::optional<ErrorPayload> error) {  				onResponse(error);  			}  | 
 Swift