aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Fourchan.cpp14
-rw-r--r--src/plugins/Matrix.cpp31
2 files changed, 45 insertions, 0 deletions
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;
}