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/Fourchan.cpp | 14 ++++++++++++++ src/plugins/Matrix.cpp | 31 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'src/plugins') diff --git a/src/plugins/Fourchan.cpp b/src/plugins/Fourchan.cpp index 2938319..7f8008c 100644 --- a/src/plugins/Fourchan.cpp +++ b/src/plugins/Fourchan.cpp @@ -252,6 +252,13 @@ namespace QuickMedia { // "s" means small, that's the url 4chan uses for thumbnails. // thumbnails always has .jpg extension even if they are gifs or webm. body_item->thumbnail_url = fourchan_image_url + url + "/" + std::to_string(tim.asInt64()) + "s.jpg"; + + sf::Vector2i thumbnail_size(64, 64); + const Json::Value &tn_w = thread["tn_w"]; + const Json::Value &tn_h = thread["tn_h"]; + if(tn_w.isNumeric() && tn_h.isNumeric()) + thumbnail_size = sf::Vector2i(tn_w.asInt() * 0.5, tn_h.asInt() * 0.5); + body_item->thumbnail_size = std::move(thumbnail_size); } result_items.push_back(std::move(body_item)); @@ -438,6 +445,13 @@ namespace QuickMedia { body_item->thumbnail_url = fourchan_image_url + board_id + "/" + tim_str + "s.jpg"; body_item->attached_content_url = fourchan_image_url + board_id + "/" + tim_str + ext_str; cached_media_urls.push_back(body_item->attached_content_url); + + sf::Vector2i thumbnail_size(64, 64); + const Json::Value &tn_w = post["tn_w"]; + const Json::Value &tn_h = post["tn_h"]; + if(tn_w.isNumeric() && tn_h.isNumeric()) + thumbnail_size = sf::Vector2i(tn_w.asInt(), tn_h.asInt()); + body_item->thumbnail_size = std::move(thumbnail_size); } ++body_item_index; 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