diff options
Diffstat (limited to 'protocols/Discord/src/utils.cpp')
-rw-r--r-- | protocols/Discord/src/utils.cpp | 32 |
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 ¶m) return json; } +JSONNode& operator<<(JSONNode &json, const BOOL_PARAM ¶m) +{ + json.push_back(JSONNode(param.szName, param.bValue)); + return json; +} + JSONNode& operator<<(JSONNode &json, const CHAR_PARAM ¶m) { 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); |