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 clauseth-downstream
parent
c4a97fc0c8
commit
88f93d03fe
@ -0,0 +1,35 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module StatusSnapshotConcern
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
has_many :edits, class_name: 'StatusEdit', inverse_of: :status, dependent: :destroy
|
||||
end
|
||||
|
||||
def edited?
|
||||
edited_at.present?
|
||||
end
|
||||
|
||||
def build_snapshot(account_id: nil, at_time: nil, rate_limit: true)
|
||||
# We don't use `edits#new` here to avoid it having saved when the
|
||||
# status is saved, since we want to control that manually
|
||||
|
||||
StatusEdit.new(
|
||||
status_id: id,
|
||||
text: text,
|
||||
spoiler_text: spoiler_text,
|
||||
sensitive: sensitive,
|
||||
ordered_media_attachment_ids: ordered_media_attachment_ids&.dup || media_attachments.pluck(:id),
|
||||
media_descriptions: ordered_media_attachments.map(&:description),
|
||||
poll_options: preloadable_poll&.options&.dup,
|
||||
account_id: account_id || self.account_id,
|
||||
created_at: at_time || edited_at,
|
||||
rate_limit: rate_limit
|
||||
)
|
||||
end
|
||||
|
||||
def snapshot!(**options)
|
||||
build_snapshot(**options).save!
|
||||
end
|
||||
end
|
Loading…
Reference in new issue