Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/InlineMediaDownloader.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
26 changes: 18 additions & 8 deletions src/Tweet.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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("&", "&amp;");
mt.entities[url_index] = TextEntity () {
Expand Down Expand Up @@ -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);

Expand Down
8 changes: 4 additions & 4 deletions src/util/TextTransform.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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/");
}

Expand Down Expand Up @@ -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;
Expand Down