diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-04-30 16:56:33 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-04-30 16:56:33 (GMT) |
commit | b566cac68d7bb91f726b5353318b3a5eddd8f3c2 (patch) | |
tree | 6b9e7cdaf3273cde638dbfe9cbec0405c5708113 /Swiften/MUC/MUCBookmarkManager.cpp | |
parent | 499f41d456203837b1ab8eb558a2855238957593 (diff) | |
download | swift-contrib-b566cac68d7bb91f726b5353318b3a5eddd8f3c2.zip swift-contrib-b566cac68d7bb91f726b5353318b3a5eddd8f3c2.tar.bz2 |
Support adding/removing bookmarks from the UI
Doesn't support editing meaningfully, nor do changes get saved.
Diffstat (limited to 'Swiften/MUC/MUCBookmarkManager.cpp')
-rw-r--r-- | Swiften/MUC/MUCBookmarkManager.cpp | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/Swiften/MUC/MUCBookmarkManager.cpp b/Swiften/MUC/MUCBookmarkManager.cpp index d99bdff..72e63f2 100644 --- a/Swiften/MUC/MUCBookmarkManager.cpp +++ b/Swiften/MUC/MUCBookmarkManager.cpp @@ -7,6 +7,7 @@ #include "MUCBookmarkManager.h" #include <boost/bind.hpp> +#include <iostream> #include "Swiften/Queries/IQRouter.h" @@ -24,7 +25,7 @@ void MUCBookmarkManager::handleBookmarksReceived(boost::shared_ptr<Storage> payl if (error) { return; } - std::vector<boost::shared_ptr<MUCBookmark> > newBookmarks; + std::vector<boost::shared_ptr<MUCBookmark> > receivedBookmarks; foreach (Storage::Conference conference, payload->getConferences()) { String name = (!conference.name.isEmpty()) ? conference.name : conference.jid.getNode(); boost::shared_ptr<MUCBookmark> bookmark(new MUCBookmark(conference.jid, name)); @@ -35,25 +36,54 @@ void MUCBookmarkManager::handleBookmarksReceived(boost::shared_ptr<Storage> payl if (!conference.password.isEmpty()) { bookmark->setPassword(conference.password); } - newBookmarks.push_back(bookmark); + receivedBookmarks.push_back(bookmark); } - //FIXME: This needs to be fixed before we start doing anything supporting updates + std::vector<boost::shared_ptr<MUCBookmark> > newBookmarks; foreach (boost::shared_ptr<MUCBookmark> oldBookmark, bookmarks_) { - onBookmarkRemoved(oldBookmark); + if (containsEquivalent(receivedBookmarks, oldBookmark)) { + newBookmarks.push_back(oldBookmark); + } else { + onBookmarkRemoved(oldBookmark); + } } - foreach (boost::shared_ptr<MUCBookmark> newBookmark, newBookmarks) { - onBookmarkAdded(newBookmark); + foreach (boost::shared_ptr<MUCBookmark> newBookmark, receivedBookmarks) { + if (!containsEquivalent(bookmarks_, newBookmark)) { + newBookmarks.push_back(newBookmark); + onBookmarkAdded(newBookmark); + } } + bookmarks_ = newBookmarks; +} +bool MUCBookmarkManager::containsEquivalent(std::vector<boost::shared_ptr<MUCBookmark> > list, boost::shared_ptr<MUCBookmark> bookmark) { + foreach (boost::shared_ptr<MUCBookmark> listBookmark, list) { + if (*listBookmark == *bookmark) { + return true; + } + } + return false; +} +void MUCBookmarkManager::replaceBookmark(boost::shared_ptr<MUCBookmark> oldBookmark, boost::shared_ptr<MUCBookmark> newBookmark) { + for (size_t i = 0; i < bookmarks_.size(); i++) { + boost::shared_ptr<MUCBookmark> bookmark(bookmarks_[i]); + if (bookmark.get() == oldBookmark.get()) { + bookmarks_[i] = newBookmark; + flush(); + onBookmarkRemoved(oldBookmark); + onBookmarkAdded(newBookmark); + return; + } + } } void MUCBookmarkManager::addBookmark(boost::shared_ptr<MUCBookmark> bookmark) { + std::cout << "adding bookmark with pointer " << bookmark.get() << std::endl; bookmarks_.push_back(bookmark); - flush(); onBookmarkAdded(bookmark); + flush(); } @@ -63,10 +93,9 @@ void MUCBookmarkManager::removeBookmark(boost::shared_ptr<MUCBookmark> bookmark) if ((*it).get() == bookmark.get()) { bookmarks_.erase(it); onBookmarkRemoved(bookmark); - return; + break; } } - assert(false); flush(); } |