12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # 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']
- Blurhash.components(blurhash) if blurhash.present? && /^[\w#$%*+,-.:;=?@\[\]^{|}~]+$/.match?(blurhash)
- end
- components.present? && components.none? { |comp| comp > 5 }
- end
- end
|