summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-04-30 16:56:33 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-04-30 16:56:33 (GMT)
commitb566cac68d7bb91f726b5353318b3a5eddd8f3c2 (patch)
tree6b9e7cdaf3273cde638dbfe9cbec0405c5708113 /Swiften/MUC/MUCBookmarkManager.cpp
parent499f41d456203837b1ab8eb558a2855238957593 (diff)
downloadswift-b566cac68d7bb91f726b5353318b3a5eddd8f3c2.zip
swift-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.cpp47
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();
}