diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/domain_block.rb | 8 | ||||
-rw-r--r-- | app/models/instance.rb | 36 | ||||
-rw-r--r-- | app/models/instance_filter.rb | 16 |
3 files changed, 34 insertions, 26 deletions
diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index bba04c603..b06fa09da 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -30,6 +30,14 @@ class DomainBlock < ApplicationRecord scope :with_user_facing_limitations, -> { where(severity: [:silence, :suspend]).or(where(reject_media: true)) } scope :by_severity, -> { order(Arel.sql('(CASE severity WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 0 END), reject_media, domain')) } + def policies + if suspend? + :suspend + else + [severity.to_sym, reject_media? ? :reject_media : nil, reject_reports? ? :reject_reports : nil].reject { |policy| policy == :noop || policy.nil? } + end + end + class << self def suspend?(domain) !!rule_for(domain)&.suspend? diff --git a/app/models/instance.rb b/app/models/instance.rb index 8949be054..7434d3322 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -32,35 +32,27 @@ class Instance < ApplicationRecord @delivery_failure_tracker ||= DeliveryFailureTracker.new(domain) end - def following_count - @following_count ||= Follow.where(account: accounts).count + def unavailable? + unavailable_domain.present? end - def followers_count - @followers_count ||= Follow.where(target_account: accounts).count + def failing? + failure_days.present? || unavailable? end - def reports_count - @reports_count ||= Report.where(target_account: accounts).count - end - - def blocks_count - @blocks_count ||= Block.where(target_account: accounts).count - end - - def public_comment - domain_block&.public_comment + def to_param + domain end - def private_comment - domain_block&.private_comment - end + delegate :exhausted_deliveries_days, to: :delivery_failure_tracker - def media_storage - @media_storage ||= MediaAttachment.where(account: accounts).sum(:file_file_size) - end + def availability_over_days(num_days, end_date = Time.now.utc.to_date) + failures_map = exhausted_deliveries_days.index_with { true } + period_end_at = exhausted_deliveries_days.last || end_date + period_start_at = period_end_at - num_days.days - def to_param - domain + (period_start_at..period_end_at).map do |date| + [date, failures_map[date]] + end end end diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb index 9e533c4aa..e7e5166a1 100644 --- a/app/models/instance_filter.rb +++ b/app/models/instance_filter.rb @@ -4,8 +4,7 @@ class InstanceFilter KEYS = %i( limited by_domain - warning - unavailable + availability ).freeze attr_reader :params @@ -34,12 +33,21 @@ class InstanceFilter Instance.joins(:domain_allow).reorder(Arel.sql('domain_allows.id desc')) when 'by_domain' Instance.matches_domain(value) - when 'warning' + when 'availability' + availability_scope(value) + else + raise "Unknown filter: #{key}" + end + end + + def availability_scope(value) + case value + when 'failing' Instance.where(domain: DeliveryFailureTracker.warning_domains) when 'unavailable' Instance.joins(:unavailable_domain) else - raise "Unknown filter: #{key}" + raise "Unknown availability: #{value}" end end end |