Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: - `app/models/public_feed.rb`: Upstream refactored a bit, glitch-soc had specific code for local-only statuses. Updated glitch-soc's specific code accordingly.
This commit is contained in:
@@ -387,15 +387,17 @@ class Account < ApplicationRecord
|
||||
end
|
||||
|
||||
class Field < ActiveModelSerializers::Model
|
||||
attributes :name, :value, :verified_at, :account, :errors
|
||||
attributes :name, :value, :verified_at, :account
|
||||
|
||||
def initialize(account, attributes)
|
||||
@account = account
|
||||
@attributes = attributes
|
||||
@name = attributes['name'].strip[0, string_limit]
|
||||
@value = attributes['value'].strip[0, string_limit]
|
||||
@verified_at = attributes['verified_at']&.to_datetime
|
||||
@errors = {}
|
||||
@original_field = attributes
|
||||
string_limit = account.local? ? 255 : 2047
|
||||
super(
|
||||
account: account,
|
||||
name: attributes['name'].strip[0, string_limit],
|
||||
value: attributes['value'].strip[0, string_limit],
|
||||
verified_at: attributes['verified_at']&.to_datetime,
|
||||
)
|
||||
end
|
||||
|
||||
def verified?
|
||||
@@ -417,22 +419,12 @@ class Account < ApplicationRecord
|
||||
end
|
||||
|
||||
def mark_verified!
|
||||
@verified_at = Time.now.utc
|
||||
@attributes['verified_at'] = @verified_at
|
||||
self.verified_at = Time.now.utc
|
||||
@original_field['verified_at'] = verified_at
|
||||
end
|
||||
|
||||
def to_h
|
||||
{ name: @name, value: @value, verified_at: @verified_at }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def string_limit
|
||||
if account.local?
|
||||
255
|
||||
else
|
||||
2047
|
||||
end
|
||||
{ name: name, value: value, verified_at: verified_at }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -518,7 +510,7 @@ class Account < ApplicationRecord
|
||||
def from_text(text)
|
||||
return [] if text.blank?
|
||||
|
||||
text.scan(MENTION_RE).map { |match| match.first.split('@', 2) }.uniq.map do |(username, domain)|
|
||||
text.scan(MENTION_RE).map { |match| match.first.split('@', 2) }.uniq.filter_map do |(username, domain)|
|
||||
domain = begin
|
||||
if TagManager.instance.local_domain?(domain)
|
||||
nil
|
||||
@@ -527,7 +519,7 @@ class Account < ApplicationRecord
|
||||
end
|
||||
end
|
||||
EntityCache.instance.mention(username, domain)
|
||||
end.compact
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
@@ -83,7 +83,7 @@ module StatusThreadingConcern
|
||||
def find_statuses_from_tree_path(ids, account, promote: false)
|
||||
statuses = Status.with_accounts(ids).to_a
|
||||
account_ids = statuses.map(&:account_id).uniq
|
||||
domains = statuses.map(&:account_domain).compact.uniq
|
||||
domains = statuses.filter_map(&:account_domain).uniq
|
||||
relations = relations_map_for_account(account, account_ids, domains)
|
||||
|
||||
statuses.reject! { |status| StatusFilter.new(status, account, relations).filtered? }
|
||||
|
@@ -46,7 +46,7 @@ class CustomFilter < ApplicationRecord
|
||||
private
|
||||
|
||||
def clean_up_contexts
|
||||
self.context = Array(context).map(&:strip).map(&:presence).compact
|
||||
self.context = Array(context).map(&:strip).filter_map(&:presence)
|
||||
end
|
||||
|
||||
def remove_cache
|
||||
|
@@ -2,12 +2,11 @@
|
||||
|
||||
class HomeFeed < Feed
|
||||
def initialize(account)
|
||||
@type = :home
|
||||
@id = account.id
|
||||
@account = account
|
||||
super(:home, account.id)
|
||||
end
|
||||
|
||||
def regenerating?
|
||||
redis.exists?("account:#{@id}:regeneration")
|
||||
redis.exists?("account:#{@account.id}:regeneration")
|
||||
end
|
||||
end
|
||||
|
@@ -2,7 +2,6 @@
|
||||
|
||||
class ListFeed < Feed
|
||||
def initialize(list)
|
||||
@type = :list
|
||||
@id = list.id
|
||||
super(:list, list.id)
|
||||
end
|
||||
end
|
||||
|
@@ -92,7 +92,7 @@ class Notification < ApplicationRecord
|
||||
end
|
||||
|
||||
def reload_stale_associations!(cached_items)
|
||||
account_ids = (cached_items.map(&:from_account_id) + cached_items.map { |item| item.target_status&.account_id }.compact).uniq
|
||||
account_ids = (cached_items.map(&:from_account_id) + cached_items.filter_map { |item| item.target_status&.account_id }).uniq
|
||||
|
||||
return if account_ids.empty?
|
||||
|
||||
|
@@ -73,10 +73,12 @@ class Poll < ApplicationRecord
|
||||
attributes :id, :title, :votes_count, :poll
|
||||
|
||||
def initialize(poll, id, title, votes_count)
|
||||
@poll = poll
|
||||
@id = id
|
||||
@title = title
|
||||
@votes_count = votes_count
|
||||
super(
|
||||
poll: poll,
|
||||
id: id,
|
||||
title: title,
|
||||
votes_count: votes_count,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PublicFeed < Feed
|
||||
class PublicFeed
|
||||
# @param [Account] account
|
||||
# @param [Hash] options
|
||||
# @option [Boolean] :with_replies
|
||||
@@ -35,36 +35,38 @@ class PublicFeed < Feed
|
||||
|
||||
private
|
||||
|
||||
attr_reader :account, :options
|
||||
|
||||
def allow_local_only?
|
||||
local_account? && (local_only? || @options[:allow_local_only])
|
||||
local_account? && (local_only? || options[:allow_local_only])
|
||||
end
|
||||
|
||||
def with_reblogs?
|
||||
@options[:with_reblogs]
|
||||
options[:with_reblogs]
|
||||
end
|
||||
|
||||
def with_replies?
|
||||
@options[:with_replies]
|
||||
options[:with_replies]
|
||||
end
|
||||
|
||||
def local_only?
|
||||
@options[:local]
|
||||
options[:local]
|
||||
end
|
||||
|
||||
def remote_only?
|
||||
@options[:remote]
|
||||
options[:remote]
|
||||
end
|
||||
|
||||
def account?
|
||||
@account.present?
|
||||
account.present?
|
||||
end
|
||||
|
||||
def local_account?
|
||||
@account&.local?
|
||||
account&.local?
|
||||
end
|
||||
|
||||
def media_only?
|
||||
@options[:only_media]
|
||||
options[:only_media]
|
||||
end
|
||||
|
||||
def public_scope
|
||||
@@ -96,9 +98,9 @@ class PublicFeed < Feed
|
||||
end
|
||||
|
||||
def account_filters_scope
|
||||
Status.not_excluded_by_account(@account).tap do |scope|
|
||||
scope.merge!(Status.not_domain_blocked_by_account(@account)) unless local_only?
|
||||
scope.merge!(Status.in_chosen_languages(@account)) if @account.chosen_languages.present?
|
||||
Status.not_excluded_by_account(account).tap do |scope|
|
||||
scope.merge!(Status.not_domain_blocked_by_account(account)) unless local_only?
|
||||
scope.merge!(Status.in_chosen_languages(account)) if account.chosen_languages.present?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -387,7 +387,7 @@ class Status < ApplicationRecord
|
||||
def from_text(text)
|
||||
return [] if text.blank?
|
||||
|
||||
text.scan(FetchLinkCardService::URL_PATTERN).map(&:first).uniq.map do |url|
|
||||
text.scan(FetchLinkCardService::URL_PATTERN).map(&:first).uniq.filter_map do |url|
|
||||
status = begin
|
||||
if TagManager.instance.local_url?(url)
|
||||
ActivityPub::TagManager.instance.uri_to_resource(url, Status)
|
||||
@@ -396,7 +396,7 @@ class Status < ApplicationRecord
|
||||
end
|
||||
end
|
||||
status&.distributable? ? status : nil
|
||||
end.compact
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@@ -13,9 +13,8 @@ class TagFeed < PublicFeed
|
||||
# @option [Boolean] :remote
|
||||
# @option [Boolean] :only_media
|
||||
def initialize(tag, account, options = {})
|
||||
@tag = tag
|
||||
@account = account
|
||||
@options = options
|
||||
@tag = tag
|
||||
super(account, options)
|
||||
end
|
||||
|
||||
# @param [Integer] limit
|
||||
@@ -41,15 +40,15 @@ class TagFeed < PublicFeed
|
||||
private
|
||||
|
||||
def tagged_with_any_scope
|
||||
Status.group(:id).tagged_with(tags_for(Array(@tag.name) | Array(@options[:any])))
|
||||
Status.group(:id).tagged_with(tags_for(Array(@tag.name) | Array(options[:any])))
|
||||
end
|
||||
|
||||
def tagged_with_all_scope
|
||||
Status.group(:id).tagged_with_all(tags_for(@options[:all]))
|
||||
Status.group(:id).tagged_with_all(tags_for(options[:all]))
|
||||
end
|
||||
|
||||
def tagged_with_none_scope
|
||||
Status.group(:id).tagged_with_none(tags_for(@options[:none]))
|
||||
Status.group(:id).tagged_with_none(tags_for(options[:none]))
|
||||
end
|
||||
|
||||
def tags_for(names)
|
||||
|
Reference in New Issue
Block a user