aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Matrix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Matrix.cpp')
-rw-r--r--src/plugins/Matrix.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index f7364d1..bfdd496 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -364,6 +364,34 @@ namespace QuickMedia {
return "";
}
+ static bool message_content_extract_thumbnail_size(const rapidjson::Value &content_json, sf::Vector2i &thumbnail_size) {
+ const rapidjson::Value &info_json = GetMember(content_json, "info");
+ if(!info_json.IsObject())
+ return false;
+
+ bool found_resolution = false;
+ const rapidjson::Value &w_json = GetMember(info_json, "w");
+ const rapidjson::Value &h_json = GetMember(info_json, "h");
+ if(w_json.IsNumber() && h_json.IsNumber()) {
+ thumbnail_size.x = w_json.GetInt();
+ thumbnail_size.y = h_json.GetInt();
+ found_resolution = true;
+ }
+
+ const rapidjson::Value &thumbnail_info_json = GetMember(info_json, "thumbnail_info");
+ if(thumbnail_info_json.IsObject()) {
+ const rapidjson::Value &w_json = GetMember(thumbnail_info_json, "w");
+ const rapidjson::Value &h_json = GetMember(thumbnail_info_json, "h");
+ if(w_json.IsNumber() && h_json.IsNumber()) {
+ thumbnail_size.x = w_json.GetInt();
+ thumbnail_size.y = h_json.GetInt();
+ found_resolution = true;
+ }
+ }
+
+ return found_resolution;
+ }
+
// TODO: Is this really the proper way to check for username mentions?
static bool is_username_seperating_character(char c) {
switch(c) {
@@ -551,6 +579,7 @@ namespace QuickMedia {
message->url = homeserver + "/_matrix/media/r0/download/" + (url_json.GetString() + 6);
message->thumbnail_url = message_content_extract_thumbnail_url(*content_json, homeserver);
+ message_content_extract_thumbnail_size(*content_json, message->thumbnail_size);
message->type = MessageType::IMAGE;
} else if(strcmp(content_type.GetString(), "m.video") == 0) {
const rapidjson::Value &url_json = GetMember(*content_json, "url");
@@ -559,6 +588,7 @@ namespace QuickMedia {
message->url = homeserver + "/_matrix/media/r0/download/" + (url_json.GetString() + 6);
message->thumbnail_url = message_content_extract_thumbnail_url(*content_json, homeserver);
+ message_content_extract_thumbnail_size(*content_json, message->thumbnail_size);
message->type = MessageType::VIDEO;
} else if(strcmp(content_type.GetString(), "m.audio") == 0) {
const rapidjson::Value &url_json = GetMember(*content_json, "url");
@@ -587,6 +617,7 @@ namespace QuickMedia {
message->type = MessageType::TEXT;
message->thumbnail_url = message_content_extract_thumbnail_url(*content_json, homeserver);
+ message_content_extract_thumbnail_size(*content_json, message->thumbnail_size);
} else {
return nullptr;
}