diff --git a/Gemfile.lock b/Gemfile.lock
index 90ab6f2273..6fa4894dbe 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -679,7 +679,7 @@ GEM
sshkit (1.21.4)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
- stackprof (0.2.23)
+ stackprof (0.2.24)
statsd-ruby (1.5.0)
stoplight (3.0.1)
redlock (~> 1.0)
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index 1898516b00..48ab1349dd 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -292,6 +292,21 @@ module AccountInteractions
end
end
+ def relations_map(account_ids, domains = nil, **options)
+ relations = {
+ blocked_by: Account.blocked_by_map(account_ids, id),
+ following: Account.following_map(account_ids, id),
+ }
+
+ return relations if options[:skip_blocking_and_muting]
+
+ relations.merge!({
+ blocking: Account.blocking_map(account_ids, id),
+ muting: Account.muting_map(account_ids, id),
+ domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, id),
+ })
+ end
+
private
def remove_potential_friendship(other_account)
diff --git a/app/models/concerns/status_threading_concern.rb b/app/models/concerns/status_threading_concern.rb
index 15118c10f7..1665c2ba5f 100644
--- a/app/models/concerns/status_threading_concern.rb
+++ b/app/models/concerns/status_threading_concern.rb
@@ -79,7 +79,7 @@ module StatusThreadingConcern
statuses = Status.with_accounts(ids).to_a
account_ids = statuses.map(&:account_id).uniq
domains = statuses.filter_map(&:account_domain).uniq
- relations = relations_map_for_account(account, account_ids, domains)
+ relations = account&.relations_map(account_ids, domains) || {}
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
@@ -108,16 +108,4 @@ module StatusThreadingConcern
arr
end
-
- def relations_map_for_account(account, account_ids, domains)
- return {} if account.nil?
-
- {
- blocking: Account.blocking_map(account_ids, account.id),
- blocked_by: Account.blocked_by_map(account_ids, account.id),
- muting: Account.muting_map(account_ids, account.id),
- following: Account.following_map(account_ids, account.id),
- domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
- }
- end
end
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index 50e2a51566..25df4d85aa 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -22,10 +22,6 @@ class InstancePresenter < ActiveModelSerializers::Model
ContactPresenter.new
end
- def closed_registrations_message
- Setting.closed_registrations_message
- end
-
def description
Setting.site_short_description
end
@@ -34,10 +30,6 @@ class InstancePresenter < ActiveModelSerializers::Model
Setting.site_extended_description
end
- def privacy_policy
- Setting.site_terms
- end
-
def status_page_url
Setting.status_page_url
end
diff --git a/app/services/import_service.rb b/app/services/import_service.rb
index 940c236d4c..56f191c1fe 100644
--- a/app/services/import_service.rb
+++ b/app/services/import_service.rb
@@ -120,7 +120,7 @@ class ImportService < BaseService
end
account_ids = statuses.map(&:account_id)
- preloaded_relations = relations_map_for_account(@account, account_ids)
+ preloaded_relations = @account.relations_map(account_ids, skip_blocking_and_muting: true)
statuses.keep_if { |status| StatusPolicy.new(@account, status, preloaded_relations).show? }
@@ -138,14 +138,4 @@ class ImportService < BaseService
def import_data
Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8)
end
-
- def relations_map_for_account(account, account_ids)
- {
- blocking: {},
- blocked_by: Account.blocked_by_map(account_ids, account.id),
- muting: {},
- following: Account.following_map(account_ids, account.id),
- domain_blocking_by_domain: {},
- }
- end
end
diff --git a/app/services/search_service.rb b/app/services/search_service.rb
index 93b72fa0c4..b1ce5453fb 100644
--- a/app/services/search_service.rb
+++ b/app/services/search_service.rb
@@ -49,7 +49,7 @@ class SearchService < BaseService
results = definition.limit(@limit).offset(@offset).objects.compact
account_ids = results.map(&:account_id)
account_domains = results.map(&:account_domain)
- preloaded_relations = relations_map_for_account(@account, account_ids, account_domains)
+ preloaded_relations = @account.relations_map(account_ids, account_domains)
results.reject { |status| StatusFilter.new(status, @account, preloaded_relations).filtered? }
rescue Faraday::ConnectionFailed, Parslet::ParseFailed
@@ -111,16 +111,6 @@ class SearchService < BaseService
@options[:type].blank? || @options[:type] == 'statuses'
end
- def relations_map_for_account(account, account_ids, domains)
- {
- blocking: Account.blocking_map(account_ids, account.id),
- blocked_by: Account.blocked_by_map(account_ids, account.id),
- muting: Account.muting_map(account_ids, account.id),
- following: Account.following_map(account_ids, account.id),
- domain_blocking_by_domain: Account.domain_blocking_map_by_domain(domains, account.id),
- }
- end
-
def parsed_query
SearchQueryTransformer.new.apply(SearchQueryParser.new.parse(@query))
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 0d8303b6aa..d71ac227db 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1714,7 +1714,7 @@ en:
seamless_external_login: You are logged in via an external service, so password and e-mail settings are not available.
signed_in_as: 'Signed in as:'
verification:
- explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. The link back must have a rel="me"
attribute. The text content of the link does not matter. Here is an example:'
+ explanation_html: 'You can verify yourself as the owner of the links in your profile metadata. For that, the linked website must contain a link back to your Mastodon profile. After adding the link you may need to come back here and re-save your profile for the verification to take effect. The link back must have a rel="me"
attribute. The text content of the link does not matter. Here is an example:'
verification: Verification
webauthn_credentials:
add: Add new security key
diff --git a/spec/lib/importer/accounts_index_importer_spec.rb b/spec/lib/importer/accounts_index_importer_spec.rb
new file mode 100644
index 0000000000..73f9bce399
--- /dev/null
+++ b/spec/lib/importer/accounts_index_importer_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Importer::AccountsIndexImporter do
+ describe 'import!' do
+ let(:pool) { Concurrent::FixedThreadPool.new(5) }
+ let(:importer) { described_class.new(batch_size: 123, executor: pool) }
+
+ before { Fabricate(:account) }
+
+ it 'indexes relevant accounts' do
+ expect { importer.import! }.to update_index(AccountsIndex)
+ end
+ end
+end
diff --git a/spec/lib/importer/statuses_index_importer_spec.rb b/spec/lib/importer/statuses_index_importer_spec.rb
new file mode 100644
index 0000000000..d5e1c9f2cb
--- /dev/null
+++ b/spec/lib/importer/statuses_index_importer_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Importer::StatusesIndexImporter do
+ describe 'import!' do
+ let(:pool) { Concurrent::FixedThreadPool.new(5) }
+ let(:importer) { described_class.new(batch_size: 123, executor: pool) }
+
+ before { Fabricate(:status) }
+
+ it 'indexes relevant statuses' do
+ expect { importer.import! }.to update_index(StatusesIndex)
+ end
+ end
+end
diff --git a/spec/lib/importer/tags_index_importer_spec.rb b/spec/lib/importer/tags_index_importer_spec.rb
new file mode 100644
index 0000000000..348990c01e
--- /dev/null
+++ b/spec/lib/importer/tags_index_importer_spec.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe Importer::TagsIndexImporter do
+ describe 'import!' do
+ let(:pool) { Concurrent::FixedThreadPool.new(5) }
+ let(:importer) { described_class.new(batch_size: 123, executor: pool) }
+
+ before { Fabricate(:tag) }
+
+ it 'indexes relevant tags' do
+ expect { importer.import! }.to update_index(TagsIndex)
+ end
+ end
+end