diff options
author | Robert Pösel <robyer@seznam.cz> | 2014-08-24 15:46:24 +0000 |
---|---|---|
committer | Robert Pösel <robyer@seznam.cz> | 2014-08-24 15:46:24 +0000 |
commit | 9afd590f4fd860d3d023203137129c8870bb8579 (patch) | |
tree | a8cb541e41f5b72bfde3309e0a9f46794151a104 /protocols | |
parent | aa28fe4f758a20680b63d0bda40207548ab93fdb (diff) |
Facebook: Support for showing captcha codes; Raise version bump from previous commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@10319 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/FacebookRM/facebook_10.vcxproj | 2 | ||||
-rw-r--r-- | protocols/FacebookRM/facebook_10.vcxproj.filters | 6 | ||||
-rw-r--r-- | protocols/FacebookRM/facebook_12.vcxproj | 4 | ||||
-rw-r--r-- | protocols/FacebookRM/facebook_12.vcxproj.filters | 8 | ||||
-rw-r--r-- | protocols/FacebookRM/res/facebook.rc | 25 | ||||
-rw-r--r-- | protocols/FacebookRM/res/key.ico | bin | 0 -> 1150 bytes | |||
-rw-r--r-- | protocols/FacebookRM/src/captcha.cpp | 144 | ||||
-rw-r--r-- | protocols/FacebookRM/src/client.h | 2 | ||||
-rw-r--r-- | protocols/FacebookRM/src/common.h | 1 | ||||
-rw-r--r-- | protocols/FacebookRM/src/communication.cpp | 51 | ||||
-rw-r--r-- | protocols/FacebookRM/src/constants.h | 5 | ||||
-rw-r--r-- | protocols/FacebookRM/src/messages.cpp | 8 | ||||
-rw-r--r-- | protocols/FacebookRM/src/proto.h | 1 | ||||
-rw-r--r-- | protocols/FacebookRM/src/resource.h | 14 | ||||
-rw-r--r-- | protocols/FacebookRM/src/theme.cpp | 1 | ||||
-rw-r--r-- | protocols/FacebookRM/src/version.h | 4 |
16 files changed, 252 insertions, 24 deletions
diff --git a/protocols/FacebookRM/facebook_10.vcxproj b/protocols/FacebookRM/facebook_10.vcxproj index 3256202fad..469ed2f29e 100644 --- a/protocols/FacebookRM/facebook_10.vcxproj +++ b/protocols/FacebookRM/facebook_10.vcxproj @@ -175,6 +175,7 @@ </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\avatars.cpp" />
+ <ClCompile Include="src\captcha.cpp" />
<ClCompile Include="src\chat.cpp" />
<ClCompile Include="src\communication.cpp" />
<ClCompile Include="src\connection.cpp" />
@@ -223,6 +224,7 @@ <Image Include="res\poke.ico" />
<Image Include="res\conversation.ico" />
<Image Include="res\read.ico" />
+ <Image Include="res\key.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
diff --git a/protocols/FacebookRM/facebook_10.vcxproj.filters b/protocols/FacebookRM/facebook_10.vcxproj.filters index aceb1bb5f1..b27274028e 100644 --- a/protocols/FacebookRM/facebook_10.vcxproj.filters +++ b/protocols/FacebookRM/facebook_10.vcxproj.filters @@ -66,6 +66,9 @@ <ClCompile Include="src\stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\captcha.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\client.h">
@@ -147,5 +150,8 @@ <Image Include="res\read.ico">
<Filter>Resource Files\Icons</Filter>
</Image>
+ <Image Include="res\key.ico">
+ <Filter>Resource Files\Icons</Filter>
+ </Image>
</ItemGroup>
</Project>
\ No newline at end of file diff --git a/protocols/FacebookRM/facebook_12.vcxproj b/protocols/FacebookRM/facebook_12.vcxproj index fab3f3f641..efd175f947 100644 --- a/protocols/FacebookRM/facebook_12.vcxproj +++ b/protocols/FacebookRM/facebook_12.vcxproj @@ -178,6 +178,7 @@ </ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\avatars.cpp" />
+ <ClCompile Include="src\captcha.cpp" />
<ClCompile Include="src\chat.cpp" />
<ClCompile Include="src\communication.cpp" />
<ClCompile Include="src\connection.cpp" />
@@ -225,7 +226,8 @@ <Image Include="res\notification.ico" />
<Image Include="res\poke.ico" />
<Image Include="res\conversation.ico" />
- <Image Include="res\read.ico" />
+ <Image Include="res\read.ico" />
+ <Image Include="res\key.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
diff --git a/protocols/FacebookRM/facebook_12.vcxproj.filters b/protocols/FacebookRM/facebook_12.vcxproj.filters index 235840f852..b27274028e 100644 --- a/protocols/FacebookRM/facebook_12.vcxproj.filters +++ b/protocols/FacebookRM/facebook_12.vcxproj.filters @@ -66,6 +66,9 @@ <ClCompile Include="src\stdafx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\captcha.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\client.h">
@@ -144,7 +147,10 @@ <Image Include="res\conversation.ico">
<Filter>Resource Files\Icons</Filter>
</Image>
- <Image Include="res\read.ico">
+ <Image Include="res\read.ico">
+ <Filter>Resource Files\Icons</Filter>
+ </Image>
+ <Image Include="res\key.ico">
<Filter>Resource Files\Icons</Filter>
</Image>
</ItemGroup>
diff --git a/protocols/FacebookRM/res/facebook.rc b/protocols/FacebookRM/res/facebook.rc index 0d781f5bae..9d1fbd0ec9 100644 --- a/protocols/FacebookRM/res/facebook.rc +++ b/protocols/FacebookRM/res/facebook.rc @@ -176,6 +176,23 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,210,281,10
END
+IDD_CAPTCHAFORM DIALOGEX 0, 0, 258, 224
+STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+CAPTION "Bots challenge test"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ EDITTEXT IDC_VALUE,4,203,137,14,ES_AUTOHSCROLL
+ CONTROL "",IDC_WHITERECT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,0,0,258,25
+ LTEXT "Instruction:",IDC_TITLE,7,7,243,8,NOT WS_GROUP
+ EDITTEXT IDC_INSTRUCTION,17,16,233,8,ES_MULTILINE | ES_READONLY | NOT WS_BORDER
+ CONTROL "",IDC_FRAME1,"Static",SS_ETCHEDHORZ,0,26,258,1
+ CONTROL "",IDC_FRAME2,"Static",SS_ETCHEDHORZ,0,197,258,1
+ DEFPUSHBUTTON "Submit",IDOK,146,203,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,200,203,50,14
+END
+
+
/////////////////////////////////////////////////////////////////////////////
//
@@ -249,6 +266,14 @@ BEGIN TOPMARGIN, 7
BOTTOMMARGIN, 228
END
+
+ IDD_CAPTCHA, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 226
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 103
+ END
END
#endif // APSTUDIO_INVOKED
diff --git a/protocols/FacebookRM/res/key.ico b/protocols/FacebookRM/res/key.ico Binary files differnew file mode 100644 index 0000000000..44df000c12 --- /dev/null +++ b/protocols/FacebookRM/res/key.ico diff --git a/protocols/FacebookRM/src/captcha.cpp b/protocols/FacebookRM/src/captcha.cpp new file mode 100644 index 0000000000..3abec878f7 --- /dev/null +++ b/protocols/FacebookRM/src/captcha.cpp @@ -0,0 +1,144 @@ +/* + +Facebook plugin for Miranda Instant Messenger +_____________________________________________ + +Copyright © 2014 Robert Pösel + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "common.h" +#include "resource.h" + +///////////////////////////////////////////////////////////////////////////////////////// +// Captcha form + +struct CAPTCHA_FORM_PARAMS +{ + HBITMAP bmp; + int w,h; + char Result[100]; +}; + +static INT_PTR CALLBACK CaptchaFormDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + CAPTCHA_FORM_PARAMS *params = (CAPTCHA_FORM_PARAMS*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + switch (msg) { + case WM_INITDIALOG: { + TranslateDialogDefault(hwndDlg); + SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)Skin_GetIconByHandle( GetIconHandle("key"), TRUE)); + SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)Skin_GetIconByHandle( GetIconHandle("key"))); + params = (CAPTCHA_FORM_PARAMS*)lParam; + + SetDlgItemText(hwndDlg, IDC_INSTRUCTION, TranslateT("Enter the text you see")); + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)params); + + return TRUE; + } + case WM_CTLCOLORSTATIC: + switch(GetWindowLongPtr((HWND)lParam, GWL_ID)) { + case IDC_WHITERECT: + case IDC_INSTRUCTION: + case IDC_TITLE: + return (BOOL)GetStockObject(WHITE_BRUSH); + } + return NULL; + + case WM_PAINT: + if (params) { + PAINTSTRUCT ps; + HDC hdc, hdcMem; + RECT rc; + + GetClientRect(hwndDlg, &rc); + hdc = BeginPaint(hwndDlg, &ps); + hdcMem = CreateCompatibleDC(hdc); + HGDIOBJ hOld = SelectObject(hdcMem, params->bmp); + + int y = (rc.bottom + rc.top - params->h) / 2; + int x = (rc.right + rc.left - params->w) / 2; + BitBlt(hdc, x, y, params->w, params->h, hdcMem, 0,0, SRCCOPY); + SelectObject(hdcMem, hOld); + DeleteDC(hdcMem); + + EndPaint(hwndDlg, &ps); + } + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDCANCEL: + EndDialog(hwndDlg, 0); + return TRUE; + + case IDOK: + GetDlgItemTextA(hwndDlg, IDC_VALUE, params->Result, SIZEOF(params->Result)); + EndDialog(hwndDlg, 1); + return TRUE; + } + break; + + case WM_CLOSE: + EndDialog(hwndDlg, 0); + break; + + case WM_DESTROY: + Skin_ReleaseIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_BIG, 0)); + Skin_ReleaseIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, 0)); + break; + } + return FALSE; +} + +bool FacebookProto::RunCaptchaForm(std::string captchaUrl, std::string &result) +{ + debugLogA("RunCaptchaForm: reading picture from %s", captchaUrl.c_str()); + result = ""; + + NETLIBHTTPREQUEST req = { sizeof(req) }; + req.requestType = REQUEST_GET; + req.szUrl = (char*)captchaUrl.c_str(); + req.flags = NLHRF_NODUMPHEADERS; + + NETLIBHTTPREQUEST *reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)&req); + if (reply == NULL) + return false; + + if (reply->resultCode != HTTP_CODE_OK) { + debugLogA("RunCaptchaForm: failed with code %d", reply->resultCode); + return false; + } + + CAPTCHA_FORM_PARAMS param = { 0 }; + + IMGSRVC_MEMIO memio = { 0 }; + memio.iLen = reply->dataLength; + memio.pBuf = reply->pData; + memio.fif = FIF_UNKNOWN; /* detect */ + param.bmp = (HBITMAP)CallService(MS_IMG_LOADFROMMEM, (WPARAM)&memio, 0); + + BITMAP bmp = {0}; + GetObject(param.bmp, sizeof(bmp), &bmp); + param.w = bmp.bmWidth; + param.h = bmp.bmHeight; + int res = DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_CAPTCHAFORM), NULL, CaptchaFormDlgProc, (LPARAM)¶m); + if (res == 0) + return false; + + debugLogA("RunCaptchaForm: user entered text %s", param.Result); + result = param.Result; + return true; +} diff --git a/protocols/FacebookRM/src/client.h b/protocols/FacebookRM/src/client.h index c1b3a5fc49..1bab682836 100644 --- a/protocols/FacebookRM/src/client.h +++ b/protocols/FacebookRM/src/client.h @@ -161,7 +161,7 @@ public: std::map<std::string, int> messages_ignore;
bool channel();
- bool send_message(MCONTACT, std::string message_recipient, std::string message_text, std::string *error_text, MessageMethod method);
+ int send_message(MCONTACT, std::string message_recipient, std::string message_text, std::string *error_text, MessageMethod method, std::string captchaPersistData = "", std::string captcha = "");
////////////////////////////////////////////////////////////
// Status handling
diff --git a/protocols/FacebookRM/src/common.h b/protocols/FacebookRM/src/common.h index 0972c1e7a6..744336381a 100644 --- a/protocols/FacebookRM/src/common.h +++ b/protocols/FacebookRM/src/common.h @@ -60,6 +60,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <m_smileyadd.h>
#include <m_toptoolbar.h>
#include <m_json.h>
+#include <m_imgsrvc.h>
class FacebookProto;
diff --git a/protocols/FacebookRM/src/communication.cpp b/protocols/FacebookRM/src/communication.cpp index 307232cd8b..c9f8a50cf2 100644 --- a/protocols/FacebookRM/src/communication.cpp +++ b/protocols/FacebookRM/src/communication.cpp @@ -1141,19 +1141,26 @@ bool facebook_client::channel() } } -bool facebook_client::send_message(MCONTACT hContact, std::string message_recipient, std::string message_text, std::string *error_text, MessageMethod method) +int facebook_client::send_message(MCONTACT hContact, std::string message_recipient, std::string message_text, std::string *error_text, MessageMethod method, std::string captcha_persist_data, std::string captcha) { ScopedLock s(send_message_lock_); handle_entry("send_message"); http::response resp; + std::string data = ""; + + if (!captcha.empty()) { + data += "&captcha_persist_data=" + captcha_persist_data; + data += "&recaptcha_challenge_field="; + data += "&captcha_response=" + captcha; + } switch (method) { case MESSAGE_INBOX: { parent->debugLogA(" > Sending message through INBOX"); - std::string data = "action=send"; + data += "&action=send"; data += "&body=" + utils::url::encode(message_text); data += "&recipients[0]=" + message_recipient; data += "&__user=" + this->self_.user_id; @@ -1167,7 +1174,7 @@ bool facebook_client::send_message(MCONTACT hContact, std::string message_recipi case MESSAGE_MERCURY: { parent->debugLogA(" > Sending message through CHAT"); - std::string data = "message_batch[0][action_type]=ma-type:user-generated-message"; + data += "&message_batch[0][action_type]=ma-type:user-generated-message"; data += "&message_batch[0][thread_id]"; data += "&message_batch[0][author]=fbid:" + this->self_.user_id; data += "&message_batch[0][author_email]"; @@ -1201,7 +1208,7 @@ bool facebook_client::send_message(MCONTACT hContact, std::string message_recipi case MESSAGE_TID: { parent->debugLogA(" > Sending message through MERCURY (TID)"); - std::string data = "message_batch[0][action_type]=ma-type:user-generated-message"; + data += "&message_batch[0][action_type]=ma-type:user-generated-message"; data += "&message_batch[0][thread_id]=" + message_recipient; data += "&message_batch[0][author]=fbid:" + this->self_.user_id; data += "&message_batch[0][timestamp]=" + utils::time::mili_timestamp(); @@ -1225,7 +1232,7 @@ bool facebook_client::send_message(MCONTACT hContact, std::string message_recipi case MESSAGE_ASYNC: { parent->debugLogA(" > Sending message through ASYNC"); - std::string data = "action=send"; + data += "&action=send"; data += "&body=" + utils::url::encode(message_text); data += "&recipients[0]=" + message_recipient; data += "&lsd="; @@ -1250,31 +1257,49 @@ bool facebook_client::send_message(MCONTACT hContact, std::string message_recipi messages_ignore.insert(std::make_pair(mid, 0)); } break; - //case 1356002: // You are offline - wtf?? + //case 1356002: // You are offline (probably you can't use mercury or some other request when chat is offline) case 1356003: // Contact is offline { MCONTACT hContact = parent->ContactIDToHContact(message_recipient); if (hContact != NULL) parent->setWord(hContact, "Status", ID_STATUS_OFFLINE); - return false; - } break; + return SEND_MESSAGE_ERROR; + } case 1356026: // Contact has alternative client { client_notify(TranslateT("Need confirmation for sending messages to other clients.\nOpen Facebook website and try to send message to this contact again!")); - return false; - } break; + return SEND_MESSAGE_ERROR; + } + + case 1357007: // Security check (captcha) is required + { + std::string imageUrl = utils::text::html_entities_decode(utils::text::slashu_to_utf8(utils::text::source_get_value(&resp.data, 3, "img class=\\\"img\\\"", "src=\\\"", "\\\""))); + std::string captchaPersistData = utils::text::source_get_value(&resp.data, 3, "\\\"captcha_persist_data\\\"", "value=\\\"", "\\\""); + + parent->debugLogA("Got imageUrl: %s", imageUrl.c_str()); + parent->debugLogA("Got captchaPersistData: %s", captchaPersistData.c_str()); + + std::string result; + if (!parent->RunCaptchaForm(imageUrl, result)) { + *error_text = Translate("User cancel captcha challenge."); + return SEND_MESSAGE_CANCEL; + } + + return send_message(hContact, message_recipient, message_text, error_text, method, captchaPersistData, result); + } default: // Other error parent->debugLogA(" !!! Send message error #%d: %s", resp.error_number, resp.error_text); - return false; + return SEND_MESSAGE_ERROR; } switch (resp.code) { case HTTP_CODE_OK: - return handle_success("send_message"); + handle_success("send_message"); + return SEND_MESSAGE_OK; case HTTP_CODE_FAKE_ERROR: case HTTP_CODE_FAKE_DISCONNECTED: @@ -1282,7 +1307,7 @@ bool facebook_client::send_message(MCONTACT hContact, std::string message_recipi *error_text = Translate("Timeout when sending message."); handle_error("send_message"); - return false; + return SEND_MESSAGE_ERROR; } } diff --git a/protocols/FacebookRM/src/constants.h b/protocols/FacebookRM/src/constants.h index 64b90f789a..d9f9502662 100644 --- a/protocols/FacebookRM/src/constants.h +++ b/protocols/FacebookRM/src/constants.h @@ -95,6 +95,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define FACEBOOK_EVENT_NOTIFICATION 0x40000000 // Facebook new notification
#define FACEBOOK_EVENT_OTHER 0x80000000 // Facebook other event - friend requests/new messages
+// Send message return values
+#define SEND_MESSAGE_OK 0
+#define SEND_MESSAGE_ERROR 1
+#define SEND_MESSAGE_CANCEL -1
+
// Facebook request types // TODO: Provide MS_ and release in FB plugin API?
enum RequestType {
REQUEST_LOGIN, // connecting physically
diff --git a/protocols/FacebookRM/src/messages.cpp b/protocols/FacebookRM/src/messages.cpp index ec11ba3dec..c4f066ed0c 100644 --- a/protocols/FacebookRM/src/messages.cpp +++ b/protocols/FacebookRM/src/messages.cpp @@ -49,12 +49,12 @@ void FacebookProto::SendMsgWorker(void *p) } else { int retries = 5; std::string error_text = ""; - bool result = false; - while (!result && retries > 0) { + int result = SEND_MESSAGE_ERROR; + while (result == SEND_MESSAGE_ERROR && retries > 0) { result = facy.send_message(data->hContact, std::string(id), data->msg, &error_text, retries % 2 == 0 ? MESSAGE_INBOX : MESSAGE_MERCURY); retries--; } - if (result) { + if (result == SEND_MESSAGE_OK) { ProtoBroadcastAck(data->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, data->msgid, 0); // Remove from "readers" list and clear statusbar @@ -100,7 +100,7 @@ void FacebookProto::SendChatMsgWorker(void *p) } if (!tid.empty()) { - if (facy.send_message(hContact, tid, data->msg, &err_message, MESSAGE_TID)) + if (facy.send_message(hContact, tid, data->msg, &err_message, MESSAGE_TID) == SEND_MESSAGE_OK) UpdateChat(_A2T(data->chat_id.c_str()), facy.self_.user_id.c_str(), facy.self_.real_name.c_str(), data->msg.c_str()); else UpdateChat(_A2T(data->chat_id.c_str()), NULL, NULL, err_message.c_str()); diff --git a/protocols/FacebookRM/src/proto.h b/protocols/FacebookRM/src/proto.h index 56177acb86..1b87bc10de 100644 --- a/protocols/FacebookRM/src/proto.h +++ b/protocols/FacebookRM/src/proto.h @@ -233,6 +233,7 @@ public: void OpenUrl(std::string url); void __cdecl OpenUrlThread(void*); void MessageRead(MCONTACT hContact); + bool RunCaptchaForm(std::string imageUrl, std::string &result); // Handles, Locks HGENMENU m_hMenuRoot, m_hMenuServicesRoot, m_hStatusMind; diff --git a/protocols/FacebookRM/src/resource.h b/protocols/FacebookRM/src/resource.h index 5fb781e678..90fa4d1472 100644 --- a/protocols/FacebookRM/src/resource.h +++ b/protocols/FacebookRM/src/resource.h @@ -10,12 +10,14 @@ #define IDD_OPTIONS 113
#define IDD_OPTIONS_EVENTS 114
#define IDD_OPTIONS_ADVANCED 115
+#define IDD_CAPTCHAFORM 116
#define IDI_POKE 127
#define IDI_NOTIFICATION 128
#define IDI_NEWSFEED 129
#define IDI_FRIENDS 130
#define IDI_CONVERSATION 131
#define IDI_READ 132
+#define IDI_KEYS 133
#define IDC_UN 1001
#define IDC_PW 1002
#define IDC_NEWACCOUNTLINK 1003
@@ -54,14 +56,22 @@ #define IDC_CCLIST_LABEL 1208
#define IDC_MESSAGES_COUNT 1209
#define IDC_MESSAGES_COUNT_SPIN 1210
+#define IDC_VALUE 1211
+#define IDC_WHITERECT 1212
+#define IDC_TITLE 1213
+#define IDC_INSTRUCTION 1214
+#define IDC_FRAME1 1215
+#define IDC_FRAME2 1216
+#define IDC_SUBMIT 1217
+
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 133
+#define _APS_NEXT_RESOURCE_VALUE 134
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1211
+#define _APS_NEXT_CONTROL_VALUE 1218
#define _APS_NEXT_SYMED_VALUE 132
#endif
#endif
diff --git a/protocols/FacebookRM/src/theme.cpp b/protocols/FacebookRM/src/theme.cpp index 50ef5b342b..c92e1541bc 100644 --- a/protocols/FacebookRM/src/theme.cpp +++ b/protocols/FacebookRM/src/theme.cpp @@ -34,6 +34,7 @@ static IconItem icons[] = { LPGEN("Friendship details"), "friendship", IDI_FRIENDS },
{ LPGEN("Conversation"), "conversation", IDI_CONVERSATION },
{ LPGEN("Message read"), "read", IDI_READ },
+ { LPGEN("Captcha form icon"), "key", IDI_KEYS }
};
// TODO: uninit
diff --git a/protocols/FacebookRM/src/version.h b/protocols/FacebookRM/src/version.h index 9ea1484017..a4018228d9 100644 --- a/protocols/FacebookRM/src/version.h +++ b/protocols/FacebookRM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 2
-#define __RELEASE_NUM 8
-#define __BUILD_NUM 1
+#define __RELEASE_NUM 9
+#define __BUILD_NUM 0
#include <stdver.h>
|