mastodon/app/lib/activitypub/parser/media_attachment_parser.rb
Eugen Rochko 71f2b95106
Fix edits with no actual changes being allowed (#17843)
* Fix edits with no actual changes being allowed locally

* Fix edits with no actual changes being allowed through ActivityPub

* Fix false positive changes caused by description processing in model

* Fix not recording poll expiration update

* Fix test

* Revert changes to ProcessStatusUpdateService

* Various fixes and improvements

* Fix code style issues

* Various changes and improvements

* Add guard clause
2022-03-26 00:38:44 +01:00

60 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class ActivityPub::Parser::MediaAttachmentParser
include JsonLdHelper
def initialize(json)
@json = json
end
# @param [MediaAttachment] previous_record
def significantly_changes?(previous_record)
remote_url != previous_record.remote_url ||
thumbnail_remote_url != previous_record.thumbnail_remote_url ||
description != previous_record.description
end
def remote_url
Addressable::URI.parse(@json['url'])&.normalize&.to_s
rescue Addressable::URI::InvalidURIError
nil
end
def thumbnail_remote_url
Addressable::URI.parse(@json['icon'].is_a?(Hash) ? @json['icon']['url'] : @json['icon'])&.normalize&.to_s
rescue Addressable::URI::InvalidURIError
nil
end
def description
str = @json['summary'].presence || @json['name'].presence
str = str.strip[0...MediaAttachment::MAX_DESCRIPTION_LENGTH] if str.present?
str
end
def focus
@json['focalPoint']
end
def blurhash
supported_blurhash? ? @json['blurhash'] : nil
end
def file_content_type
@json['mediaType']
end
private
def supported_blurhash?
components = begin
blurhash = @json['blurhash']
if blurhash.present? && /^[\w#$%*+-.:;=?@\[\]^{|}~]+$/.match?(blurhash)
Blurhash.components(blurhash)
end
end
components.present? && components.none? { |comp| comp > 5 }
end
end