diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/ICQ-WIM/src/poll.cpp | 12 | ||||
| -rw-r--r-- | protocols/ICQ-WIM/src/proto.cpp | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/protocols/ICQ-WIM/src/poll.cpp b/protocols/ICQ-WIM/src/poll.cpp index c24fe39333..4e39a52060 100644 --- a/protocols/ICQ-WIM/src/poll.cpp +++ b/protocols/ICQ-WIM/src/poll.cpp @@ -104,14 +104,18 @@ void CIcqProto::ProcessDiff(const JSONNode &ev) bool bCreated = false, bDeleted = (szType == "deleted");
+ int iProcessed = 0;
for (auto &buddy : it["buddies"]) {
- if (bDeleted)
- continue;
-
MCONTACT hContact = ParseBuddyInfo(buddy, true);
if (hContact == INVALID_CONTACT_ID)
continue;
+ iProcessed++;
+ if (bDeleted) {
+ db_delete_contact(hContact, CDF_FROM_SERVER);
+ continue;
+ }
+
ProcessOnline(buddy, hContact);
setWString(hContact, "IcqGroup", pGroup->wszName);
@@ -125,7 +129,7 @@ void CIcqProto::ProcessDiff(const JSONNode &ev) Clist_SetGroup(hContact, pGroup->wszName);
}
- if (bDeleted)
+ if (bDeleted && !iProcessed)
m_arGroups.remove(pGroup);
}
diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index 805f75ea2e..00f37bfa92 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -161,7 +161,7 @@ void CIcqProto::OnContactAdded(MCONTACT hContact) bool CIcqProto::OnContactDeleted(MCONTACT hContact, uint32_t flags)
{
- if (flags & CDF_FROM_SERVER) {
+ if (flags & CDF_DEL_CONTACT) {
CMStringW szId(GetUserId(hContact));
if (!isChatRoom(hContact)) {
mir_cslock lck(m_csCache);
|
