From b54e9f486d521c314a9eb53dab435f14b4ca7504 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 29 Oct 2020 21:30:23 +0300 Subject: SkypeWeb: - fixes #2491 (correct visualization of Skype invitations); - massive code cleaning; - version bump --- protocols/SkypeWeb/src/skype_chatrooms.cpp | 2 +- protocols/SkypeWeb/src/skype_contacts.cpp | 61 +++++++++++++++------------ protocols/SkypeWeb/src/skype_db.cpp | 2 - protocols/SkypeWeb/src/skype_history_sync.cpp | 8 ++-- protocols/SkypeWeb/src/skype_messages.cpp | 4 +- protocols/SkypeWeb/src/skype_polling.cpp | 4 +- protocols/SkypeWeb/src/skype_proto.h | 2 +- protocols/SkypeWeb/src/skype_utils.cpp | 6 +-- protocols/SkypeWeb/src/version.h | 2 +- 9 files changed, 48 insertions(+), 43 deletions(-) (limited to 'protocols/SkypeWeb/src') diff --git a/protocols/SkypeWeb/src/skype_chatrooms.cpp b/protocols/SkypeWeb/src/skype_chatrooms.cpp index 718c6b55df..0a86517a7a 100644 --- a/protocols/SkypeWeb/src/skype_chatrooms.cpp +++ b/protocols/SkypeWeb/src/skype_chatrooms.cpp @@ -254,7 +254,7 @@ void CSkypeProto::OnChatEvent(const JSONNode &node) CMStringW szTopic(node["threadtopic"].as_mstring()); - time_t timestamp = IsoToUnixTime(node["composetime"].as_string().c_str()); + time_t timestamp = IsoToUnixTime(node["composetime"].as_string()); std::string strContent = node["content"].as_string(); int nEmoteOffset = node["skypeemoteoffset"].as_int(); diff --git a/protocols/SkypeWeb/src/skype_contacts.cpp b/protocols/SkypeWeb/src/skype_contacts.cpp index c8b56066fd..0e8c4d34a8 100644 --- a/protocols/SkypeWeb/src/skype_contacts.cpp +++ b/protocols/SkypeWeb/src/skype_contacts.cpp @@ -28,7 +28,7 @@ void CSkypeProto::SetContactStatus(MCONTACT hContact, WORD status) if (oldStatus != status) { setWord(hContact, "Status", status); if (status == ID_STATUS_OFFLINE) - db_unset(hContact, m_szModuleName, "MirVer"); + delSetting(hContact, "MirVer"); } } @@ -69,24 +69,24 @@ MCONTACT CSkypeProto::FindContact(const char *skypename) MCONTACT CSkypeProto::AddContact(const char *skypename, bool isTemporary) { MCONTACT hContact = FindContact(skypename); + if (hContact) + return hContact; - if (!hContact) { - hContact = db_add_contact(); - Proto_AddToContact(hContact, m_szModuleName); + hContact = db_add_contact(); + Proto_AddToContact(hContact, m_szModuleName); - setString(hContact, SKYPE_SETTINGS_ID, skypename); + setString(hContact, SKYPE_SETTINGS_ID, skypename); - if (m_opts.wstrCListGroup) { - Clist_GroupCreate(0, m_opts.wstrCListGroup); - Clist_SetGroup(hContact, m_opts.wstrCListGroup); - } + if (m_opts.wstrCListGroup) { + Clist_GroupCreate(0, m_opts.wstrCListGroup); + Clist_SetGroup(hContact, m_opts.wstrCListGroup); + } - setByte(hContact, "Auth", 1); - setByte(hContact, "Grant", 1); + setByte(hContact, "Auth", 1); + setByte(hContact, "Grant", 1); - if (isTemporary) - Contact_RemoveFromList(hContact); - } + if (isTemporary) + Contact_RemoveFromList(hContact); return hContact; } @@ -101,26 +101,31 @@ void CSkypeProto::LoadContactsAuth(NETLIBHTTPREQUEST *response, AsyncHttpRequest std::string skypename = item["mri"].as_string().erase(0, 2); std::string reason = item["greeting"].as_string(); - time_t eventTime = IsoToUnixTime(item["invites"][json_index_t(0)].as_string().c_str()); + time_t eventTime = 0; + for (auto &it : item["invites"]) + eventTime = IsoToUnixTime(it["time"].as_string()); MCONTACT hContact = AddContact(skypename.c_str()); - if (hContact) { - time_t lastEventTime = db_get_dw(hContact, m_szModuleName, "LastAuthRequestTime", 0); + time_t lastEventTime = getDword(hContact, "LastAuthRequestTime"); + if (lastEventTime && lastEventTime >= eventTime) + continue; - if (lastEventTime < eventTime) { - db_set_dw(hContact, m_szModuleName, "LastAuthRequestTime", eventTime); - delSetting(hContact, "Auth"); + std::string displayName = item["displayname"].as_string(); + if (displayName.empty()) + displayName = skypename; + setUString(hContact, "Nick", displayName.c_str()); - DB::AUTH_BLOB blob(hContact, nullptr, nullptr, nullptr, skypename.c_str(), reason.c_str()); + setDword(hContact, "LastAuthRequestTime", eventTime); + delSetting(hContact, "Auth"); - PROTORECVEVENT pre = { 0 }; - pre.timestamp = time(0); - pre.lParam = blob.size(); - pre.szMessage = blob; + DB::AUTH_BLOB blob(hContact, displayName.c_str(), nullptr, nullptr, skypename.c_str(), reason.c_str()); - ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); - } - } + PROTORECVEVENT pre = { 0 }; + pre.timestamp = time(0); + pre.lParam = blob.size(); + pre.szMessage = blob; + + ProtoChainRecv(hContact, PSR_AUTH, 0, (LPARAM)&pre); } } diff --git a/protocols/SkypeWeb/src/skype_db.cpp b/protocols/SkypeWeb/src/skype_db.cpp index 8a0869ab04..dc102efb8f 100644 --- a/protocols/SkypeWeb/src/skype_db.cpp +++ b/protocols/SkypeWeb/src/skype_db.cpp @@ -99,8 +99,6 @@ void CSkypeProto::EditEvent(MCONTACT hContact, MEVENT hEvent, const char *szCont void CSkypeProto::InitDBEvents() { - db_set_resident(m_szModuleName, "LastAuthRequestTime"); - // custom event DBEVENTTYPEDESCR dbEventType = {}; dbEventType.module = m_szModuleName; diff --git a/protocols/SkypeWeb/src/skype_history_sync.cpp b/protocols/SkypeWeb/src/skype_history_sync.cpp index 17f0f901eb..3d2280b506 100644 --- a/protocols/SkypeWeb/src/skype_history_sync.cpp +++ b/protocols/SkypeWeb/src/skype_history_sync.cpp @@ -47,15 +47,15 @@ void CSkypeProto::OnGetServerHistory(NETLIBHTTPREQUEST *response, AsyncHttpReque std::string content = message["content"].as_string(); std::string conversationLink = message["conversationLink"].as_string(); int emoteOffset = message["skypeemoteoffset"].as_int(); - time_t timestamp = IsoToUnixTime(message["composetime"].as_string().c_str()); + time_t timestamp = IsoToUnixTime(message["composetime"].as_string()); CMStringA skypename(UrlToSkypename(from.c_str())); bool isEdited = message["skypeeditedid"]; MCONTACT hContact = FindContact(UrlToSkypename(conversationLink.c_str())); - if (timestamp > db_get_dw(hContact, m_szModuleName, "LastMsgTime", 0)) - db_set_dw(hContact, m_szModuleName, "LastMsgTime", (DWORD)timestamp); + if (timestamp > getDword(hContact, "LastMsgTime", 0)) + setDword(hContact, "LastMsgTime", timestamp); DWORD iFlags = DBEF_UTF; @@ -138,7 +138,7 @@ void CSkypeProto::OnSyncHistory(NETLIBHTTPREQUEST *response, AsyncHttpRequest*) if (strConversationLink.find("/8:") != -1) { CMStringA szSkypename = UrlToSkypename(strConversationLink.c_str()); - time_t composeTime(IsoToUnixTime(lastMessage["composetime"].as_string().c_str())); + time_t composeTime(IsoToUnixTime(lastMessage["composetime"].as_string())); MCONTACT hContact = FindContact(szSkypename); if (hContact != NULL) diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index 773a6ec588..222c67e59a 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -108,7 +108,7 @@ void CSkypeProto::OnPrivateMessageEvent(const JSONNode &node) MCONTACT hContact = AddContact(szConversationName, true); if (m_bHistorySynced) - db_set_dw(hContact, m_szModuleName, "LastMsgTime", (DWORD)timestamp); + setDword(hContact, "LastMsgTime", timestamp); if (strMessageType == "Control/Typing") { CallService(MS_PROTO_CONTACTISTYPING, hContact, PROTOTYPE_CONTACTTYPING_INFINITE); @@ -184,7 +184,7 @@ void CSkypeProto::MarkMessagesRead(MCONTACT hContact, MEVENT hDbEvent) db_event_get(hDbEvent, &dbei); time_t timestamp = dbei.timestamp; - if (db_get_dw(hContact, m_szModuleName, "LastMsgTime", 0) > (timestamp - 300)) + if (getDword(hContact, "LastMsgTime") > (timestamp - 300)) PushRequest(new MarkMessageReadRequest(getId(hContact), timestamp, timestamp, false)); } diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp index a9e4c0c737..c4d0f695c4 100644 --- a/protocols/SkypeWeb/src/skype_polling.cpp +++ b/protocols/SkypeWeb/src/skype_polling.cpp @@ -152,13 +152,15 @@ void CSkypeProto::ProcessEndpointPresence(const JSONNode &node) MirVer.Append("Skype (Unknown)"); } } + if (privateInfo != NULL) { std::string epname = privateInfo["epname"].as_string(); if (!epname.empty()) { MirVer.AppendFormat(" [%s]", epname.c_str()); } } - db_set_s(hContact, m_szModuleName, "MirVer", MirVer); + + setString(hContact, "MirVer", MirVer); } void CSkypeProto::ProcessUserPresence(const JSONNode &node) diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index 343149dd4c..3facd417fc 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -316,7 +316,7 @@ private: { return (!mir_strcmpi(str, m_szMyname) || !mir_strcmp(str, ptrA(getStringA("SelfEndpointName")))); } - static time_t IsoToUnixTime(const char *stamp); + static time_t IsoToUnixTime(const std::string &stamp); static CMStringA GetStringChunk(const char *haystack, const char *start, const char *end); static int SkypeToMirandaStatus(const char *status); diff --git a/protocols/SkypeWeb/src/skype_utils.cpp b/protocols/SkypeWeb/src/skype_utils.cpp index 41815c55ec..2c088b2d37 100644 --- a/protocols/SkypeWeb/src/skype_utils.cpp +++ b/protocols/SkypeWeb/src/skype_utils.cpp @@ -19,15 +19,15 @@ along with this program. If not, see . #pragma warning(disable:4566) -time_t CSkypeProto::IsoToUnixTime(const char *stamp) +time_t CSkypeProto::IsoToUnixTime(const std::string &stamp) { char date[9]; int i, y; - if (stamp == nullptr) + if (stamp.empty()) return 0; - char *p = NEWSTR_ALLOCA(stamp); + char *p = NEWSTR_ALLOCA(stamp.c_str()); // skip '-' chars int si = 0, sj = 0; diff --git a/protocols/SkypeWeb/src/version.h b/protocols/SkypeWeb/src/version.h index bd5f11f803..c89475f2d6 100644 --- a/protocols/SkypeWeb/src/version.h +++ b/protocols/SkypeWeb/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 95 #define __RELEASE_NUM 12 -#define __BUILD_NUM 2 +#define __BUILD_NUM 3 #include -- cgit v1.2.3