diff options
author | George Hazan <ghazan@miranda.im> | 2020-05-25 22:04:18 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-05-25 22:04:18 +0300 |
commit | 5ebba85de37a0aaaa0732fe6307fcf8de9010fea (patch) | |
tree | 9e39e09b01a2208bc2f72c34886af30201e24203 /protocols/JabberG | |
parent | 67adb1e398ec542ad62711c30031088685161546 (diff) |
Jabber: stronger appliance of Roster Editor with RFC 6121
Diffstat (limited to 'protocols/JabberG')
-rw-r--r-- | protocols/JabberG/src/jabber_roster.cpp | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/protocols/JabberG/src/jabber_roster.cpp b/protocols/JabberG/src/jabber_roster.cpp index 139de1076e..b15200dc9a 100644 --- a/protocols/JabberG/src/jabber_roster.cpp +++ b/protocols/JabberG/src/jabber_roster.cpp @@ -326,11 +326,6 @@ public: if (!queryRoster) return; - XmlNodeIq iq(m_proto->AddIQ(&CJabberProto::_RosterHandleGetRequest, JABBER_IQ_TYPE_SET)); - - TiXmlElement *query = iq << XCHILDNS("query", JABBER_FEAT_IQ_ROSTER); - - int itemCount = 0; int ListItemCount = m_list.GetItemCount(); for (int index = 0; index < ListItemCount; index++) { wchar_t jid[JABBER_MAX_JID_LEN] = L""; @@ -347,42 +342,42 @@ public: BOOL bRemove = !m_list.GetCheckState(index); if (itemRoster && bRemove) { //delete item - query << XCHILD("item") << XATTR("jid", szJid) << XATTR("subscription", "remove"); - itemCount++; + XmlNodeIq iq(m_proto->AddIQ(&CJabberProto::_RosterHandleGetRequest, JABBER_IQ_TYPE_SET)); + iq << XCHILDNS("query", JABBER_FEAT_IQ_ROSTER) << XCHILD("item") << XATTR("jid", szJid) << XATTR("subscription", "remove"); + m_proto->m_ThreadInfo->send(iq); } else if (!bRemove) { bool bPushed = itemRoster != 0; + const char *rosterName = 0, *rosterGroup = 0; if (!bPushed) { - const char *rosterName = XmlGetAttr(itemRoster, "name"); + rosterName = XmlGetAttr(itemRoster, "name"); if ((rosterName != nullptr || name[0] != 0) && mir_strcmpi(rosterName, szName)) bPushed = true; if (!bPushed) { - rosterName = XmlGetAttr(itemRoster, "subscription"); - if ((rosterName != nullptr || subscr[0] != 0) && mir_strcmpi(rosterName, T2Utf(subscr))) + auto *szSub = XmlGetAttr(itemRoster, "subscription"); + if ((szSub != nullptr || subscr[0] != 0) && mir_strcmpi(szSub, szSubscr)) bPushed = true; } if (!bPushed) { - auto *rosterGroup = XmlGetChildText(itemRoster, "group"); + rosterGroup = XmlGetChildText(itemRoster, "group"); if (rosterGroup != nullptr && mir_strcmpi(rosterGroup, szGroup)) bPushed = true; } } if (bPushed) { - TiXmlElement *item = query << XCHILD("item"); - if (mir_wstrlen(group)) + XmlNodeIq iq(m_proto->AddIQ(&CJabberProto::_RosterHandleGetRequest, JABBER_IQ_TYPE_SET)); + auto *item = iq << XCHILDNS("query", JABBER_FEAT_IQ_ROSTER) << XCHILD("item"); + if (rosterGroup || mir_strlen(szGroup)) item << XCHILD("group", szGroup); - if (mir_wstrlen(name)) + if (rosterName || mir_strlen(szName)) item << XATTR("name", szName); item << XATTR("jid", szJid) << XATTR("subscription", subscr[0] ? szSubscr : "none"); - itemCount++; + m_proto->m_ThreadInfo->send(iq); } } } m_bRRAction = RRA_SYNCDONE; - if (itemCount) - m_proto->m_ThreadInfo->send(iq); - else - _RosterSendRequest(RRA_FILLLIST); + _RosterSendRequest(RRA_FILLLIST); return; } |