Merge branch 'pixiv-fix/cache_blocking'
This commit is contained in:
		
						commit
						0e0347ea3c
					
				@ -7,4 +7,14 @@ class Block < ApplicationRecord
 | 
				
			|||||||
  belongs_to :target_account, class_name: 'Account', required: true
 | 
					  belongs_to :target_account, class_name: 'Account', required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  after_create  :remove_blocking_cache
 | 
				
			||||||
 | 
					  after_destroy :remove_blocking_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def remove_blocking_cache
 | 
				
			||||||
 | 
					    Rails.cache.delete("exclude_account_ids_for:#{account_id}")
 | 
				
			||||||
 | 
					    Rails.cache.delete("exclude_account_ids_for:#{target_account_id}")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -7,4 +7,13 @@ class Mute < ApplicationRecord
 | 
				
			|||||||
  belongs_to :target_account, class_name: 'Account', required: true
 | 
					  belongs_to :target_account, class_name: 'Account', required: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
					  validates :account_id, uniqueness: { scope: :target_account_id }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  after_create  :remove_blocking_cache
 | 
				
			||||||
 | 
					  after_destroy :remove_blocking_cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def remove_blocking_cache
 | 
				
			||||||
 | 
					    Rails.cache.delete("exclude_account_ids_for:#{account_id}")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -183,7 +183,7 @@ class Status < ApplicationRecord
 | 
				
			|||||||
    private
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def filter_timeline(query, account)
 | 
					    def filter_timeline(query, account)
 | 
				
			||||||
      blocked = Block.where(account: account).pluck(:target_account_id) + Block.where(target_account: account).pluck(:account_id) + Mute.where(account: account).pluck(:target_account_id)
 | 
					      blocked = Rails.cache.fetch("exclude_account_ids_for:#{account.id}") { Block.where(account: account).pluck(:target_account_id) + Block.where(target_account: account).pluck(:account_id) + Mute.where(account: account).pluck(:target_account_id) }
 | 
				
			||||||
      query   = query.where('statuses.account_id NOT IN (?)', blocked) unless blocked.empty?  # Only give us statuses from people we haven't blocked, or muted, or that have blocked us
 | 
					      query   = query.where('statuses.account_id NOT IN (?)', blocked) unless blocked.empty?  # Only give us statuses from people we haven't blocked, or muted, or that have blocked us
 | 
				
			||||||
      query   = query.where('accounts.silenced = TRUE') if account.silenced?                  # and if we're hellbanned, only people who are also hellbanned
 | 
					      query   = query.where('accounts.silenced = TRUE') if account.silenced?                  # and if we're hellbanned, only people who are also hellbanned
 | 
				
			||||||
      query
 | 
					      query
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user