Public and hashtag timelines now exclude reblogs and replies
Fix #289 - don't download avatar unless the URL is http/https Fix #293 - reblog/reblogged is now boost/boostedgh/stable
parent
054138797f
commit
8a4913fde0
|
@ -5,9 +5,9 @@ const en = {
|
||||||
"status.mention": "Mention",
|
"status.mention": "Mention",
|
||||||
"status.delete": "Delete",
|
"status.delete": "Delete",
|
||||||
"status.reply": "Reply",
|
"status.reply": "Reply",
|
||||||
"status.reblog": "Reblog",
|
"status.reblog": "Boost",
|
||||||
"status.favourite": "Favourite",
|
"status.favourite": "Favourite",
|
||||||
"status.reblogged_by": "{name} reblogged",
|
"status.reblogged_by": "{name} boosted",
|
||||||
"status.sensitive_warning": "Sensitive content",
|
"status.sensitive_warning": "Sensitive content",
|
||||||
"status.sensitive_toggle": "Click to view",
|
"status.sensitive_toggle": "Click to view",
|
||||||
"video_player.toggle_sound": "Toggle sound",
|
"video_player.toggle_sound": "Toggle sound",
|
||||||
|
@ -49,7 +49,7 @@ const en = {
|
||||||
"upload_form.undo": "Undo",
|
"upload_form.undo": "Undo",
|
||||||
"notification.follow": "{name} followed you",
|
"notification.follow": "{name} followed you",
|
||||||
"notification.favourite": "{name} favourited your status",
|
"notification.favourite": "{name} favourited your status",
|
||||||
"notification.reblog": "{name} reblogged your status",
|
"notification.reblog": "{name} boosted your status",
|
||||||
"notification.mention": "{name} mentioned you"
|
"notification.mention": "{name} mentioned you"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,11 @@ class Account < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def avatar_remote_url=(url)
|
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
|
self[:avatar_remote_url] = url
|
||||||
rescue OpenURI::HTTPError => e
|
rescue OpenURI::HTTPError => e
|
||||||
Rails.logger.debug "Error fetching remote avatar: #{e}"
|
Rails.logger.debug "Error fetching remote avatar: #{e}"
|
||||||
|
|
|
@ -97,7 +97,10 @@ class Status < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def as_public_timeline(account = nil)
|
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 = filter_timeline(query, account) unless account.nil?
|
||||||
query
|
query
|
||||||
end
|
end
|
||||||
|
@ -106,6 +109,8 @@ class Status < ApplicationRecord
|
||||||
query = tag.statuses
|
query = tag.statuses
|
||||||
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
|
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id')
|
||||||
.where('accounts.silenced = FALSE')
|
.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 = filter_timeline(query, account) unless account.nil?
|
||||||
query
|
query
|
||||||
end
|
end
|
||||||
|
@ -123,13 +128,7 @@ class Status < ApplicationRecord
|
||||||
def filter_timeline(query, account)
|
def filter_timeline(query, account)
|
||||||
blocked = Block.where(account: account).pluck(:target_account_id)
|
blocked = Block.where(account: account).pluck(:target_account_id)
|
||||||
return query if blocked.empty?
|
return query if blocked.empty?
|
||||||
|
query.where('statuses.account_id NOT IN (?)', blocked)
|
||||||
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)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,17 @@ class FanOutOnWriteService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def deliver_to_hashtags(status)
|
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|
|
status.tags.find_each do |tag|
|
||||||
FeedManager.instance.broadcast("hashtag:#{tag.name}", type: 'update', id: status.id)
|
FeedManager.instance.broadcast("hashtag:#{tag.name}", type: 'update', id: status.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def deliver_to_public(status)
|
def deliver_to_public(status)
|
||||||
|
return if status.reblog? || status.reply?
|
||||||
|
|
||||||
Rails.logger.debug "Delivering status #{status.id} to public timeline"
|
Rails.logger.debug "Delivering status #{status.id} to public timeline"
|
||||||
FeedManager.instance.broadcast(:public, type: 'update', id: status.id)
|
FeedManager.instance.broadcast(:public, type: 'update', id: status.id)
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue