From 9885bf54f788e831a80c76001340aa68d31d2aaa Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 25 Jan 2023 18:34:51 +0300 Subject: Group chats: ChatRoomID setting replaced with real protocol id --- protocols/CloudFile/src/utils.cpp | 2 +- protocols/Facebook/src/server.cpp | 1 - protocols/Gadu-Gadu/src/core.cpp | 20 ++--- protocols/Gadu-Gadu/src/gg.cpp | 2 +- protocols/Gadu-Gadu/src/groupchat.cpp | 13 +-- protocols/ICQ-WIM/src/server.cpp | 2 +- protocols/ICQ-WIM/src/utils.cpp | 3 - protocols/IRCG/src/ircproto.cpp | 14 +--- protocols/JabberG/src/jabber_api.cpp | 2 +- protocols/JabberG/src/jabber_groupchat.cpp | 4 +- protocols/JabberG/src/jabber_iqid.cpp | 2 +- protocols/JabberG/src/jabber_list.cpp | 13 +-- protocols/JabberG/src/jabber_menu.cpp | 6 +- protocols/JabberG/src/jabber_util.cpp | 3 +- protocols/MinecraftDynmap/src/chat.cpp | 13 --- protocols/Sametime/sametime.vcxproj.filters | 101 +++++++++++++----------- protocols/Sametime/src/conference.cpp | 4 +- protocols/Sametime/src/options.cpp | 37 +++++---- protocols/Sametime/src/session_announce_win.cpp | 2 +- protocols/Sametime/src/userlist.cpp | 34 ++++---- protocols/SkypeWeb/src/skype_chatrooms.cpp | 4 +- protocols/SkypeWeb/src/skype_contacts.cpp | 4 +- protocols/Telegram/src/proto.cpp | 2 +- protocols/Telegram/src/utils.cpp | 9 +-- protocols/VKontakte/src/main.cpp | 2 +- protocols/VKontakte/src/misc.cpp | 16 +++- protocols/VKontakte/src/vk_chats.cpp | 31 ++++---- protocols/VKontakte/src/vk_files.cpp | 9 +-- protocols/VKontakte/src/vk_messages.cpp | 2 +- protocols/VKontakte/src/vk_proto.cpp | 1 + protocols/VKontakte/src/vk_proto.h | 2 + protocols/WhatsApp/src/avatars.cpp | 4 +- protocols/WhatsApp/src/proto.cpp | 5 +- protocols/WhatsApp/src/utils.cpp | 9 +-- 34 files changed, 171 insertions(+), 207 deletions(-) (limited to 'protocols') diff --git a/protocols/CloudFile/src/utils.cpp b/protocols/CloudFile/src/utils.cpp index 5de7ebdee9..69a5c74a60 100644 --- a/protocols/CloudFile/src/utils.cpp +++ b/protocols/CloudFile/src/utils.cpp @@ -67,7 +67,7 @@ void SendToContact(MCONTACT hContact, const wchar_t *data) { const char *szProto = Proto_GetBaseAccountName(hContact); if (Contact::IsGroupChat(hContact, szProto)) { - ptrW tszChatRoom(db_get_wsa(hContact, szProto, "ChatRoomID")); + ptrW tszChatRoom(Contact::GetInfo(CNF_UNIQUEID, hContact, szProto)); Chat_SendUserMessage(szProto, tszChatRoom, data); return; } diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index 39ba67f83d..e3d1f31736 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -279,7 +279,6 @@ FacebookUser* FacebookProto::RefreshThread(JSONNode &n) if (si == nullptr) return nullptr; - setWString(si->hContact, DBKEY_ID, chatId); Chat_AddGroup(si, TranslateT("Participant")); for (auto &u : n["all_participants"]["nodes"]) { diff --git a/protocols/Gadu-Gadu/src/core.cpp b/protocols/Gadu-Gadu/src/core.cpp index f1daddfbd4..6a0698e1cf 100644 --- a/protocols/Gadu-Gadu/src/core.cpp +++ b/protocols/Gadu-Gadu/src/core.cpp @@ -1210,14 +1210,14 @@ void GaduProto::broadcastnewstatus(int newStatus) void GaduProto::OnContactDeleted(MCONTACT hContact) { - uin_t uin = (uin_t)getDword(hContact, GG_KEY_UIN, 0); + uin_t uin = (uin_t)getDword(hContact, GG_KEY_UIN); // Terminate conference if contact is deleted - ptrW wszRoomId(getWStringA(hContact, "ChatRoomID")); - if (isChatRoom(hContact) && wszRoomId != NULL && gc_enabled) + if (isChatRoom(hContact) && uin && gc_enabled) { + CMStringW wszRoomId(FORMAT, L"%d", uin); GGGC *chat = gc_lookup(wszRoomId); - debugLogA("contactdeleted(): Terminating chat %x, id %s from contact list...", chat, wszRoomId.get()); + debugLogA("contactdeleted(): Terminating chat %x, id %s from contact list...", chat, wszRoomId.c_str()); if (chat) { // Destroy chat entry @@ -1279,20 +1279,20 @@ int GaduProto::dbsettingchanged(WPARAM hContact, LPARAM lParam) return 0; // Groupchat window contact is being renamed - DBVARIANT dbv; - if (isChatRoom(hContact) && !getWString(hContact, "ChatRoomID", &dbv)) + if (isChatRoom(hContact)) { + CMStringW wszId(FORMAT, L"%d", getDword(hContact, GG_KEY_UIN)); + // Most important... check redundancy (fucking cascading) static int cascade = 0; - if (!cascade && dbv.pwszVal) + if (!cascade) { - debugLogA("dbsettingchanged(): Conference %s was renamed.", dbv.pszVal); + debugLogA("dbsettingchanged(): Conference %s was renamed.", wszId.c_str()); // Mark cascading /* FIXME */ cascade = 1; - Chat_ChangeSessionName(m_szModuleName, dbv.pwszVal, ptszVal); + Chat_ChangeSessionName(m_szModuleName, wszId, ptszVal); /* FIXME */ cascade = 0; } - db_free(&dbv); } else { // Change contact name on all chats diff --git a/protocols/Gadu-Gadu/src/gg.cpp b/protocols/Gadu-Gadu/src/gg.cpp index 34b7e1b8fa..fd0aea0f03 100644 --- a/protocols/Gadu-Gadu/src/gg.cpp +++ b/protocols/Gadu-Gadu/src/gg.cpp @@ -48,7 +48,7 @@ CMPlugin::CMPlugin() : ACCPROTOPLUGIN(GGDEF_PROTO, pluginInfoEx) { crc_gentable(); - SetUniqueId(GG_KEY_UIN); + SetUniqueId(GG_KEY_UIN, DBVT_DWORD); } ////////////////////////////////////////////////////////// diff --git a/protocols/Gadu-Gadu/src/groupchat.cpp b/protocols/Gadu-Gadu/src/groupchat.cpp index 6eac366e71..81deec7393 100644 --- a/protocols/Gadu-Gadu/src/groupchat.cpp +++ b/protocols/Gadu-Gadu/src/groupchat.cpp @@ -114,7 +114,7 @@ int GaduProto::gc_event(WPARAM, LPARAM lParam) // Check if we got our protocol, and fields are set if (!gch || !gch->si->ptszID || !gch->si->pszModule || mir_strcmpi(gch->si->pszModule, m_szModuleName) - || !(uin = getDword(GG_KEY_UIN, 0)) + || !(uin = getDword(gch->si->hContact, GG_KEY_UIN)) || !(chat = gc_lookup(gch->si->ptszID))) return 0; @@ -126,16 +126,7 @@ int GaduProto::gc_event(WPARAM, LPARAM lParam) list_remove(&chats, chat, 1); // Remove contact from contact list (duh!) should be done by chat.dll !! - for (MCONTACT hContact = db_find_first(); hContact; ) { - MCONTACT hNext = db_find_next(hContact); - DBVARIANT dbv; - if (!getWString(hContact, "ChatRoomID", &dbv)) { - if (dbv.pwszVal && !mir_wstrcmp(gch->si->ptszID, dbv.pwszVal)) - db_delete_contact(hContact); - db_free(&dbv); - } - hContact = hNext; - } + db_delete_contact(gch->si->hContact); return 1; } diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index ce3dad53bb..e7468d952a 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -491,7 +491,7 @@ void CIcqProto::ParseMessage(MCONTACT hContact, __int64 &lastMsgId, const JSONNo CheckOwnMessage(reqId, szMsgId, true); CMStringW wszSender(it["chat"]["sender"].as_mstring()); - CMStringW wszChatId(getMStringW(hContact, "ChatRoomID")); + CMStringW wszChatId(GetUserId(hContact)); if (bIsFileTransfer) { wszText = pFileInfo->szUrl; diff --git a/protocols/ICQ-WIM/src/utils.cpp b/protocols/ICQ-WIM/src/utils.cpp index 9a2e0b35ef..6bfc868e96 100644 --- a/protocols/ICQ-WIM/src/utils.cpp +++ b/protocols/ICQ-WIM/src/utils.cpp @@ -265,9 +265,6 @@ INT_PTR __cdecl CIcqProto::SetAvatar(WPARAM, LPARAM lParam) CMStringW CIcqProto::GetUserId(MCONTACT hContact) { - if (isChatRoom(hContact)) - return getMStringW(hContact, "ChatRoomID"); - return getMStringW(hContact, DB_KEY_ID); } diff --git a/protocols/IRCG/src/ircproto.cpp b/protocols/IRCG/src/ircproto.cpp index e64a3b420e..95b233d8dc 100644 --- a/protocols/IRCG/src/ircproto.cpp +++ b/protocols/IRCG/src/ircproto.cpp @@ -195,7 +195,7 @@ void CIrcProto::OnModulesLoaded() ptrA szNetwork(getStringA("Network")); if (szNetwork) { - CMStringA szSetting(FORMAT, "PERFORM:%s", szNetwork); + CMStringA szSetting(FORMAT, "PERFORM:%s", szNetwork.get()); szSetting.MakeUpper(); CMStringW wszValue(getMStringW(szSetting)); @@ -206,18 +206,6 @@ void CIrcProto::OnModulesLoaded() delSetting("Network"); } - if (getByte("CompatibilityLevel") < 1) { - for (auto &cc : AccContacts()) { - CMStringW chatId(getMStringW(cc, "ChatRoomID")); - int idx = chatId.Find(L" - "); - if (idx != -1) { - chatId.Truncate(idx); - setWString(cc, "ChatRoomID", chatId); - } - } - setByte("CompatibilityLevel", 1); - } - InitIgnore(); HookProtoEvent(ME_USERINFO_INITIALISE, &CIrcProto::OnInitUserInfo); diff --git a/protocols/JabberG/src/jabber_api.cpp b/protocols/JabberG/src/jabber_api.cpp index 738e1bb439..775102599e 100644 --- a/protocols/JabberG/src/jabber_api.cpp +++ b/protocols/JabberG/src/jabber_api.cpp @@ -57,7 +57,7 @@ MCONTACT CJabberProto::ContactFromJID(const char *jid) char* CJabberProto::ContactToJID(MCONTACT hContact) { - return getUStringA(hContact, isChatRoom(hContact) ? "ChatRoomID" : "jid"); + return getUStringA(hContact, "jid"); } char* CJabberProto::GetBestResourceName(const char *jid) diff --git a/protocols/JabberG/src/jabber_groupchat.cpp b/protocols/JabberG/src/jabber_groupchat.cpp index f4f3e6c008..719144a127 100644 --- a/protocols/JabberG/src/jabber_groupchat.cpp +++ b/protocols/JabberG/src/jabber_groupchat.cpp @@ -186,7 +186,7 @@ INT_PTR __cdecl CJabberProto::OnMenuHandleJoinGroupchat(WPARAM, LPARAM) INT_PTR __cdecl CJabberProto::OnJoinChat(WPARAM hContact, LPARAM) { - ptrA jid(getUStringA(hContact, "ChatRoomID")); + ptrA jid(ContactToJID(hContact)); if (jid == nullptr) return 0; @@ -210,7 +210,7 @@ INT_PTR __cdecl CJabberProto::OnJoinChat(WPARAM hContact, LPARAM) INT_PTR __cdecl CJabberProto::OnLeaveChat(WPARAM hContact, LPARAM) { - ptrA jid(getUStringA(hContact, "ChatRoomID")); + ptrA jid(ContactToJID(hContact)); if (jid != nullptr) { if (getWord(hContact, "Status", 0) != ID_STATUS_OFFLINE) { JABBER_LIST_ITEM *item = ListGetItemPtr(LIST_CHATROOM, jid); diff --git a/protocols/JabberG/src/jabber_iqid.cpp b/protocols/JabberG/src/jabber_iqid.cpp index 041a2052bf..85e2397829 100644 --- a/protocols/JabberG/src/jabber_iqid.cpp +++ b/protocols/JabberG/src/jabber_iqid.cpp @@ -423,7 +423,7 @@ void CJabberProto::OnIqResultSession(const TiXmlElement*, CJabberIqInfo *pInfo) void CJabberProto::GroupchatJoinByHContact(MCONTACT hContact, bool autojoin) { - ptrA roomjid(getUStringA(hContact, "ChatRoomID")); + ptrA roomjid(ContactToJID(hContact)); if (roomjid == nullptr) return; diff --git a/protocols/JabberG/src/jabber_list.cpp b/protocols/JabberG/src/jabber_list.cpp index 73abe09e2b..da6cfb955d 100644 --- a/protocols/JabberG/src/jabber_list.cpp +++ b/protocols/JabberG/src/jabber_list.cpp @@ -89,16 +89,9 @@ void JABBER_RESOURCE_STATUS::Release() void CJabberProto::ListInit(void) { for (auto &hContact : AccContacts()) { - if (isChatRoom(hContact)) { - ptrA jid(getUStringA(hContact, "ChatRoomID")); - if (jid != nullptr) - ListAdd(LIST_CHATROOM, jid, hContact); - } - else { - ptrA jid(getUStringA(hContact, "jid")); - if (jid != nullptr) - ListAdd(LIST_ROSTER, jid, hContact); - } + ptrA jid(ContactToJID(hContact)); + if (jid != nullptr) + ListAdd(isChatRoom(hContact) ? LIST_CHATROOM : LIST_ROSTER, jid, hContact); } } diff --git a/protocols/JabberG/src/jabber_menu.cpp b/protocols/JabberG/src/jabber_menu.cpp index 0d510f6859..715909e915 100644 --- a/protocols/JabberG/src/jabber_menu.cpp +++ b/protocols/JabberG/src/jabber_menu.cpp @@ -282,7 +282,7 @@ int CJabberProto::OnPrebuildContactMenu(WPARAM hContact, LPARAM) Menu_ShowItem(GetMenuItem(PROTO_MENU_LOAD_HISTORY), true); if (bIsChatRoom) { - ptrA roomid(getUStringA(hContact, "ChatRoomID")); + ptrA roomid(ContactToJID(hContact)); if (ListGetItemPtr(LIST_BOOKMARK, roomid) == nullptr) if (m_ThreadInfo && m_ThreadInfo->jabberServerCaps & JABBER_CAPS_PRIVATE_STORAGE) Menu_ShowItem(g_hMenuAddBookmark, true); @@ -425,7 +425,7 @@ INT_PTR __cdecl CJabberProto::OnMenuBookmarkAdd(WPARAM hContact, LPARAM) if (!hContact) return 0; // we do not add ourself to the roster. (buggy situation - should not happen) - ptrA roomID(getUStringA(hContact, "ChatRoomID")); + ptrA roomID(ContactToJID(hContact)); if (roomID == nullptr) return 0; @@ -922,7 +922,7 @@ INT_PTR __cdecl CJabberProto::OnMenuHandleDirectPresence(WPARAM hContact, LPARAM CMStringA jid; ptrA szJid(getUStringA(hContact, "jid")); if (szJid == nullptr) { - ptrA roomid(getUStringA(hContact, "ChatRoomID")); + ptrA roomid(ContactToJID(hContact)); if (roomid == nullptr) return 0; diff --git a/protocols/JabberG/src/jabber_util.cpp b/protocols/JabberG/src/jabber_util.cpp index a3e1c856f6..2782aef450 100644 --- a/protocols/JabberG/src/jabber_util.cpp +++ b/protocols/JabberG/src/jabber_util.cpp @@ -570,8 +570,7 @@ char* CJabberProto::GetClientJID(MCONTACT hContact, char *dest, size_t destLen) if (hContact == 0) return nullptr; - ptrA jid(getUStringA(hContact, isChatRoom(hContact) ? "ChatRoomID" : "jid")); - return GetClientJID(jid, dest, destLen); + return GetClientJID(ptrA(ContactToJID(hContact)), dest, destLen); } char* CJabberProto::GetClientJID(const char *jid, char *dest, size_t destLen) diff --git a/protocols/MinecraftDynmap/src/chat.cpp b/protocols/MinecraftDynmap/src/chat.cpp index c0c1f80542..b5bd327d24 100644 --- a/protocols/MinecraftDynmap/src/chat.cpp +++ b/protocols/MinecraftDynmap/src/chat.cpp @@ -162,19 +162,6 @@ void MinecraftDynmapProto::ClearChat() // TODO: Could this be done better? MCONTACT MinecraftDynmapProto::GetChatHandle() { - /*if (chatHandle_ != NULL) - return chatHandle_; - - for (auto &hContact : AccContacts()) { - if (db_get_b(hContact, m_szModuleName, "ChatRoom", 0) > 0) { - ptrA id = db_get_sa(hContact, m_szModuleName, "ChatRoomId"); - if (id != NULL && !strcmp(id, m_szModuleName)) - return hContact; - } - } - - return NULL;*/ - GC_INFO gci = {0}; gci.Flags = GCF_HCONTACT; gci.pszModule = m_szModuleName; diff --git a/protocols/Sametime/sametime.vcxproj.filters b/protocols/Sametime/sametime.vcxproj.filters index 4d89fb680e..96d0377694 100644 --- a/protocols/Sametime/sametime.vcxproj.filters +++ b/protocols/Sametime/sametime.vcxproj.filters @@ -8,92 +8,92 @@ Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile - - Source Files + + Source Files\meanwhile @@ -121,4 +121,9 @@ Resource Files + + + {425f78cf-1344-45bb-89f5-cfe3510ea8ac} + + \ No newline at end of file diff --git a/protocols/Sametime/src/conference.cpp b/protocols/Sametime/src/conference.cpp index 27c490c388..6d1783958d 100644 --- a/protocols/Sametime/src/conference.cpp +++ b/protocols/Sametime/src/conference.cpp @@ -323,7 +323,7 @@ int CSametimeProto::ChatDeleted(MCONTACT hContact) { debugLogW(L"CSametimeProto::ChatDeleted() hContact=[%x]", hContact); DBVARIANT dbv; - if (!db_get_s(hContact, m_szModuleName, "ChatRoomID", &dbv)) { + if (!getUString(hContact, "stid", &dbv)) { TerminateConference(dbv.pszVal); db_free(&dbv); } @@ -384,7 +384,7 @@ int CSametimeProto::PrebuildContactMenu(WPARAM wParam, LPARAM) // if user is already in our meeting, bool not_present = true; DBVARIANT dbv; - if (my_conference && !db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { + if (my_conference && !getUString(hContact, "stid", &dbv)) { char* user_id = dbv.pszVal; GList *members, *mem; diff --git a/protocols/Sametime/src/options.cpp b/protocols/Sametime/src/options.cpp index e96404360a..d34b6b5505 100644 --- a/protocols/Sametime/src/options.cpp +++ b/protocols/Sametime/src/options.cpp @@ -350,15 +350,15 @@ void CSametimeProto::LoadOptions() { DBVARIANT dbv; - if (!db_get_utf(0, m_szModuleName, "ServerName", &dbv)) { + if (!getUString(0, "ServerName", &dbv)) { strncpy(options.server_name, dbv.pszVal, LSTRINGLEN); db_free(&dbv); } - if (!db_get_utf(0, m_szModuleName, "stid", &dbv)) { + if (!getUString(0, "stid", &dbv)) { strncpy(options.id, dbv.pszVal, LSTRINGLEN); db_free(&dbv); } - if (!db_get_utf(0, m_szModuleName, "Password", &dbv)) { + if (!getUString(0, "Password", &dbv)) { strncpy(options.pword, dbv.pszVal, LSTRINGLEN); db_free(&dbv); } @@ -398,20 +398,19 @@ void CSametimeProto::LoadOptions() void CSametimeProto::SaveOptions() { - db_set_utf(0, m_szModuleName, "ServerName", options.server_name); - - db_set_utf(0, m_szModuleName, "stid", options.id); - //db_set_s(0, m_szModuleName, "Nick", options.id); - db_set_utf(0, m_szModuleName, "Password", options.pword); - - db_set_dw(0, m_szModuleName, "ServerPort", options.port); - db_set_b(0, m_szModuleName, "GetServerContacts", options.get_server_contacts ? 1 : 0); - db_set_dw(0, m_szModuleName, "ClientID", options.client_id); - db_set_dw(0, m_szModuleName, "ClientVersionMajor", options.client_versionMajor); - db_set_dw(0, m_szModuleName, "ClientVersionMinor", options.client_versionMinor); - db_set_b(0, m_szModuleName, "ErrorDisplay", options.err_method); - - db_set_b(0, m_szModuleName, "AutoAddContacts", options.add_contacts ? 1 : 0); - db_set_b(0, m_szModuleName, "EncryptSession", options.encrypt_session ? 1 : 0); - db_set_b(0, m_szModuleName, "IdleAsAway", options.idle_as_away ? 1 : 0); + setUString("ServerName", options.server_name); + + setUString("stid", options.id); + setUString("Password", options.pword); + + setDword("ServerPort", options.port); + setByte("GetServerContacts", options.get_server_contacts ? 1 : 0); + setDword("ClientID", options.client_id); + setDword("ClientVersionMajor", options.client_versionMajor); + setDword("ClientVersionMinor", options.client_versionMinor); + + setByte("ErrorDisplay", options.err_method); + setByte("AutoAddContacts", options.add_contacts ? 1 : 0); + setByte("EncryptSession", options.encrypt_session ? 1 : 0); + setByte("IdleAsAway", options.idle_as_away ? 1 : 0); } diff --git a/protocols/Sametime/src/session_announce_win.cpp b/protocols/Sametime/src/session_announce_win.cpp index 11ff040c7f..ab4d7bb495 100644 --- a/protocols/Sametime/src/session_announce_win.cpp +++ b/protocols/Sametime/src/session_announce_win.cpp @@ -102,7 +102,7 @@ INT_PTR CALLBACK SessionAnnounceDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wPara lvI.mask = LVIF_PARAM; ListView_GetItem(GetDlgItem(hwndDlg, IDC_LST_ANTO), &lvI); - if (!db_get_utf((MCONTACT)lvI.lParam, proto->m_szModuleName, "stid", &dbv)) { + if (!proto->getUString((MCONTACT)lvI.lParam, "stid", &dbv)) { safArg->recipients = g_list_prepend(safArg->recipients, _strdup(dbv.pszVal)); mir_strcpy(p, dbv.pszVal); safArg->recipients = g_list_prepend(safArg->recipients, _strdup(id)); diff --git a/protocols/Sametime/src/userlist.cpp b/protocols/Sametime/src/userlist.cpp index 1bc5102fff..cc64094d40 100644 --- a/protocols/Sametime/src/userlist.cpp +++ b/protocols/Sametime/src/userlist.cpp @@ -5,7 +5,7 @@ MCONTACT CSametimeProto::FindContactByUserId(const char* id) { DBVARIANT dbv; for (auto &hContact : AccContacts()) { - if (!db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { + if (!getUString(hContact, "stid", &dbv)) { if (dbv.pszVal && mir_strcmp(id, dbv.pszVal) == 0) { db_free(&dbv); return hContact; @@ -21,7 +21,7 @@ bool CSametimeProto::GetAwareIdFromContact(MCONTACT hContact, mwAwareIdBlock* id char *proto = Proto_GetBaseAccountName(hContact); DBVARIANT dbv; if (proto && !mir_strcmp(m_szModuleName, proto)) { - if (!db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { + if (!getUString(hContact, "stid", &dbv)) { if (dbv.pszVal) { id_block->type = mwAware_USER; id_block->user = _strdup(dbv.pszVal); @@ -73,21 +73,21 @@ MCONTACT CSametimeProto::AddContact(mwSametimeUser* user, bool temporary) Contact::Hide(hContact, false); } - // add to miranda - if (new_contact) db_set_utf(hContact, m_szModuleName, "stid", id); + if (new_contact) + setUString(hContact, "stid", id); if (name && mir_strlen(name)) - db_set_utf(hContact, m_szModuleName, "Name", name); + setUString(hContact, "Name", name); - if (nick && mir_strlen(nick)) { - db_set_utf(hContact, m_szModuleName, "Nick", nick); + if (mir_strlen(nick)) { + setUString(hContact, "Nick", nick); } - else if (name && mir_strlen(name)) { - db_set_utf(hContact, m_szModuleName, "Nick", name); + else if (mir_strlen(name)) { + setUString(hContact, "Nick", name); } else { - db_set_utf(hContact, m_szModuleName, "Nick", id); + setUString(hContact, "Nick", id); } db_set_b(hContact, m_szModuleName, "type", (uint8_t)type); @@ -196,7 +196,7 @@ void CSametimeProto::ExportContactsToList(mwSametimeList* user_list) mwIdBlock uid; for (auto &hContact : AccContacts()) { - if (!db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { + if (!getUString(hContact, "stid", &dbv)) { if (dbv.pszVal) { if (GetAwareIdFromContact(hContact, &id_block)) { if (!db_get_utf(hContact, "CList", "Group", &dbv2)) { @@ -250,7 +250,7 @@ void CSametimeProto::ExportContactsToList(mwSametimeList* user_list) free(group_name); free(group_alias); - if (!db_get_utf(hContact, m_szModuleName, "Name", &dbv2)) { + if (!getUString(hContact, "Name", &dbv2)) { user_shortName = _strdup(dbv2.pszVal); db_free(&dbv2); } @@ -451,7 +451,7 @@ void mwAwareList_on_aware(mwAwareList* list, mwAwareSnapshot* aware) DBVARIANT dbv; // update self - necessary for some servers - if (aware->online && !db_get_utf(0, proto->m_szModuleName, "stid", &dbv) && mir_strcmp(aware->id.user, dbv.pszVal) == 0) { + if (aware->online && !proto->getUString("stid", &dbv) && mir_strcmp(aware->id.user, dbv.pszVal) == 0) { int new_status = ID_STATUS_OFFLINE; switch (aware->status.status) { @@ -587,7 +587,7 @@ void CSametimeProto::UserListCreate() for (auto &hContact : AccContacts()) { if (!Contact::IsGroupChat(hContact, m_szModuleName) /*&& proto && !mir_strcmp( PROTO, proto)*/) { - if (!db_get_utf(hContact, m_szModuleName, "stid", &dbv)) { + if (!getUString(hContact, "stid", &dbv)) { if (dbv.pszVal) { if (GetAwareIdFromContact(hContact, &id_block)) { // add user to aware list @@ -603,7 +603,7 @@ void CSametimeProto::UserListCreate() } // add self - might be necessary for some servers - if (!db_get_utf(0, m_szModuleName, "stid", &dbv)) { + if (!getUString("stid", &dbv)) { id_block.type = mwAware_USER; id_block.user = dbv.pszVal; id_block.community = nullptr; @@ -710,8 +710,8 @@ void mwResolve_handler_details_callback(mwServiceResolve* srvc, guint32, guint32 if (hContact) { char* name = ((mwResolveMatch*)mri->data)->name; if (name && mir_strlen(name)) { - db_set_utf(hContact, proto->m_szModuleName, "Name", name); - db_set_utf(hContact, proto->m_szModuleName, "Nick", name); + proto->setUString(hContact, "Name", name); + proto->setUString(hContact, "Nick", name); db_set_utf(hContact, "CList", "MyHandle", name); } } diff --git a/protocols/SkypeWeb/src/skype_chatrooms.cpp b/protocols/SkypeWeb/src/skype_chatrooms.cpp index 4f27b13c5c..8fcaa6fc31 100644 --- a/protocols/SkypeWeb/src/skype_chatrooms.cpp +++ b/protocols/SkypeWeb/src/skype_chatrooms.cpp @@ -214,7 +214,7 @@ int CSkypeProto::OnGroupChatEventHook(WPARAM, LPARAM lParam) INT_PTR CSkypeProto::OnJoinChatRoom(WPARAM hContact, LPARAM) { if (hContact) { - ptrW idT(getWStringA(hContact, "ChatRoomID")); + ptrW idT(getWStringA(hContact, SKYPE_SETTINGS_ID)); ptrW nameT(getWStringA(hContact, "Nick")); StartChatRoom(idT, nameT != NULL ? nameT : idT); } @@ -227,7 +227,7 @@ INT_PTR CSkypeProto::OnLeaveChatRoom(WPARAM hContact, LPARAM) return 1; if (hContact && IDYES == MessageBox(nullptr, TranslateT("This chat is going to be destroyed forever with all its contents. This action cannot be undone. Are you sure?"), TranslateT("Warning"), MB_YESNO | MB_ICONQUESTION)) { - ptrW idT(getWStringA(hContact, "ChatRoomID")); + ptrW idT(getWStringA(hContact, SKYPE_SETTINGS_ID)); Chat_Control(m_szModuleName, idT, SESSION_OFFLINE); Chat_Terminate(m_szModuleName, idT); diff --git a/protocols/SkypeWeb/src/skype_contacts.cpp b/protocols/SkypeWeb/src/skype_contacts.cpp index 75827daaf6..4de99c709b 100644 --- a/protocols/SkypeWeb/src/skype_contacts.cpp +++ b/protocols/SkypeWeb/src/skype_contacts.cpp @@ -34,7 +34,7 @@ void CSkypeProto::SetContactStatus(MCONTACT hContact, uint16_t status) void CSkypeProto::SetChatStatus(MCONTACT hContact, int iStatus) { - ptrW tszChatID(getWStringA(hContact, "ChatRoomID")); + ptrW tszChatID(getWStringA(hContact, SKYPE_SETTINGS_ID)); if (tszChatID != NULL) Chat_Control(m_szModuleName, tszChatID, (iStatus == ID_STATUS_OFFLINE) ? SESSION_OFFLINE : SESSION_ONLINE); } @@ -239,7 +239,7 @@ void CSkypeProto::OnContactDeleted(MCONTACT hContact) { if (IsOnline() && hContact) { if (isChatRoom(hContact)) - PushRequest(new DestroyChatroomRequest(getMStringA(hContact, "ChatRoomID"))); + PushRequest(new DestroyChatroomRequest(getMStringA(hContact, SKYPE_SETTINGS_ID))); else PushRequest(new DeleteContactRequest(getId(hContact))); } diff --git a/protocols/Telegram/src/proto.cpp b/protocols/Telegram/src/proto.cpp index ba9565f09f..fa9313c0be 100644 --- a/protocols/Telegram/src/proto.cpp +++ b/protocols/Telegram/src/proto.cpp @@ -83,7 +83,7 @@ void CTelegramProto::OnModulesLoaded() } bool isGroupChat = isChatRoom(cc); - szId = getMStringA(cc, isGroupChat ? "ChatRoomID" : DBKEY_ID); + szId = getMStringA(cc, DBKEY_ID); if (!szId.IsEmpty()) { auto *pUser = new TG_USER(_atoi64(szId.c_str()), cc, isGroupChat); pUser->szAvatarHash = getMStringA(cc, DBKEY_AVATAR_HASH); diff --git a/protocols/Telegram/src/utils.cpp b/protocols/Telegram/src/utils.cpp index 4a122f70c1..bcf222ecab 100644 --- a/protocols/Telegram/src/utils.cpp +++ b/protocols/Telegram/src/utils.cpp @@ -47,17 +47,14 @@ TG_USER* CTelegramProto::AddUser(uint64_t id, bool bIsChat) char szId[100]; _i64toa(id, szId, 10); + setString(hContact, DBKEY_ID, szId); if (bIsChat) { Clist_SetGroup(hContact, TranslateT("Chat rooms")); setByte(hContact, "ChatRoom", 1); - setString(hContact, "ChatRoomID", szId); - } - else { - setString(hContact, DBKEY_ID, szId); - if (mir_wstrlen(m_wszDefaultGroup)) - Clist_SetGroup(hContact, m_wszDefaultGroup); } + else if (mir_wstrlen(m_wszDefaultGroup)) + Clist_SetGroup(hContact, m_wszDefaultGroup); pUser = new TG_USER(id, hContact, bIsChat); m_arUsers.insert(pUser); diff --git a/protocols/VKontakte/src/main.cpp b/protocols/VKontakte/src/main.cpp index ee2ccc09c2..6241d8763f 100644 --- a/protocols/VKontakte/src/main.cpp +++ b/protocols/VKontakte/src/main.cpp @@ -40,7 +40,7 @@ PLUGININFOEX pluginInfoEx = CMPlugin::CMPlugin() : ACCPROTOPLUGIN("VKontakte", pluginInfoEx) { - SetUniqueId("ID"); + SetUniqueId("ID", DBVT_DWORD); } ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/VKontakte/src/misc.cpp b/protocols/VKontakte/src/misc.cpp index c60dbb36ad..18c4b0e5be 100644 --- a/protocols/VKontakte/src/misc.cpp +++ b/protocols/VKontakte/src/misc.cpp @@ -117,6 +117,20 @@ char* ExpUrlEncode(const char *szUrl, bool strict) ///////////////////////////////////////////////////////////////////////////////////////// +void CVkProto::CheckUpdate() +{ + if (getByte("Compatibility") < 1) { + for (auto &cc : AccContacts()) { + LONG userId = getDword(cc, "vk_chat_id", VK_INVALID_USER); + if (userId != VK_INVALID_USER) { + setDword(cc, "ID", userId); + delSetting(cc, "vk_chat_id"); + } + } + setByte("Compatibility", 1); + } +} + void CVkProto::ClearAccessToken() { debugLogA("CVkProto::ClearAccessToken"); @@ -183,7 +197,7 @@ MCONTACT CVkProto::FindChat(LONG dwUserid) return 0; for (auto &hContact : AccContacts()) { - LONG dbUserid = getDword(hContact, "vk_chat_id", VK_INVALID_USER); + LONG dbUserid = getDword(hContact, "ID", VK_INVALID_USER); if (dbUserid == VK_INVALID_USER) continue; diff --git a/protocols/VKontakte/src/vk_chats.cpp b/protocols/VKontakte/src/vk_chats.cpp index 1771b5d474..3a7e2cdfe6 100644 --- a/protocols/VKontakte/src/vk_chats.cpp +++ b/protocols/VKontakte/src/vk_chats.cpp @@ -84,7 +84,7 @@ CVkChatInfo* CVkProto::AppendConversationChat(int iChatId, const JSONNode& jnIte for (int i = _countof(sttStatuses) - 1; i >= 0; i--) Chat_AddGroup(si, TranslateW(sttStatuses[i])); - setDword(si->hContact, "vk_chat_id", iChatId); + setDword(si->hContact, "ID", iChatId); CMStringW wszHomepage(FORMAT, L"https://vk.com/im?sel=c%d", iChatId); setWString(si->hContact, "Homepage", wszHomepage); @@ -445,6 +445,17 @@ void CVkProto::AppendChatMessage(CVkChatInfo *cc, LONG uid, int msgTime, LPCWSTR ///////////////////////////////////////////////////////////////////////////////////////// +CVkChatInfo* CVkProto::GetChatByContact(MCONTACT hContact) +{ + LONG dbUserid = getDword(hContact, "ID", VK_INVALID_USER); + if (dbUserid == VK_INVALID_USER) + return nullptr; + + wchar_t wszChatID[40]; + _itow(dbUserid, wszChatID, 10); + return GetChatById(wszChatID); +} + CVkChatInfo* CVkProto::GetChatById(LPCWSTR pwszId) { for (auto &it : m_chats) @@ -458,13 +469,9 @@ CVkChatInfo* CVkProto::GetChatById(LPCWSTR pwszId) void CVkProto::SetChatStatus(MCONTACT hContact, int iStatus) { - ptrW wszChatID(getWStringA(hContact, "ChatRoomID")); - if (wszChatID == nullptr) - return; - - CVkChatInfo *cc = GetChatById(wszChatID); + CVkChatInfo *cc = GetChatByContact(hContact); if (cc != nullptr) - Chat_Control(m_szModuleName, wszChatID, (iStatus == ID_STATUS_OFFLINE) ? SESSION_OFFLINE : SESSION_ONLINE); + Chat_Control(m_szModuleName, cc->m_wszId, (iStatus == ID_STATUS_OFFLINE) ? SESSION_OFFLINE : SESSION_ONLINE); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -601,7 +608,7 @@ INT_PTR __cdecl CVkProto::OnJoinChat(WPARAM hContact, LPARAM) if (!IsOnline() || getBool(hContact, "kicked") || !getBool(hContact, "off")) return 1; - int chat_id = getDword(hContact, "vk_chat_id", VK_INVALID_USER); + int chat_id = getDword(hContact, "ID", VK_INVALID_USER); if (chat_id == VK_INVALID_USER) return 1; @@ -619,11 +626,7 @@ INT_PTR __cdecl CVkProto::OnLeaveChat(WPARAM hContact, LPARAM) if (!IsOnline()) return 1; - ptrW wszChatID(getWStringA(hContact, "ChatRoomID")); - if (wszChatID == nullptr) - return 1; - - CVkChatInfo *cc = GetChatById(wszChatID); + CVkChatInfo *cc = GetChatByContact(hContact); if (cc == nullptr) return 1; @@ -705,7 +708,7 @@ INT_PTR __cdecl CVkProto::SvcDestroyKickChat(WPARAM hContact, LPARAM) if (!getBool(hContact, "off")) return 1; - int chat_id = getDword(hContact, "vk_chat_id", VK_INVALID_USER); + int chat_id = getDword(hContact, "ID", VK_INVALID_USER); if (chat_id == VK_INVALID_USER) return 1; diff --git a/protocols/VKontakte/src/vk_files.cpp b/protocols/VKontakte/src/vk_files.cpp index a7306c1568..7ac1b9657e 100644 --- a/protocols/VKontakte/src/vk_files.cpp +++ b/protocols/VKontakte/src/vk_files.cpp @@ -363,14 +363,7 @@ void CVkProto::OnReciveUploadFile(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pR AsyncHttpRequest *pMsgReq; if (isChatRoom(fup->hContact)) { - - ptrW wszChatID(getWStringA(fup->hContact, "ChatRoomID")); - if (!wszChatID) { - SendFileFiled(fup, VKERR_INVALID_USER); - return; - } - - CVkChatInfo *cc = GetChatById(wszChatID); + CVkChatInfo *cc = GetChatByContact(fup->hContact); if (cc == nullptr) { SendFileFiled(fup, VKERR_INVALID_USER); return; diff --git a/protocols/VKontakte/src/vk_messages.cpp b/protocols/VKontakte/src/vk_messages.cpp index e6f31c2256..7bec7a13fd 100644 --- a/protocols/VKontakte/src/vk_messages.cpp +++ b/protocols/VKontakte/src/vk_messages.cpp @@ -26,8 +26,8 @@ int CVkProto::SendMsg(MCONTACT hContact, int, const char *szMsg) return 0; bool bIsChat = isChatRoom(hContact); - LONG iUserID = getDword(hContact, bIsChat ? "vk_chat_id" : "ID", VK_INVALID_USER); + LONG iUserID = getDword(hContact, "ID", VK_INVALID_USER); if (iUserID == VK_INVALID_USER || iUserID == VK_FEED_USER) { ProtoBroadcastAsync(hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, 0); return 0; diff --git a/protocols/VKontakte/src/vk_proto.cpp b/protocols/VKontakte/src/vk_proto.cpp index f16be722f7..b712b83eb2 100644 --- a/protocols/VKontakte/src/vk_proto.cpp +++ b/protocols/VKontakte/src/vk_proto.cpp @@ -46,6 +46,7 @@ CVkProto::CVkProto(const char *szModuleName, const wchar_t *pwszUserName) : m_tWorkThreadTimer = m_tPoolThreadTimer = time(0); InitQueue(); + CheckUpdate(); CreateProtoService(PS_CREATEACCMGRUI, &CVkProto::SvcCreateAccMgrUI); CreateProtoService(PS_GETAVATARINFO, &CVkProto::SvcGetAvatarInfo); diff --git a/protocols/VKontakte/src/vk_proto.h b/protocols/VKontakte/src/vk_proto.h index fd680580a6..43936e8c5b 100644 --- a/protocols/VKontakte/src/vk_proto.h +++ b/protocols/VKontakte/src/vk_proto.h @@ -357,6 +357,7 @@ private: int IsHystoryMessageExist(MCONTACT hContact); void SetSrmmReadStatus(MCONTACT hContact); void MarkDialogAsRead(MCONTACT hContact); + void CheckUpdate(); char* GetStickerId(const char *Msg, int& stickerid); CMStringA GetAttachmentsFromMessage(const char * Msg); CMStringW SpanVKNotificationType(CMStringW& wszType, VKObjType& vkFeedback, VKObjType& vkParent); @@ -413,6 +414,7 @@ private: LPTSTR ChangeChatTopic(CVkChatInfo*); void SetChatStatus(MCONTACT hContact, int iStatus); CVkChatInfo* GetChatById(LPCWSTR pwszId); + CVkChatInfo* GetChatByContact(MCONTACT hContact); INT_PTR __cdecl SvcCreateChat(WPARAM, LPARAM); void __cdecl GetAwayMsgThread(void* p); }; diff --git a/protocols/WhatsApp/src/avatars.cpp b/protocols/WhatsApp/src/avatars.cpp index fd4bbfde1f..7be5b1d412 100644 --- a/protocols/WhatsApp/src/avatars.cpp +++ b/protocols/WhatsApp/src/avatars.cpp @@ -46,7 +46,7 @@ INT_PTR WhatsAppProto::GetAvatarInfo(WPARAM wParam, LPARAM lParam) { PROTO_AVATAR_INFORMATION *pai = (PROTO_AVATAR_INFORMATION*)lParam; - ptrA jid(getStringA(pai->hContact, isChatRoom(pai->hContact) ? "ChatRoomID" : DBKEY_ID)); + ptrA jid(getStringA(pai->hContact, DBKEY_ID)); if (jid == NULL) return GAIR_NOAVATAR; @@ -94,7 +94,7 @@ CMStringW WhatsAppProto::GetAvatarFileName(MCONTACT hContact) CMStringA jid; if (hContact != NULL) { - ptrA szId(getStringA(hContact, isChatRoom(hContact) ? "ChatRoomID" : DBKEY_ID)); + ptrA szId(getStringA(hContact, DBKEY_ID)); if (szId == NULL) return L""; diff --git a/protocols/WhatsApp/src/proto.cpp b/protocols/WhatsApp/src/proto.cpp index 40ab1336b8..1c2e0a7142 100644 --- a/protocols/WhatsApp/src/proto.cpp +++ b/protocols/WhatsApp/src/proto.cpp @@ -153,10 +153,9 @@ void WhatsAppProto::OnModulesLoaded() m_arUsers.insert(new WAUser(0, m_szJid, false)); for (auto &cc : AccContacts()) { - bool bIsChat = isChatRoom(cc); - CMStringA szId(getMStringA(cc, bIsChat ? "ChatRoomID" : DBKEY_ID)); + CMStringA szId(getMStringA(cc, DBKEY_ID)); if (!szId.IsEmpty()) - m_arUsers.insert(new WAUser(cc, szId, bIsChat)); + m_arUsers.insert(new WAUser(cc, szId, isChatRoom(cc))); } } diff --git a/protocols/WhatsApp/src/utils.cpp b/protocols/WhatsApp/src/utils.cpp index 1e2d39f553..a1d234e405 100644 --- a/protocols/WhatsApp/src/utils.cpp +++ b/protocols/WhatsApp/src/utils.cpp @@ -113,19 +113,16 @@ WAUser* WhatsAppProto::AddUser(const char *szId, bool bTemporary) MCONTACT hContact = db_add_contact(); Proto_AddToContact(hContact, m_szModuleName); + setString(hContact, DBKEY_ID, szId); pUser = new WAUser(hContact, mir_strdup(szId)); pUser->bIsGroupChat = WAJid(szId).isGroup(); if (pUser->bIsGroupChat) { setByte(hContact, "ChatRoom", 1); - setString(hContact, "ChatRoomID", szId); - } - else { - setString(hContact, DBKEY_ID, szId); - if (m_wszDefaultGroup) - Clist_SetGroup(hContact, m_wszDefaultGroup); } + else if (m_wszDefaultGroup) + Clist_SetGroup(hContact, m_wszDefaultGroup); if (bTemporary) Contact::RemoveFromList(hContact); -- cgit v1.2.3