* Add: #699 引用・参照対応サーバーをAPIで取得 * Complete * ごめん
This commit is contained in:
parent
78b2707c08
commit
1c054ed3a3
22 changed files with 129 additions and 29 deletions
|
@ -31,6 +31,12 @@ class InstanceInfo < ApplicationRecord
|
|||
sharkey
|
||||
).freeze
|
||||
|
||||
QUOTE_AVAILABLE_SOFTWARES = EMOJI_REACTION_AVAILABLE_SOFTWARES
|
||||
|
||||
STATUS_REFERENCE_AVAILABLE_SOFTWARES = %w(fedibird).freeze
|
||||
|
||||
CIRCLE_AVAILABLE_SOFTWARES = %w(fedibird).freeze
|
||||
|
||||
class << self
|
||||
def emoji_reaction_available?(domain)
|
||||
return Setting.enable_emoji_reaction if domain.nil?
|
||||
|
@ -38,12 +44,39 @@ class InstanceInfo < ApplicationRecord
|
|||
Rails.cache.fetch("emoji_reaction_available_domain:#{domain}") { load_emoji_reaction_available(domain) }
|
||||
end
|
||||
|
||||
def available_features(domain)
|
||||
return local_features if domain.nil?
|
||||
|
||||
Rails.cache.fetch("domain_available_features:#{domain}") { load_available_features(domain) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_emoji_reaction_available(domain)
|
||||
def load_available_features(domain)
|
||||
return local_features if domain.nil?
|
||||
|
||||
info = InstanceInfo.find_by(domain: domain)
|
||||
|
||||
{
|
||||
emoji_reaction: feature_available?(info, EMOJI_REACTION_AVAILABLE_SOFTWARES, 'emoji_reaction'),
|
||||
quote: feature_available?(info, QUOTE_AVAILABLE_SOFTWARES, 'quote'),
|
||||
status_reference: feature_available?(info, STATUS_REFERENCE_AVAILABLE_SOFTWARES, 'status_reference'),
|
||||
circle: feature_available?(info, CIRCLE_AVAILABLE_SOFTWARES, 'circle'),
|
||||
}
|
||||
end
|
||||
|
||||
def local_features
|
||||
{
|
||||
emoji_reaction: Setting.enable_emoji_reaction,
|
||||
quote: true,
|
||||
status_reference: true,
|
||||
circle: true,
|
||||
}
|
||||
end
|
||||
|
||||
def feature_available?(info, softwares, feature_name)
|
||||
return false if info.nil?
|
||||
return true if EMOJI_REACTION_AVAILABLE_SOFTWARES.include?(info['software'])
|
||||
return true if softwares.include?(info['software'])
|
||||
|
||||
return false unless info.data.is_a?(Hash)
|
||||
return false unless info.data['metadata'].is_a?(Hash)
|
||||
|
@ -51,7 +84,7 @@ class InstanceInfo < ApplicationRecord
|
|||
features = info.data.dig('metadata', 'features')
|
||||
return false unless features.is_a?(Array)
|
||||
|
||||
features.include?('emoji_reaction')
|
||||
features.include?(feature_name)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -59,5 +92,6 @@ class InstanceInfo < ApplicationRecord
|
|||
|
||||
def reset_cache
|
||||
Rails.cache.delete("emoji_reaction_available_domain:#{domain}")
|
||||
Rails.cache.delete("domain_available_features:#{domain}")
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue