forked from cybrespace/mastodon
Discard misattributed remote statuses, improve timelines filter
This commit is contained in:
parent
17903c6dae
commit
aabf884c5f
|
@ -121,6 +121,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?
|
||||||
|
|
||||||
query
|
query
|
||||||
.joins('LEFT OUTER JOIN statuses AS parents ON statuses.in_reply_to_id = parents.id')
|
.joins('LEFT OUTER JOIN statuses AS parents ON statuses.in_reply_to_id = parents.id')
|
||||||
|
|
|
@ -48,6 +48,8 @@ class ProcessFeedService < BaseService
|
||||||
if original_status.nil?
|
if original_status.nil?
|
||||||
status.destroy
|
status.destroy
|
||||||
return nil
|
return nil
|
||||||
|
elsif original_status.reblog?
|
||||||
|
status.reblog = original_status.reblog
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -73,11 +75,18 @@ class ProcessFeedService < BaseService
|
||||||
status = find_status(id(entry))
|
status = find_status(id(entry))
|
||||||
return status unless status.nil?
|
return status unless status.nil?
|
||||||
|
|
||||||
|
# If status embeds an author, find that author
|
||||||
|
# If that author cannot be found, don't record the status (do not misattribute)
|
||||||
|
if account?(entry)
|
||||||
begin
|
begin
|
||||||
account = account?(entry) ? find_or_resolve_account(acct(entry)) : @account
|
account = find_or_resolve_account(acct(entry))
|
||||||
|
return nil if account.nil?
|
||||||
rescue Goldfinger::Error
|
rescue Goldfinger::Error
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
account = @account
|
||||||
|
end
|
||||||
|
|
||||||
status = Status.create!({
|
status = Status.create!({
|
||||||
uri: id(entry),
|
uri: id(entry),
|
||||||
|
|
|
@ -15,6 +15,7 @@ Sidekiq::Testing.inline!
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
|
||||||
config.use_transactional_fixtures = true
|
config.use_transactional_fixtures = true
|
||||||
|
config.order = 'random'
|
||||||
config.infer_spec_type_from_file_location!
|
config.infer_spec_type_from_file_location!
|
||||||
config.filter_rails_from_backtrace!
|
config.filter_rails_from_backtrace!
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue