diff options
-rw-r--r-- | protocols/Facebook/res/facebook.rc | 23 | ||||
-rw-r--r-- | protocols/Facebook/src/options.cpp | 7 | ||||
-rw-r--r-- | protocols/Facebook/src/proto.cpp | 9 | ||||
-rw-r--r-- | protocols/Facebook/src/proto.h | 3 | ||||
-rw-r--r-- | protocols/Facebook/src/resource.h | 6 | ||||
-rw-r--r-- | protocols/Facebook/src/server.cpp | 47 | ||||
-rw-r--r-- | protocols/Facebook/src/version.h | 2 |
7 files changed, 89 insertions, 8 deletions
diff --git a/protocols/Facebook/res/facebook.rc b/protocols/Facebook/res/facebook.rc index 41d5e87fb3..825fea836d 100644 --- a/protocols/Facebook/res/facebook.rc +++ b/protocols/Facebook/res/facebook.rc @@ -68,7 +68,8 @@ BEGIN EDITTEXT IDC_UN,56,0,122,12,ES_AUTOHSCROLL LTEXT "Password:",IDC_STATIC,6,18,46,10,0,WS_EX_RIGHT EDITTEXT IDC_PW,56,16,122,12,ES_PASSWORD | ES_AUTOHSCROLL - CONTROL "Create a new Facebook account", IDC_NEWACCOUNTLINK, "Hyperlink", WS_TABSTOP, 6, 40, 172, 12 + CONTROL "Create a new Facebook account",IDC_NEWACCOUNTLINK, + "Hyperlink",WS_TABSTOP,6,40,172,12 END IDD_OPTIONS DIALOGEX 0, 0, 305, 195 @@ -83,11 +84,16 @@ BEGIN EDITTEXT IDC_PW,84,34,123,13,ES_PASSWORD | ES_AUTOHSCROLL CONTROL "Create a new Facebook account",IDC_NEWACCOUNTLINK, "Hyperlink",WS_TABSTOP,84,53,189,10 - GROUPBOX "Contacts",IDC_STATIC,7,77,291,103 - LTEXT "Default group:",IDC_STATIC,17,91,61,8,0,WS_EX_RIGHT - EDITTEXT IDC_GROUP,84,89,123,13,ES_AUTOHSCROLL + GROUPBOX "Contacts",IDC_STATIC,7,70,291,31 + LTEXT "Default group:",IDC_STATIC,17,84,61,8,0,WS_EX_RIGHT + EDITTEXT IDC_GROUP,84,82,123,13,ES_AUTOHSCROLL + GROUPBOX "Group chats",IDC_STATIC,7,103,291,44 + CONTROL "Enable group chats",IDC_ENABLECHATS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,117,277,10 + CONTROL "Do not open chat windows on creation",IDC_HIDECHATS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,130,277,10 END + ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO @@ -99,6 +105,10 @@ BEGIN IDD_FACEBOOKACCOUNT, DIALOG BEGIN END + + IDD_OPTIONS, DIALOG + BEGIN + END END #endif // APSTUDIO_INVOKED @@ -113,6 +123,11 @@ BEGIN 0 END +IDD_OPTIONS AFX_DIALOG_LAYOUT +BEGIN + 0 +END + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/Facebook/src/options.cpp b/protocols/Facebook/src/options.cpp index 9d47fd8e09..9e9f778298 100644 --- a/protocols/Facebook/src/options.cpp +++ b/protocols/Facebook/src/options.cpp @@ -25,13 +25,18 @@ typedef CProtoDlgBase<FacebookProto> CFBDlgBase; class CFacebookAccOptsDlg : public CFBDlgBase { CCtrlEdit edtGroup; + CCtrlCheck chkEnableChats, chkHideChats; public: CFacebookAccOptsDlg(FacebookProto *pThis) : CFBDlgBase(pThis, IDD_OPTIONS), - edtGroup(this, IDC_GROUP) + edtGroup(this, IDC_GROUP), + chkHideChats(this, IDC_HIDECHATS), + chkEnableChats(this, IDC_ENABLECHATS) { CreateLink(edtGroup, pThis->m_wszDefaultGroup); + CreateLink(chkHideChats, pThis->m_bUseGroupchats); + CreateLink(chkEnableChats, pThis->m_bHideGroupchats); } bool OnInitDialog() override diff --git a/protocols/Facebook/src/proto.cpp b/protocols/Facebook/src/proto.cpp index b2e97d901e..0e1697705b 100644 --- a/protocols/Facebook/src/proto.cpp +++ b/protocols/Facebook/src/proto.cpp @@ -42,6 +42,8 @@ FacebookProto::FacebookProto(const char *proto_name, const wchar_t *username) : m_users(50, CompareUsers), arOwnMessages(1, CompareMessages), m_bUseBigAvatars(this, "UseBigAvatars", true), + m_bUseGroupchats(this, "UseGroupChats", true), + m_bHideGroupchats(this, "HideGroupChats", true), m_wszDefaultGroup(this, "DefaultGroup", L"Facebook") { for (auto &cc : AccContacts()) { @@ -108,6 +110,13 @@ FacebookProto::FacebookProto(const char *proto_name, const wchar_t *username) : // Default group Clist_GroupCreate(0, m_wszDefaultGroup); + + // Group chats + GCREGISTER gcr = {}; + gcr.dwFlags = GC_TYPNOTIF; + gcr.ptszDispName = m_tszUserName; + gcr.pszModule = m_szModuleName; + Chat_Register(&gcr); } FacebookProto::~FacebookProto() diff --git a/protocols/Facebook/src/proto.h b/protocols/Facebook/src/proto.h index 2157642a06..4f6923431d 100644 --- a/protocols/Facebook/src/proto.h +++ b/protocols/Facebook/src/proto.h @@ -453,6 +453,7 @@ class FacebookProto : public PROTO<FacebookProto> void OnLoggedOut(); bool RefreshToken(); + void RefreshThreads(); int RefreshContacts(); FacebookUser* AddContact(const CMStringW &wszId, bool bTemp = true); @@ -477,6 +478,8 @@ public: CMOption<wchar_t *> m_wszDefaultGroup; // clist group to store contacts CMOption<BYTE> m_bUseBigAvatars; // use big or small avatars by default + CMOption<BYTE> m_bUseGroupchats; // do we need group chats at all? + CMOption<BYTE> m_bHideGroupchats; // do not open chat windows on creation //////////////////////////////////////////////////////////////////////////////////////// // PROTO_INTERFACE diff --git a/protocols/Facebook/src/resource.h b/protocols/Facebook/src/resource.h index 2db5b9fc2e..86512c93e7 100644 --- a/protocols/Facebook/src/resource.h +++ b/protocols/Facebook/src/resource.h @@ -10,14 +10,16 @@ #define IDC_PW 1002 #define IDC_NEWACCOUNTLINK 1003 #define IDC_GROUP 1004 +#define IDC_ENABLECHATS 1005 +#define IDC_HIDECHATS 1006 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1004 +#define _APS_NEXT_CONTROL_VALUE 1006 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/protocols/Facebook/src/server.cpp b/protocols/Facebook/src/server.cpp index 43c12a51c4..2dd06bab7b 100644 --- a/protocols/Facebook/src/server.cpp +++ b/protocols/Facebook/src/server.cpp @@ -67,6 +67,9 @@ void FacebookProto::OnLoggedIn() // connect message queue MqttQueueConnect(); + // request message threads if needed + if (m_bUseGroupchats) + RefreshThreads(); } void FacebookProto::OnLoggedOut() @@ -157,6 +160,50 @@ int FacebookProto::RefreshContacts() return 0; } +void FacebookProto::RefreshThreads() +{ + auto * pReq = CreateRequestGQL(FB_API_QUERY_THREADS); + JSONNode json; json << CHAR_PARAM("2", "true") << CHAR_PARAM("12", "false") << CHAR_PARAM("13", "false"); + pReq << CHAR_PARAM("query_params", json.write().c_str()); + pReq->CalcSig(); + + JsonReply reply(ExecuteRequest(pReq)); + if (!reply.error()) { + auto &root = reply.data()["viewer"]["message_threads"]; + + for (auto &n : root["nodes"]) { + if (!n["is_group_thread"].as_bool()) + continue; + + CMStringW chatId(n["id"].as_mstring()); + CMStringW name(n["name"].as_mstring()); + + auto *si = Chat_NewSession(GCW_CHATROOM, m_szModuleName, chatId, name); + if (si == nullptr) + continue; + + Chat_AddGroup(si, TranslateT("Participant")); + + for (auto &u : n["all_participants"]["nodes"]) { + auto &ur = u["messaging_actor"]; + CMStringW userId(ur["id"].as_mstring()); + CMStringW userName(ur["name"].as_mstring()); + + GCEVENT gce = { m_szModuleName, 0, GC_EVENT_JOIN }; + gce.pszID.w = chatId; + gce.pszUID.w = userId; + gce.pszNick.w = userName; + gce.bIsMe = _wtoi64(userId) == m_uid; + gce.time = time(0); + Chat_Event(&gce); + } + + Chat_Control(m_szModuleName, chatId, m_bHideGroupchats ? WINDOW_HIDDEN : SESSION_INITDONE); + Chat_Control(m_szModuleName, chatId, SESSION_ONLINE); + } + } +} + bool FacebookProto::RefreshToken() { auto *pReq = CreateRequest(FB_API_URL_AUTH, "authenticate", "auth.login"); diff --git a/protocols/Facebook/src/version.h b/protocols/Facebook/src/version.h index 51d5c78500..4abba67d37 100644 --- a/protocols/Facebook/src/version.h +++ b/protocols/Facebook/src/version.h @@ -1,6 +1,6 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 0 -#define __RELEASE_NUM 1 +#define __RELEASE_NUM 2 #define __BUILD_NUM 1 #include <stdver.h> |