From da89ec98fb34757f0c46dc8cb2dd87ae78d317ce Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 10 Oct 2020 10:43:50 +0200 Subject: Refactor: move download->json parsing to a one function --- src/plugins/Matrix.cpp | 195 ++++++------------------------------------------- 1 file changed, 22 insertions(+), 173 deletions(-) (limited to 'src/plugins/Matrix.cpp') 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_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_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_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//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_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_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_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_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//context/ 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_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_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_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_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; -- cgit v1.2.3