diff --git a/src/InlineMediaDownloader.vala b/src/InlineMediaDownloader.vala index 62e11d89b..d7f350739 100644 --- a/src/InlineMediaDownloader.vala +++ b/src/InlineMediaDownloader.vala @@ -55,7 +55,17 @@ bool is_media_candidate (string _url) { ; } +bool is_twitter_media_candidate (string url) { + if (Settings.max_media_size () < 0.001) + return false; + return +#if VIDEO + url.has_suffix ("/photo/1") || + url.has_prefix ("https://video.twimg.com/ext_tw_video/") || +#endif + url.has_prefix ("http://pbs.twimg.com/media/"); +} public class InlineMediaDownloader : GLib.Object { private static InlineMediaDownloader instance; diff --git a/src/Tweet.vala b/src/Tweet.vala index 98ac0e427..18ce5d88f 100644 --- a/src/Tweet.vala +++ b/src/Tweet.vala @@ -113,14 +113,6 @@ void parse_entities (MiniTweet mt, Json.Object status) var url = node.get_object(); string expanded_url = url.get_string_member("expanded_url"); - if (is_media_candidate (expanded_url)) { - var m = new Media (); - m.url = expanded_url; - m.type = Media.type_from_url (expanded_url); - mt.medias[real_media_count] = m; - real_media_count ++; - } - Json.Array indices = url.get_array_member ("indices"); expanded_url = expanded_url.replace("&", "&"); mt.entities[url_index] = TextEntity () { @@ -288,6 +280,24 @@ void parse_entities (MiniTweet mt, Json.Object status) }); } + if (real_media_count == 0) { + // Only load other media if there is no Twitter media + // This prevents sites like IFTT linking to media we'll load + // AND uploading it to Twitter, causing us to load identical pics + urls.foreach_element((arr, index, node) => { + var url = node.get_object(); + string expanded_url = url.get_string_member("expanded_url"); + + if (is_media_candidate (expanded_url)) { + var m = new Media (); + m.url = expanded_url; + m.type = Media.type_from_url (expanded_url); + mt.medias[real_media_count] = m; + real_media_count ++; + } + }); + } + mt.medias.resize (real_media_count); InlineMediaDownloader.get ().load_all_media (mt, mt.medias); diff --git a/src/util/TextTransform.vala b/src/util/TextTransform.vala index d6a7421a5..a17886abb 100644 --- a/src/util/TextTransform.vala +++ b/src/util/TextTransform.vala @@ -38,11 +38,11 @@ public enum TransformFlags { namespace TextTransform { private static const uint TRAILING = 1 << 0; - private bool is_media_url (string? url, + private bool is_removable_media_url (string? url, string display_text, uint media_count) { - return (is_media_candidate (url ?? display_text) && + return (is_twitter_media_candidate (url ?? display_text) && media_count == 1) || display_text.has_prefix ("pic.twitter.com/"); } @@ -136,10 +136,10 @@ namespace TextTransform { last_entity_was_trailing = false; /* Skip the entire entity if we should remove media links AND - it is a media link. */ + it is a Twitter uploaded media link. */ if ((TransformFlags.REMOVE_MEDIA_LINKS in flags && - is_media_url (entity.target, entity.display_text, media_count)) || + is_removable_media_url (entity.target, entity.display_text, media_count)) || (quote_id != 0 && is_quote_link (entity, quote_id))) { last_end = entity.to; continue;