Skip to content

Commit

Permalink
Public and hashtag timelines now exclude reblogs and replies
Browse files Browse the repository at this point in the history
Fix #289 - don't download avatar unless the URL is http/https
Fix #293 - reblog/reblogged is now boost/boosted
  • Loading branch information
Gargron committed Nov 26, 2016
1 parent 0541387 commit 8a4913f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 13 deletions.
6 changes: 3 additions & 3 deletions app/assets/javascripts/components/locales/en.jsx
Expand Up @@ -5,9 +5,9 @@ const en = {
"status.mention": "Mention",
"status.delete": "Delete",
"status.reply": "Reply",
"status.reblog": "Reblog",
"status.reblog": "Boost",
"status.favourite": "Favourite",
"status.reblogged_by": "{name} reblogged",
"status.reblogged_by": "{name} boosted",
"status.sensitive_warning": "Sensitive content",
"status.sensitive_toggle": "Click to view",
"video_player.toggle_sound": "Toggle sound",
Expand Down Expand Up @@ -49,7 +49,7 @@ const en = {
"upload_form.undo": "Undo",
"notification.follow": "{name} followed you",
"notification.favourite": "{name} favourited your status",
"notification.reblog": "{name} reblogged your status",
"notification.reblog": "{name} boosted your status",
"notification.mention": "{name} mentioned you"
};

Expand Down
6 changes: 5 additions & 1 deletion app/models/account.rb
Expand Up @@ -116,7 +116,11 @@ def ping!(atom_url, hubs)
end

def avatar_remote_url=(url)
self.avatar = URI.parse(url) unless self[:avatar_remote_url] == url
parsed_url = URI.parse(url)

return if !%w(http https).include?(parsed_url.scheme) || self[:avatar_remote_url] == url

self.avatar = parsed_url
self[:avatar_remote_url] = url
rescue OpenURI::HTTPError => e
Rails.logger.debug "Error fetching remote avatar: #{e}"
Expand Down
15 changes: 7 additions & 8 deletions app/models/status.rb
Expand Up @@ -97,7 +97,10 @@ def as_mentions_timeline(account)
end

def as_public_timeline(account = nil)
query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id').where('accounts.silenced = FALSE')
query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
.where('accounts.silenced = FALSE')
.where('statuses.in_reply_to_id IS NULL')
.where('statuses.reblog_of_id IS NULL')
query = filter_timeline(query, account) unless account.nil?
query
end
Expand All @@ -106,6 +109,8 @@ def as_tag_timeline(tag, account = nil)
query = tag.statuses
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
.where('accounts.silenced = FALSE')
.where('statuses.in_reply_to_id IS NULL')
.where('statuses.reblog_of_id IS NULL')
query = filter_timeline(query, account) unless account.nil?
query
end
Expand All @@ -123,13 +128,7 @@ def reblogs_map(status_ids, account_id)
def filter_timeline(query, account)
blocked = Block.where(account: account).pluck(:target_account_id)
return query if blocked.empty?

query
.joins('LEFT OUTER JOIN statuses AS parents ON statuses.in_reply_to_id = parents.id')
.joins('LEFT OUTER JOIN statuses AS reblogs ON statuses.reblog_of_id = reblogs.id')
.where('statuses.account_id NOT IN (?)', blocked)
.where('(parents.id IS NULL OR parents.account_id NOT IN (?))', blocked)
.where('(reblogs.id IS NULL OR reblogs.account_id NOT IN (?))', blocked)
query.where('statuses.account_id NOT IN (?)', blocked)
end
end

Expand Down
5 changes: 4 additions & 1 deletion app/services/fan_out_on_write_service.rb
Expand Up @@ -41,14 +41,17 @@ def deliver_to_mentioned(status)
end

def deliver_to_hashtags(status)
Rails.logger.debug "Delivering status #{status.id} to hashtags"
return if status.reblog? || status.reply?

Rails.logger.debug "Delivering status #{status.id} to hashtags"
status.tags.find_each do |tag|
FeedManager.instance.broadcast("hashtag:#{tag.name}", type: 'update', id: status.id)
end
end

def deliver_to_public(status)
return if status.reblog? || status.reply?

Rails.logger.debug "Delivering status #{status.id} to public timeline"
FeedManager.instance.broadcast(:public, type: 'update', id: status.id)
end
Expand Down

0 comments on commit 8a4913f

Please sign in to comment.