diff options
author | George Hazan <ghazan@miranda.im> | 2018-12-24 20:10:10 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2018-12-24 20:10:10 +0300 |
commit | 47e705ac05b2572a687741af3a4141e560caf5d6 (patch) | |
tree | c50c808070bc22126be104ada6bb35aab16e41d8 /protocols/Icq10/src/server.cpp | |
parent | 7ed195f3bfe7512511abe502b4eeb447281ac3c5 (diff) |
filtration of contacts that are not in our buddy list
Diffstat (limited to 'protocols/Icq10/src/server.cpp')
-rw-r--r-- | protocols/Icq10/src/server.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/protocols/Icq10/src/server.cpp b/protocols/Icq10/src/server.cpp index bde7ef3319..beb829fef7 100644 --- a/protocols/Icq10/src/server.cpp +++ b/protocols/Icq10/src/server.cpp @@ -217,17 +217,22 @@ void CIcqProto::ProcessBuddyList(const JSONNode &ev) for (auto &buddy : it["buddies"]) { DWORD dwUin = _wtol(buddy["aimId"].as_mstring()); - MCONTACT hContact = FindContactByUIN(dwUin); - if (hContact == 0) { - hContact = db_add_contact(); + + auto *pCache = FindContactByUIN(dwUin); + if (pCache == nullptr) { + MCONTACT hContact = db_add_contact(); Proto_AddToContact(hContact, m_szModuleName); setDword(hContact, "UIN", dwUin); + pCache = new IcqCacheItem(dwUin, hContact); { mir_cslock l(m_csCache); - m_arCache.insert(new IcqCacheItem(dwUin, hContact)); + m_arCache.insert(pCache); } } + MCONTACT hContact = pCache->m_hContact; + pCache->m_bInList = true; + CMStringW wszNick(buddy["friendly"].as_mstring()); if (!wszNick.IsEmpty()) setWString(hContact, "Nick", wszNick); @@ -258,6 +263,10 @@ void CIcqProto::ProcessBuddyList(const JSONNode &ev) db_set_ws(hContact, "CList", "Group", szGroup); } } + + for (auto &it : m_arCache) + if (!it->m_bInList) + db_set_b(it->m_hContact, "CList", "NotOnList", 1); } void CIcqProto::ProcessEvent(const JSONNode &ev) |