summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2021-06-04 22:48:55 +0300
committerGeorge Hazan <ghazan@miranda.im>2021-06-04 22:48:55 +0300
commitf376864fbf30f106b27f67ff33627dde3530121b (patch)
tree328ec2493c7eb3e156323dd60e61817171c8b64a
parent4fdc401d4e5f91aa55f4ea4214ea484c25ac6ce3 (diff)
fixes #2901 (Facebook: implement popup if login/password are incorrect)
-rw-r--r--protocols/Facebook/src/proto.h4
-rw-r--r--protocols/Facebook/src/server.cpp22
2 files changed, 17 insertions, 9 deletions
diff --git a/protocols/Facebook/src/proto.h b/protocols/Facebook/src/proto.h
index e86117bfff..3a69b24022 100644
--- a/protocols/Facebook/src/proto.h
+++ b/protocols/Facebook/src/proto.h
@@ -407,7 +407,7 @@ class FacebookProto : public PROTO<FacebookProto>
uint8_t *doZip(size_t cbData, const void *pData, size_t &cbRes);
uint8_t *doUnzip(size_t cbData, const void *pData, size_t &cbRes);
- void ConnectionFailed();
+ void ConnectionFailed(int iErrorCode = 0);
AsyncHttpRequest *CreateRequest(const char *szUrl, const char *szName, const char *szMethod);
AsyncHttpRequest *CreateRequestGQL(int64_t id);
@@ -482,7 +482,7 @@ class FacebookProto : public PROTO<FacebookProto>
FacebookUser* RefreshThread(JSONNode &n);
FacebookUser* RefreshThread(CMStringW &wszId);
bool RefreshSid();
- bool RefreshToken();
+ int RefreshToken();
void RefreshThreads();
int RefreshContacts();
diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp
index 034d2b9873..5455806163 100644
--- a/protocols/Facebook/src/server.cpp
+++ b/protocols/Facebook/src/server.cpp
@@ -20,8 +20,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
-void FacebookProto::ConnectionFailed()
+void FacebookProto::ConnectionFailed(int iErrorCode)
{
+ if (iErrorCode) {
+ POPUPDATAW popup;
+ popup.lchIcon = IcoLib_GetIconByHandle(Skin_GetIconHandle(SKINICON_ERROR), true);
+ wcscpy_s(popup.lpwzContactName, m_tszUserName);
+ mir_snwprintf(popup.lpwzText, TranslateT("Connection failed with error code %d"), iErrorCode);
+ PUAddPopupW(&popup);
+ }
+
ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_FAILED, (HANDLE)m_iStatus, m_iDesiredStatus);
m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
@@ -346,7 +354,7 @@ void FacebookProto::RefreshThreads()
}
}
-bool FacebookProto::RefreshToken()
+int FacebookProto::RefreshToken()
{
auto *pReq = CreateRequest(FB_API_URL_AUTH, "authenticate", "auth.login");
pReq->flags |= NLHRF_NODUMP;
@@ -356,7 +364,7 @@ bool FacebookProto::RefreshToken()
JsonReply reply(ExecuteRequest(pReq));
if (reply.error())
- return false;
+ return reply.error();
m_szAuthToken = reply.data()["access_token"].as_mstring();
setString(DBKEY_TOKEN, m_szAuthToken);
@@ -364,7 +372,7 @@ bool FacebookProto::RefreshToken()
CMStringA m_szUid = reply.data()["uid"].as_mstring();
setString(DBKEY_ID, m_szUid);
m_uid = _atoi64(m_szUid);
- return true;
+ return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -376,8 +384,8 @@ void FacebookProto::ServerThread(void *)
LBL_Begin:
m_szAuthToken = getMStringA(DBKEY_TOKEN);
if (m_szAuthToken.IsEmpty()) {
- if (!RefreshToken()) {
- ConnectionFailed();
+ if (int iErrorCode = RefreshToken()) {
+ ConnectionFailed(iErrorCode);
return;
}
}
@@ -389,7 +397,7 @@ LBL_Begin:
goto LBL_Begin;
}
- ConnectionFailed();
+ ConnectionFailed(iErrorCode);
return;
}