summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authorElzorFox <elzorfox@ya.ru>2024-04-06 12:25:25 +0500
committerElzorFox <elzorfox@ya.ru>2024-04-06 12:25:25 +0500
commit4fdf5f999f94ad09a2cb44c8e879b98a6a5fcf0f (patch)
treead8dc64144bd234ac4f0c4f4e3a749b07c8b2df7 /protocols
parent39dab6d6def91a71fb632feae36dd1e3ba20f4ff (diff)
VKontakte:
fix load userinfo for users with id = chat id fix temporary non-readonly contacts
Diffstat (limited to 'protocols')
-rw-r--r--protocols/VKontakte/src/vk_messages.cpp4
-rw-r--r--protocols/VKontakte/src/vk_thread.cpp9
2 files changed, 10 insertions, 3 deletions
diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp
index cfdb82145d..5f1a2e55dd 100644
--- a/protocols/VKontakte/src/vk_messages.cpp
+++ b/protocols/VKontakte/src/vk_messages.cpp
@@ -334,6 +334,10 @@ void CVkProto::OnReceiveMessages(MHttpResponse *reply, AsyncHttpRequest *pReq)
WriteQSWord(hContact, "out_read", jnItem["out_read"].as_int());
if (m_vkOptions.iMarkMessageReadOn == MarkMsgReadOn::markOnReceive)
MarkMessagesRead(hContact);
+
+ const JSONNode& jnCanWrite = jnItem["can_write"];
+ if (jnCanWrite)
+ Contact::Readonly(hContact, !jnCanWrite["allowed"].as_bool());
}
}
diff --git a/protocols/VKontakte/src/vk_thread.cpp b/protocols/VKontakte/src/vk_thread.cpp
index a7281dc010..08a09e3ca9 100644
--- a/protocols/VKontakte/src/vk_thread.cpp
+++ b/protocols/VKontakte/src/vk_thread.cpp
@@ -30,7 +30,7 @@ static char szVKLoginDomain[] = "https://m.vk.com";
static char szVKCookieDomain[] = ".vk.com";
static char szFieldsName[] = "id, first_name, last_name, photo_100, bdate, sex, timezone, "
"contacts, last_seen, online, status, country, city, relation, interests, activities, "
- "music, movies, tv, books, games, quotes, about, domain";
+ "music, movies, tv, books, games, quotes, about, domain, can_write_private_message";
/////////////////////////////////////////////////////////////////////////////////////////
@@ -644,6 +644,9 @@ MCONTACT CVkProto::SetContactInfo(const JSONNode &jnItem, bool bFlag, VKContactT
setWString(hContact, "Homepage", wszUrl);
}
+ if (jnItem["can_write_private_message"])
+ Contact::Readonly(hContact, jnItem["can_write_private_message"].as_int() == 0);
+
return hContact;
}
@@ -697,7 +700,7 @@ void CVkProto::RetrieveUsersInfo(bool bFreeOffline, bool bRepeat)
int i = 0;
for (auto &hContact : AccContacts()) {
VKUserID_t iUserId = ReadVKUserID(hContact);
- if (iUserId == VK_INVALID_USER || iUserId == VK_FEED_USER || iUserId < 0)
+ if (iUserId == VK_INVALID_USER || iUserId == VK_FEED_USER || iUserId < 0 || isChatRoom(hContact))
continue;
bool bIsFriend = !getBool(hContact, "Auth", true);
@@ -715,7 +718,7 @@ void CVkProto::RetrieveUsersInfo(bool bFreeOffline, bool bRepeat)
Push(new AsyncHttpRequest(this, REQUEST_POST, "/method/execute.RetrieveUsersInfo", true, &CVkProto::OnReceiveUserInfo)
<< CHAR_PARAM("userids", userIDs)
- << CHAR_PARAM("fields", (bFreeOffline ? "online,status" : szFieldsName))
+ << CHAR_PARAM("fields", (bFreeOffline ? "online,status,can_write_private_message" : szFieldsName))
<< INT_PARAM("norepeat", (int)bRepeat)
<< INT_PARAM("setonline", (int)m_bNeedSendOnline)
<< INT_PARAM("func_v", (bFreeOffline && !m_vkOptions.bLoadFullCList) ? 1 : 2)