diff options
Diffstat (limited to 'protocols/VKontakte/src/vk_struct.cpp')
-rw-r--r-- | protocols/VKontakte/src/vk_struct.cpp | 188 |
1 files changed, 187 insertions, 1 deletions
diff --git a/protocols/VKontakte/src/vk_struct.cpp b/protocols/VKontakte/src/vk_struct.cpp index 375efbd82b..4793891447 100644 --- a/protocols/VKontakte/src/vk_struct.cpp +++ b/protocols/VKontakte/src/vk_struct.cpp @@ -229,4 +229,190 @@ CVKOptions::CVKOptions(PROTO_INTERFACE *proto) : db_unset(0, proto->m_szModuleName, "AutoClean");
}
// Note
-}
\ No newline at end of file +}
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void CVkUserItem::LoadFromUserProfile(const JSONNode &jnNode)
+{
+ if (!jnNode)
+ return;
+
+ Set(m_bIsGroup, false);
+ Set(m_bIsUser, true);
+ Set(m_bIsMUChat, false);
+ Set(m_bIsEmail, false);
+
+ Set(m_iUserId, jnNode["id"].as_int());
+ Set(m_wszFirstName, jnNode["first_name"].as_mstring());
+ Set(m_wszLastName, jnNode["last_name"].as_mstring());
+
+ Set(m_bIsFriend, jnNode["is_friend"].as_bool());
+
+ Set(m_wszUserNick, m_wszFirstName + L" " + m_wszLastName);
+
+ m_bIsDeactivated = !Set(m_wszDeactivated, jnNode["deactivated"].as_mstring()).IsEmpty();
+
+ Set(m_btGender, BYTE(jnNode["sex"].as_int() == 2 ? 'M' : 'F'));
+ Set(m_btTimezone, BYTE(jnNode["timezone"].as_int() * -2));
+
+ Set(m_wszBDate, jnNode["bdate"].as_mstring());
+ Set(m_wszAvatarUrl, jnNode["photo_100"].as_mstring());
+
+ Set(m_wszCellular, jnNode["mobile_phone"].as_mstring());
+ Set(m_wszPhone, jnNode["home_phone"].as_mstring());
+
+ const JSONNode &jnLastSeen = jnNode["last_seen"];
+ if (jnLastSeen)
+ Set(m_iLastSeen, jnLastSeen["time"].as_int());
+
+ Set(m_iStatus, LONG((jnNode["online"].as_int() == 0) ? ID_STATUS_OFFLINE : ID_STATUS_ONLINE));
+
+ const JSONNode &jnCountry = jnNode["country"];
+ if (jnCountry)
+ Set(m_wszCountry, jnCountry["title"].as_mstring());
+
+ const JSONNode &jnCity = jnNode["city"];
+ if (jnCity)
+ Set(m_wszCity, jnCity["title"].as_mstring());
+
+ BYTE cMaritalStatus[] = { 0, 10, 11, 12, 20, 70, 50, 60, 80 };
+
+ if (jnNode["relation"] && jnNode["relation"].as_int() < _countof(cMaritalStatus))
+ Set(m_btMaritalStatus, cMaritalStatus[jnNode["relation"].as_int()]);
+
+ Set(m_wszAbout, jnNode["about"].as_mstring());
+ Set(m_wszDomain, jnNode["domain"].as_mstring());
+}
+
+
+void CVkUserItem::LoadFromConversation(const JSONNode &jnNode)
+{
+ if (!jnNode)
+ return;
+
+ Set(m_bIsGroup, false);
+ Set(m_bIsUser, false);
+ Set(m_bIsMUChat, false);
+ Set(m_bIsEmail, false);
+
+ Set(m_bIsFriend, false);
+
+ const JSONNode &jnPeer = jnNode["peer"];
+
+ CMStringW wszConversationType(jnPeer["type"].as_mstring());
+
+ if (wszConversationType.IsEmpty())
+ return;
+
+ if (wszConversationType == L"user") {
+ Set(m_bIsUser, true);
+ Set(m_iUserId, jnPeer["id"].as_int());
+ }
+ else if (wszConversationType == L"chat") {
+ Set(m_bIsMUChat, true);
+ Set(m_iUserId, jnPeer["id"].as_int());
+ Set(m_iChatId, jnPeer["local_id"].as_int());
+
+ const JSONNode &jnChatS = jnNode["chat_settings"];
+
+ Set(m_wszUserNick, jnChatS["title"].as_mstring());
+ Set(m_iAdminId, jnChatS["owner_id"].as_int());
+ }
+ else if (wszConversationType == L"group") {
+ Set(m_bIsGroup, true);
+ Set(m_iUserId, jnPeer["id"].as_int());
+ }
+
+ Set(m_iLastMsgId, jnNode["last_message_id"].as_int());
+}
+
+void CVkUserItem::LoadFromGroup(const JSONNode & jnNode)
+{
+ if (!jnNode)
+ return;
+
+ Set(m_bIsGroup, true);
+ Set(m_bIsUser, false);
+ Set(m_bIsMUChat, false);
+ Set(m_bIsEmail, false);
+
+ Set(m_iUserId, -1 * jnNode["id"].as_int());
+
+ Set(m_bIsFriend, jnNode["is_member"].as_bool());
+ Set(m_wszUserNick, jnNode["name"].as_mstring());
+
+ Set(m_wszAvatarUrl, jnNode["photo_100"].as_mstring());
+
+ Set(m_wszDomain, jnNode["screen_name"].as_mstring());
+}
+
+MCONTACT CVkUserItem::WriteToDB(bool bForce, VKContactType vkContactType)
+{
+ if (!bForce && !m_bIsUpdated)
+ return m_hContact;
+
+// Work in process...
+
+// LONG m_iUserId;
+// LONG m_iChatId;
+// LONG m_iAdminId;
+
+// LONG m_iStatus;
+// LONG m_iLastSeen;
+// LONG m_iLastMsgId;
+
+// MCONTACT m_hContact;
+
+// CMStringW m_wszFirstName;
+// CMStringW m_wszLastName;
+// CMStringW m_wszUserNick;
+// CMStringW m_wszLink;
+// CMStringW m_wszDeactivated;
+// CMStringW m_wszCellular;
+// CMStringW m_wszPhone;
+// CMStringW m_wszCountry;
+// CMStringW m_wszCity;
+// CMStringW m_wszAbout;
+// CMStringW m_wszDomain;
+// CMStringW m_wszBDate;
+// CMStringW m_wszAvatarUrl;
+
+// BYTE m_btGender;
+// BYTE m_btTimezone;
+// BYTE m_btMaritalStatus;
+
+// bool m_bIsGroup;
+// bool m_bIsFriend;
+// bool m_bIsUser;
+// bool m_bIsEmail;
+// bool m_bIsMUChat;
+// bool m_bIsDeactivated;
+
+// bool m_bIsHidden;
+// bool m_bIsUpdated;
+
+ return m_hContact;
+}
+
+CVkUserItem::CVkUserItem(CVkProto* vkProto, const JSONNode &jnNode, vkJSONNodeType vkJSONType)
+{
+ m_VK = vkProto;
+ m_iUserId = 0;
+
+ if (!jnNode)
+ return;
+
+ if (vkJSONTypeProfile == vkJSONType)
+ LoadFromUserProfile(jnNode);
+ else if (vkJSONTypeConversation == vkJSONType)
+ LoadFromConversation(jnNode);
+ else if (vkJSONTypeGroup == vkJSONType)
+ LoadFromGroup(jnNode);
+
+
+ m_hContact = m_bIsMUChat ? m_VK->FindChat(m_iChatId) : m_VK->FindUser(m_iUserId);
+ m_hContact = m_hContact ? m_hContact : INVALID_CONTACT_ID;
+}
|