From 32924be432eff09324f2ab1ac741a01bbfef75ca Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 25 Feb 2024 11:38:33 +0300 Subject: ICQ: fix for removing contacts --- protocols/ICQ-WIM/src/poll.cpp | 12 ++++++++---- protocols/ICQ-WIM/src/proto.cpp | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'protocols') 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); -- cgit v1.2.3