commit: aabf884c5f6bf5c0a7cdec2c3e4fe174eeecfaec
parent: 17903c6dae9eb38ac221fb7cf86e5e3cafe465d0
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 10 Nov 2016 00:15:49 +0100
Discard misattributed remote statuses, improve timelines filter
Diffstat:
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/app/models/status.rb b/app/models/status.rb
@@ -121,6 +121,7 @@ class Status < ApplicationRecord
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')
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
@@ -48,6 +48,8 @@ class ProcessFeedService < BaseService
if original_status.nil?
status.destroy
return nil
+ elsif original_status.reblog?
+ status.reblog = original_status.reblog
end
end
@@ -73,10 +75,17 @@ class ProcessFeedService < BaseService
status = find_status(id(entry))
return status unless status.nil?
- begin
- account = account?(entry) ? find_or_resolve_account(acct(entry)) : @account
- rescue Goldfinger::Error
- return 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
+ account = find_or_resolve_account(acct(entry))
+ return nil if account.nil?
+ rescue Goldfinger::Error
+ return nil
+ end
+ else
+ account = @account
end
status = Status.create!({
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
@@ -15,6 +15,7 @@ Sidekiq::Testing.inline!
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
+ config.order = 'random'
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!