summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2019-03-08 15:02:00 +0300
committerGeorge Hazan <ghazan@miranda.im>2019-03-08 15:02:00 +0300
commita23186175cff579d5aeb231372e87b0b852bdb38 (patch)
tree7c9cb784d67e80851ecfd6a21d4d038f3ff0c5c4
parent294e9e5bc47f80e61b701b1ecb748b5e8100e465 (diff)
fixes #1863 completely ([Discord] add manual history sync from IMs/DMs (private chat))
-rw-r--r--protocols/Discord/src/menus.cpp29
-rw-r--r--protocols/Discord/src/proto.h2
-rw-r--r--protocols/Discord/src/server.cpp13
-rw-r--r--protocols/Discord/src/version.h2
4 files changed, 37 insertions, 9 deletions
diff --git a/protocols/Discord/src/menus.cpp b/protocols/Discord/src/menus.cpp
index 88404bd782..fc3df4d44e 100644
--- a/protocols/Discord/src/menus.cpp
+++ b/protocols/Discord/src/menus.cpp
@@ -76,6 +76,19 @@ INT_PTR CDiscordProto::OnMenuLeaveGuild(WPARAM hContact, LPARAM)
/////////////////////////////////////////////////////////////////////////////////////////
+INT_PTR CDiscordProto::OnMenuLoadHistory(WPARAM hContact, LPARAM)
+{
+ auto *pUser = FindUser(getId(hContact, DB_KEY_ID));
+ if (pUser) {
+ pUser->bSkipHistory = true;
+ RetrieveHistory(pUser, MSG_AFTER, 0, 100);
+ pUser->bSkipHistory = false;
+ }
+ return 0;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
INT_PTR CDiscordProto::OnMenuToggleSync(WPARAM hContact, LPARAM)
{
bool bEnabled = !getBool(hContact, "EnableSync");
@@ -133,34 +146,42 @@ void CDiscordProto::InitMenus()
CMenuItem mi2(&g_plugin);
mi2.pszService = "/LeaveGuild";
CreateProtoService(mi2.pszService, &CDiscordProto::OnMenuLeaveGuild);
+ SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8C);
mi2.name.a = LPGEN("Leave guild");
mi2.position = -200001000;
mi2.hIcolibItem = Skin_GetIconHandle(SKINICON_CHAT_LEAVE);
- SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8C);
m_hMenuLeaveGuild = Menu_AddContactMenuItem(&mi2, m_szModuleName);
mi2.pszService = "/CreateChannel";
CreateProtoService(mi2.pszService, &CDiscordProto::OnMenuCreateChannel);
+ SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8D);
mi2.name.a = LPGEN("Create new channel");
mi2.position = -200001001;
mi2.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_ADDCONTACT);
- SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8D);
m_hMenuCreateChannel = Menu_AddContactMenuItem(&mi2, m_szModuleName);
+ SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8E);
mi2.pszService = "/CopyId";
mi2.name.a = LPGEN("Copy Discord ID");
mi2.position = -200001002;
mi2.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_USERONLINE);
- SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8E);
Menu_AddContactMenuItem(&mi2, m_szModuleName);
mi2.pszService = "/ToggleSync";
CreateProtoService(mi2.pszService, &CDiscordProto::OnMenuToggleSync);
+ SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8F);
mi2.name.a = LPGEN("Enable guild");
mi2.position = -200001003;
mi2.hIcolibItem = Skin_GetIconHandle(SKINICON_CHAT_JOIN);
- SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x8F);
m_hMenuToggleSync = Menu_AddContactMenuItem(&mi2, m_szModuleName);
+ mi2.pszService = "/LoadHistory";
+ CreateProtoService(mi2.pszService, &CDiscordProto::OnMenuLoadHistory);
+ SET_UID(mi2, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x90);
+ mi2.name.a = LPGEN("Load server history");
+ mi2.position = -200001004;
+ mi2.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_HISTORY);
+ Menu_AddContactMenuItem(&mi2, m_szModuleName);
+
HookProtoEvent(ME_CLIST_PREBUILDCONTACTMENU, &CDiscordProto::OnMenuPrebuild);
}
diff --git a/protocols/Discord/src/proto.h b/protocols/Discord/src/proto.h
index 873287bc1c..611db0d662 100644
--- a/protocols/Discord/src/proto.h
+++ b/protocols/Discord/src/proto.h
@@ -65,6 +65,7 @@ struct CDiscordUser : public MZeroedObject
SnowFlake parentId;
bool bIsPrivate;
bool bIsGroup;
+ bool bSkipHistory;
struct CDiscordGuild *pGuild;
@@ -209,6 +210,7 @@ class CDiscordProto : public PROTO<CDiscordProto>
INT_PTR __cdecl OnMenuCreateChannel(WPARAM, LPARAM);
INT_PTR __cdecl OnMenuJoinGuild(WPARAM, LPARAM);
INT_PTR __cdecl OnMenuLeaveGuild(WPARAM, LPARAM);
+ INT_PTR __cdecl OnMenuLoadHistory(WPARAM, LPARAM);
INT_PTR __cdecl OnMenuToggleSync(WPARAM, LPARAM);
HGENMENU m_hMenuLeaveGuild, m_hMenuCreateChannel, m_hMenuToggleSync;
diff --git a/protocols/Discord/src/server.cpp b/protocols/Discord/src/server.cpp
index 661e313290..cae684f970 100644
--- a/protocols/Discord/src/server.cpp
+++ b/protocols/Discord/src/server.cpp
@@ -109,10 +109,15 @@ void CDiscordProto::OnReceiveHistory(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest
char szMsgId[100];
_i64toa_s(msgid, szMsgId, _countof(szMsgId), 10);
MEVENT hDbEvent = db_event_getById(m_szModuleName, szMsgId);
- if (hDbEvent != 0)
- db_event_edit(pUser->hContact, hDbEvent, &dbei);
- else
- db_event_add(pUser->hContact, &dbei);
+ if (hDbEvent != 0) {
+ if (!pUser->bSkipHistory)
+ db_event_edit(pUser->hContact, hDbEvent, &dbei);
+ }
+ else {
+ MEVENT hNew = db_event_add(pUser->hContact, &dbei);
+ if (hNew != 0)
+ db_event_setId(m_szModuleName, hNew, szMsgId);
+ }
}
else {
ParseSpecialChars(si, wszText);
diff --git a/protocols/Discord/src/version.h b/protocols/Discord/src/version.h
index da2758b1c2..61ad77e877 100644
--- a/protocols/Discord/src/version.h
+++ b/protocols/Discord/src/version.h
@@ -1,7 +1,7 @@
#define __MAJOR_VERSION 0
#define __MINOR_VERSION 6
#define __RELEASE_NUM 1
-#define __BUILD_NUM 3
+#define __BUILD_NUM 4
#include <stdver.h>