@ -1,6 +1,9 @@
# frozen_string_literal: true
class ActivityPub :: Activity :: Create < ActivityPub :: Activity
SUPPORTED_TYPES = %w( Article Note ) . freeze
CONVERTED_TYPES = %w( Image Video ) . freeze
def perform
return if delete_arrived_first? ( object_uri ) || unsupported_object_type?
@ -41,7 +44,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
url : object_url || @object [ 'id' ] ,
account : @account ,
text : text_from_content || '' ,
language : language_from_content ,
language : detected_ language,
spoiler_text : @object [ 'summary' ] || '' ,
created_at : @options [ :override_timestamps ] ? nil : @object [ 'published' ] ,
reply : @object [ 'inReplyTo' ] . present? ,
@ -165,40 +168,62 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def text_from_content
return Formatter . instance . linkify ( [ text_from_name , object_url || @object [ 'id' ] ] . join ( ' ' ) ) if converted_object_type?
if @object [ 'content' ] . present?
@object [ 'content' ]
elsif language_map?
elsif content_ language_map?
@object [ 'contentMap' ] . values . first
end
end
def language_from_content
return LanguageDetector . instance . detect ( text_from_content , @account ) unless language_map?
@object [ 'contentMap' ] . keys . first
def text_from_name
if @object [ 'name' ] . present?
@object [ 'name' ]
elsif name_language_map?
@object [ 'nameMap' ] . values . first
end
end
def detected_language
if content_language_map?
@object [ 'contentMap' ] . keys . first
elsif name_language_map?
@object [ 'nameMap' ] . keys . first
elsif supported_object_type?
LanguageDetector . instance . detect ( text_from_content , @account )
end
end
def object_url
return if @object [ 'url' ] . blank?
value = first_of_value ( @object [ 'url' ] )
return value if value . is_a? ( String )
value [ 'href' ]
url_to_href ( @object [ 'url' ] , 'text/html' )
end
def language_map?
def content_language_map?
@object [ 'contentMap' ] . is_a? ( Hash ) && ! @object [ 'contentMap' ] . empty?
end
def name_language_map?
@object [ 'nameMap' ] . is_a? ( Hash ) && ! @object [ 'nameMap' ] . empty?
end
def unsupported_object_type?
@object . is_a? ( String ) || ! %w( Article Note ) . include? ( @object [ 'type' ] )
@object . is_a? ( String ) || ! ( supported_object_type? || converted_object_type? )
end
def unsupported_media_type? ( mime_type )
mime_type . present? && ! ( MediaAttachment :: IMAGE_MIME_TYPES + MediaAttachment :: VIDEO_MIME_TYPES ) . include? ( mime_type )
end
def supported_object_type?
SUPPORTED_TYPES . include? ( @object [ 'type' ] )
end
def converted_object_type?
CONVERTED_TYPES . include? ( @object [ 'type' ] )
end
def skip_download?
return @skip_download if defined? ( @skip_download )
@skip_download || = DomainBlock . find_by ( domain : @account . domain ) & . reject_media?