aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Matrix.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-10-10 10:43:50 +0200
committerdec05eba <dec05eba@protonmail.com>2020-10-10 10:55:36 +0200
commitda89ec98fb34757f0c46dc8cb2dd87ae78d317ce (patch)
tree653bd81b2125968c706f5552aaeb7d1b7fdc6d04 /src/plugins/Matrix.cpp
parent85a1edf8d9c21b830f7ec4a2d42b8e5c1d044845 (diff)
Refactor: move download->json parsing to a one function
Diffstat (limited to 'src/plugins/Matrix.cpp')
-rw-r--r--src/plugins/Matrix.cpp195
1 files changed, 22 insertions, 173 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index fb7c00d..2107812 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -109,28 +109,15 @@ namespace QuickMedia {
{ "-m", "35" }
};
- std::string server_response;
-
char url[512];
if(next_batch.empty())
snprintf(url, sizeof(url), "%s/_matrix/client/r0/sync?timeout=0", homeserver.c_str());
else
snprintf(url, sizeof(url), "%s/_matrix/client/r0/sync?timeout=30000&since=%s", homeserver.c_str(), next_batch.c_str());
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
-
- if(server_response.empty())
- return PluginResult::ERR;
-
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix sync response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
PluginResult result = sync_response_to_body_items(json_root, room_messages);
if(result != PluginResult::OK)
@@ -152,21 +139,9 @@ namespace QuickMedia {
{ "-H", "Authorization: Bearer " + access_token }
};
- std::string server_response;
- if(download_to_string(homeserver + "/_matrix/client/r0/joined_rooms", server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
-
- if(server_response.empty())
- return PluginResult::ERR;
-
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix joined rooms response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, homeserver + "/_matrix/client/r0/joined_rooms", std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;
@@ -819,23 +794,10 @@ namespace QuickMedia {
char url[512];
snprintf(url, sizeof(url), "%s/_matrix/client/r0/rooms/%s/messages?from=%s&limit=20&dir=b&filter=%s", homeserver.c_str(), room_data->id.c_str(), from.c_str(), filter.c_str());
- fprintf(stderr, "load initial room data, url: |%s|\n", url);
-
- std::string server_response;
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
- if(server_response.empty())
- return PluginResult::ERR;
-
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix /rooms/<room_id>/messages/ response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;
@@ -978,23 +940,10 @@ namespace QuickMedia {
char request_url[512];
snprintf(request_url, sizeof(request_url), "%s/_matrix/client/r0/rooms/%s/send/m.room.message/m%ld.%.*s", homeserver.c_str(), room_id.c_str(), time(NULL), (int)random_readable_chars.size(), random_readable_chars.c_str());
- fprintf(stderr, "Post message to |%s|\n", request_url);
-
- std::string server_response;
- if(download_to_string(request_url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
-
- if(server_response.empty())
- return PluginResult::ERR;
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix post message response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, request_url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;
@@ -1125,23 +1074,10 @@ namespace QuickMedia {
char request_url[512];
snprintf(request_url, sizeof(request_url), "%s/_matrix/client/r0/rooms/%s/send/m.room.message/m%ld.%.*s", homeserver.c_str(), room_id.c_str(), time(NULL), (int)random_readable_chars.size(), random_readable_chars.c_str());
- fprintf(stderr, "Post message to |%s|\n", request_url);
-
- std::string server_response;
- if(download_to_string(request_url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
-
- if(server_response.empty())
- return PluginResult::ERR;
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix post message response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, request_url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;
@@ -1230,23 +1166,10 @@ namespace QuickMedia {
char request_url[512];
snprintf(request_url, sizeof(request_url), "%s/_matrix/client/r0/rooms/%s/send/m.room.message/m%ld.%.*s", homeserver.c_str(), room_id.c_str(), time(NULL), (int)random_readable_chars.size(), random_readable_chars.c_str());
- fprintf(stderr, "Post message to |%s|\n", request_url);
-
- std::string server_response;
- if(download_to_string(request_url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return PluginResult::NET_ERR;
-
- if(server_response.empty())
- return PluginResult::ERR;
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix post message response parse error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, request_url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;
@@ -1282,23 +1205,10 @@ namespace QuickMedia {
char url[512];
snprintf(url, sizeof(url), "%s/_matrix/client/r0/rooms/%s/context/%s?limit=0&filter=%s", homeserver.c_str(), room_data->id.c_str(), message->event_id.c_str(), filter.c_str());
- fprintf(stderr, "get message context, url: |%s|\n", url);
- std::string server_response;
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK)
- return nullptr;
-
- if(server_response.empty())
- return nullptr;
-
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix /rooms/<room_id>/context/<event_id> response parse error: %s\n", json_errors.c_str());
- return nullptr;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return nullptr;
if(!json_root.isObject())
return nullptr;
@@ -1447,27 +1357,10 @@ namespace QuickMedia {
char url[512];
snprintf(url, sizeof(url), "%s/_matrix/media/r0/upload?filename=%s", homeserver.c_str(), filename_escaped.c_str());
- fprintf(stderr, "Upload url: |%s|\n", url);
-
- std::string server_response;
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true, false) != DownloadResult::OK) {
- err_msg = "Upload request failed, reason: " + server_response;
- return PluginResult::NET_ERR;
- }
-
- if(server_response.empty()) {
- err_msg = "Got corrupt response from server";
- return PluginResult::ERR;
- }
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- err_msg = "Matrix upload response parse error: " + json_errors;
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true, &err_msg);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject()) {
err_msg = "Got corrupt response from server";
@@ -1512,23 +1405,9 @@ namespace QuickMedia {
{ "--data-binary", Json::writeString(builder, std::move(request_data)) }
};
- std::string server_response;
- if(download_to_string(homeserver + "/_matrix/client/r0/login", server_response, std::move(additional_args), use_tor, true, false) != DownloadResult::OK) {
- err_msg = std::move(server_response);
- return PluginResult::NET_ERR;
- }
-
- if(server_response.empty())
- return PluginResult::ERR;
-
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- err_msg = "Matrix login response parse error: " + json_errors;
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, homeserver + "/_matrix/client/r0/login", std::move(additional_args), true, &err_msg);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject()) {
err_msg = "Failed to parse matrix login response";
@@ -1626,25 +1505,10 @@ namespace QuickMedia {
char url[512];
snprintf(url, sizeof(url), "%s/_matrix/client/r0/rooms/%s/redact/%s/m%ld.%.*s", homeserver.c_str(), room_id.c_str(), message_typed->event_id.c_str(), time(NULL), (int)random_readable_chars.size(), random_readable_chars.c_str());
- fprintf(stderr, "load initial room data, url: |%s|\n", url);
-
- std::string server_response;
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true, false) != DownloadResult::OK) {
- err_msg = std::move(server_response);
- return PluginResult::NET_ERR;
- }
-
- if(server_response.empty())
- return PluginResult::ERR;
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- err_msg = "Matrix delete message response parse error: " + json_errors;
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true, &err_msg);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject()) {
err_msg = "Failed to parse matrix login response";
@@ -1819,25 +1683,10 @@ namespace QuickMedia {
char url[512];
snprintf(url, sizeof(url), "%s/_matrix/media/r0/config", homeserver.c_str());
- fprintf(stderr, "load initial room data, url: |%s|\n", url);
-
- std::string server_response;
- if(download_to_string(url, server_response, std::move(additional_args), use_tor, true) != DownloadResult::OK) {
- fprintf(stderr, "Matrix /config failed\n");
- return PluginResult::NET_ERR;
- }
-
- if(server_response.empty())
- return PluginResult::ERR;
Json::Value json_root;
- Json::CharReaderBuilder json_builder;
- std::unique_ptr<Json::CharReader> json_reader(json_builder.newCharReader());
- std::string json_errors;
- if(!json_reader->parse(&server_response[0], &server_response[server_response.size()], &json_root, &json_errors)) {
- fprintf(stderr, "Matrix parsing /config response failed, error: %s\n", json_errors.c_str());
- return PluginResult::ERR;
- }
+ DownloadResult download_result = download_json(json_root, url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
if(!json_root.isObject())
return PluginResult::ERR;