From b233f24fe103a745eb6487e236b7cb08269a6cb3 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 19 Oct 2020 11:02:26 +0200 Subject: Change thumbnail creation from nearest neighbor to linear interpolation, set body thumbnail size for 4chan and matrix (if available) --- src/plugins/Matrix.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/plugins/Matrix.cpp') 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; } -- cgit v1.2.3