forked from berserker/microblog
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 clausemain
parent
e3a2203061
commit
71f2b95106
9 changed files with 121 additions and 52 deletions
@ -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