summaryrefslogtreecommitdiff
path: root/protocols/Discord/src/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Discord/src/utils.cpp')
-rw-r--r--protocols/Discord/src/utils.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/protocols/Discord/src/utils.cpp b/protocols/Discord/src/utils.cpp
index 0513e49aac..ac9eb85c11 100644
--- a/protocols/Discord/src/utils.cpp
+++ b/protocols/Discord/src/utils.cpp
@@ -32,6 +32,12 @@ JSONNode& operator<<(JSONNode &json, const INT_PARAM &param)
return json;
}
+JSONNode& operator<<(JSONNode &json, const BOOL_PARAM &param)
+{
+ json.push_back(JSONNode(param.szName, param.bValue));
+ return json;
+}
+
JSONNode& operator<<(JSONNode &json, const CHAR_PARAM &param)
{
json.push_back(JSONNode(param.szName, param.szValue));
@@ -64,6 +70,15 @@ time_t StringToDate(const CMStringW &str)
/////////////////////////////////////////////////////////////////////////////////////////
+static LONG volatile g_counter = 1;
+
+int SerialNext()
+{
+ return InterlockedIncrement(&g_counter);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
SnowFlake CDiscordProto::getId(const char *szSetting)
{
DBVARIANT dbv;
@@ -100,6 +115,8 @@ void CDiscordProto::setId(MCONTACT hContact, const char *szSetting, SnowFlake iV
/////////////////////////////////////////////////////////////////////////////////////////
+static CDiscordUser *g_myUser = new CDiscordUser(0);
+
CDiscordUser* CDiscordProto::FindUser(SnowFlake id)
{
return arUsers.find((CDiscordUser*)&id);
@@ -116,9 +133,23 @@ CDiscordUser* CDiscordProto::FindUser(const wchar_t *pwszUsername, int iDiscrimi
return NULL;
}
+CDiscordUser* CDiscordProto::FindUserByChannel(SnowFlake channelId)
+{
+ for (int i = 0; i < arUsers.getCount(); i++) {
+ CDiscordUser &p = arUsers[i];
+ if (p.channelId == channelId)
+ return &p;
+ }
+
+ return NULL;
+}
+
CDiscordUser* CDiscordProto::PrepareUser(const JSONNode &user)
{
SnowFlake id = _wtoi64(user["id"].as_mstring());
+ if (id == m_ownId)
+ return g_myUser;
+
int iDiscriminator = _wtoi(user["discriminator"].as_mstring());
CMStringW avatar = user["avatar"].as_mstring();
CMStringW username = user["username"].as_mstring();
@@ -137,6 +168,7 @@ CDiscordUser* CDiscordProto::PrepareUser(const JSONNode &user)
MCONTACT hContact = db_add_contact();
Proto_AddToContact(hContact, m_szModuleName);
+ db_set_ws(hContact, "CList", "Group", m_wszDefaultGroup);
setId(hContact, DB_KEY_ID, id);
setWString(hContact, DB_KEY_NICK, username);
setDword(hContact, DB_KEY_DISCR, iDiscriminator);