summaryrefslogtreecommitdiffstats
path: root/src/Common/UserLists/Util.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-09-30 01:51:01 +0200
committerMatthias Schiffer <matthias@gamezock.de>2009-09-30 01:51:01 +0200
commita158d1f367759bf0c110b2fdb21d7c00f5a9cea6 (patch)
tree9367dcc01f31271bb79d39ee692ee51880198573 /src/Common/UserLists/Util.cpp
parent1b3a914d5fdf5a578e24754845c6350c59c0b523 (diff)
downloadmad-a158d1f367759bf0c110b2fdb21d7c00f5a9cea6.tar
mad-a158d1f367759bf0c110b2fdb21d7c00f5a9cea6.zip
UserListDiff: Extended diffs to handle user renames; fixed a XmlData::List bug
Diffstat (limited to 'src/Common/UserLists/Util.cpp')
-rw-r--r--src/Common/UserLists/Util.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/Common/UserLists/Util.cpp b/src/Common/UserLists/Util.cpp
index cf04218..483383e 100644
--- a/src/Common/UserLists/Util.cpp
+++ b/src/Common/UserLists/Util.cpp
@@ -77,9 +77,13 @@ void Util::serializeUserListDiff(const UserListDiff *diff, XmlData *data) {
for(std::set<UserListEntry>::const_iterator user = diff->getDeletedUsers().begin(); user != diff->getDeletedUsers().end(); ++user)
serializeUserListEntry(&*user, userList->addEntry());
- userList = data->createList("unchangedUsers");
- for(std::set<UserListEntry>::const_iterator user = diff->getUnchangedUsers().begin(); user != diff->getUnchangedUsers().end(); ++user)
- serializeUserListEntry(&*user, userList->addEntry());
+ userList = data->createList("updatedUsers");
+ const UserListDiff::EntryListMap::left_map &updatedUsers = diff->getUpdatedUsers().left;
+ for(UserListDiff::EntryListMap::left_const_iterator user = updatedUsers.begin(); user != updatedUsers.end(); ++user) {
+ XmlData::List *entryList = userList->addEntry()->createList("entry");
+ serializeUserListEntry(&user->first, entryList->addEntry());
+ serializeUserListEntry(&user->second, entryList->addEntry());
+ }
}
boost::shared_ptr<UserListDiff> Util::deserializeUserListDiff(const XmlData *data) {
@@ -97,10 +101,15 @@ boost::shared_ptr<UserListDiff> Util::deserializeUserListDiff(const XmlData *dat
diff->insertDeletedUser(deserializeUserListEntry(user));
}
- userList = data->getList("unchangedUsers");
+ userList = data->getList("updatedUsers");
if(userList) {
- for(XmlData::List::const_iterator user = userList->begin(); user != userList->end(); ++user)
- diff->insertUnchangedUser(deserializeUserListEntry(user));
+ for(XmlData::List::const_iterator user = userList->begin(); user != userList->end(); ++user) {
+ const XmlData::List *entryList = user->getList("entry");
+ if(entryList->getSize() != 2)
+ continue;
+
+ diff->insertUpdatedUser(deserializeUserListEntry(entryList->begin()), deserializeUserListEntry(entryList->begin()+1));
+ }
}
return diff;