summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/FacebookRM/src')
-rw-r--r--protocols/FacebookRM/src/communication.cpp38
-rw-r--r--protocols/FacebookRM/src/entities.h11
-rw-r--r--protocols/FacebookRM/src/json.cpp6
3 files changed, 32 insertions, 23 deletions
diff --git a/protocols/FacebookRM/src/communication.cpp b/protocols/FacebookRM/src/communication.cpp
index 5ebc58549c..2e59510c22 100644
--- a/protocols/FacebookRM/src/communication.cpp
+++ b/protocols/FacebookRM/src/communication.cpp
@@ -116,9 +116,6 @@ http::response facebook_client::sendRequest(HttpRequest *request)
// Better to have something set explicitely as this value is compaired in all communication requests
}
- // Delete the request object
- delete request;
-
// Get Facebook's error message
if (resp.code == HTTP_CODE_OK) {
std::string::size_type pos = resp.data.find("\"error\":");
@@ -165,6 +162,9 @@ http::response facebook_client::sendRequest(HttpRequest *request)
}
}
+ // Delete the request object
+ delete request;
+
return resp;
}
@@ -490,10 +490,10 @@ bool facebook_client::login(const char *username, const char *password)
while (resp.data.find("id=\"approvals_code\"") != std::string::npos) {
parent->debugLogA(" Login info: Approval code required.");
- const char *fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\"")).c_str();
- const char *nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"").c_str();
+ std::string fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\""));
+ std::string nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"");
- CFacebookGuardDialog guardDialog(parent, fb_dtsg);
+ CFacebookGuardDialog guardDialog(parent, fb_dtsg.c_str());
if (guardDialog.DoModal() != DIALOG_RESULT_OK) {
parent->SetStatus(ID_STATUS_OFFLINE);
return false;
@@ -502,7 +502,7 @@ bool facebook_client::login(const char *username, const char *password)
// We need verification code from user (he can get it via Facebook application on phone or by requesting code via SMS)
const char *givenCode = guardDialog.GetCode();
- request = new SetupMachineRequest(fb_dtsg, nh, "Continue");
+ request = new SetupMachineRequest(fb_dtsg.c_str(), nh.c_str(), "Continue");
request->Body << CHAR_VALUE("approvals_code", givenCode);
resp = sendRequest(request);
@@ -527,10 +527,10 @@ bool facebook_client::login(const char *username, const char *password)
// 1) Continue (it might have been sent with approval code above already)
if (resp.data.find("name=\"submit[Continue]\"") != std::string::npos) {
- const char *fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\"")).c_str();
- const char *nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"").c_str();
+ std::string fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\""));
+ std::string nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"");
- request = new SetupMachineRequest(fb_dtsg, nh, "Continue");
+ request = new SetupMachineRequest(fb_dtsg.c_str(), nh.c_str(), "Continue");
resp = sendRequest(request);
}
@@ -560,27 +560,27 @@ bool facebook_client::login(const char *username, const char *password)
return handle_error("login", FORCE_QUIT);
}
- const char *fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\"")).c_str();
- const char *nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"").c_str();
+ std::string fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\""));
+ std::string nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"");
- request = new SetupMachineRequest(fb_dtsg, nh, "This was me"); // Recognize device (or "This wasn't me" - this will force to change account password)
+ request = new SetupMachineRequest(fb_dtsg.c_str(), nh.c_str(), "This was me"); // Recognize device (or "This wasn't me" - this will force to change account password)
resp = sendRequest(request);
// 3) Save last device
- fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\"")).c_str();
- nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"").c_str();
+ fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\""));
+ nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"");
- request = new SetupMachineRequest(fb_dtsg, nh, "Continue");
+ request = new SetupMachineRequest(fb_dtsg.c_str(), nh.c_str(), "Continue");
request->Body << "&name_action_selected=save_device"; // Save device - or "dont_save"
resp = sendRequest(request);
}
// Save this actual device
if (resp.data.find("name=\"submit[Continue]\"") != std::string::npos) {
- const char *fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\"")).c_str();
- const char *nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"").c_str();
+ std::string fb_dtsg = utils::url::encode(utils::text::source_get_value(&resp.data, 3, "name=\"fb_dtsg\"", "value=\"", "\""));
+ std::string nh = utils::text::source_get_value(&resp.data, 3, "name=\"nh\"", "value=\"", "\"");
- request = new SetupMachineRequest(fb_dtsg, nh, "Continue");
+ request = new SetupMachineRequest(fb_dtsg.c_str(), nh.c_str(), "Continue");
request->Body << "&name_action_selected=save_device"; // Save device - or "dont_save"
resp = sendRequest(request);
}
diff --git a/protocols/FacebookRM/src/entities.h b/protocols/FacebookRM/src/entities.h
index 2b98b5a393..5274d9d2b2 100644
--- a/protocols/FacebookRM/src/entities.h
+++ b/protocols/FacebookRM/src/entities.h
@@ -94,7 +94,12 @@ struct facebook_chatroom
bool is_subscribed;
bool read_only;
- facebook_chatroom(std::string thread_id) : thread_id(thread_id) {}
+ facebook_chatroom(std::string thread_id) : thread_id(thread_id) {
+ this->can_reply = true;
+ this->is_archived = false;
+ this->is_subscribed = true;
+ this->read_only = false;
+ }
};
struct facebook_message
@@ -115,7 +120,8 @@ struct facebook_message
facebook_message()
{
this->time = 0;
- this->isUnread = this->isIncoming = true;
+ this->isUnread = true;
+ this->isIncoming = true;
this->isChat = false;
this->type = MESSAGE;
this->flag_ = 0;
@@ -138,6 +144,7 @@ struct facebook_notification
this->time = 0;
this->seen = false;
this->hWndPopup = NULL;
+ this->icon = NULL;
}
void setIcon(const std::string &iconUrl)
diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp
index 19597bf2bd..bf1ed05a38 100644
--- a/protocols/FacebookRM/src/json.cpp
+++ b/protocols/FacebookRM/src/json.cpp
@@ -714,8 +714,10 @@ int facebook_json_parser::parse_messages(std::string *pData, std::vector<faceboo
auto participant = participants.find(from_id);
if (participant == participants.end()) {
// TODO: load name of this participant
- participant->second.user_id = from_id;
- proto->AddChatContact(tid.c_str(), participant->second, true);
+ chatroom_participant new_participant;
+ new_participant.user_id = from_id;
+ new_participant.nick = from_id;
+ proto->AddChatContact(tid.c_str(), new_participant, true);
}
participant = participants.find(from_id);