Change how changes to media attachments are stored for edits (#17696)
* Change how changes to media attachments are stored for edits Fix not being able to re-order media attachments * Fix not broadcasting updates when polls/media is changed through ActivityPub * Various fixes and improvements * Update app/models/report.rb Co-authored-by: Claire <claire.github-309c@sitedethib.com> * Add tracking of media attachment description changes * Change poll in status edit to have a structure closer to the real one Co-authored-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
		@@ -3,17 +3,29 @@
 | 
			
		||||
#
 | 
			
		||||
# Table name: status_edits
 | 
			
		||||
#
 | 
			
		||||
#  id                        :bigint(8)        not null, primary key
 | 
			
		||||
#  status_id                 :bigint(8)        not null
 | 
			
		||||
#  account_id                :bigint(8)
 | 
			
		||||
#  text                      :text             default(""), not null
 | 
			
		||||
#  spoiler_text              :text             default(""), not null
 | 
			
		||||
#  media_attachments_changed :boolean          default(FALSE), not null
 | 
			
		||||
#  created_at                :datetime         not null
 | 
			
		||||
#  updated_at                :datetime         not null
 | 
			
		||||
#  id                           :bigint(8)        not null, primary key
 | 
			
		||||
#  status_id                    :bigint(8)        not null
 | 
			
		||||
#  account_id                   :bigint(8)
 | 
			
		||||
#  text                         :text             default(""), not null
 | 
			
		||||
#  spoiler_text                 :text             default(""), not null
 | 
			
		||||
#  created_at                   :datetime         not null
 | 
			
		||||
#  updated_at                   :datetime         not null
 | 
			
		||||
#  ordered_media_attachment_ids :bigint(8)        is an Array
 | 
			
		||||
#  media_descriptions           :text             is an Array
 | 
			
		||||
#  poll_options                 :string           is an Array
 | 
			
		||||
#  sensitive                    :boolean
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
class StatusEdit < ApplicationRecord
 | 
			
		||||
  self.ignored_columns = %w(
 | 
			
		||||
    media_attachments_changed
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  class PreservedMediaAttachment < ActiveModelSerializers::Model
 | 
			
		||||
    attributes :media_attachment, :description
 | 
			
		||||
    delegate :id, :type, :url, :preview_url, :remote_url, :preview_remote_url, :text_url, :meta, :blurhash, to: :media_attachment
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  belongs_to :status
 | 
			
		||||
  belongs_to :account, optional: true
 | 
			
		||||
 | 
			
		||||
@@ -25,4 +37,17 @@ class StatusEdit < ApplicationRecord
 | 
			
		||||
    return @emojis if defined?(@emojis)
 | 
			
		||||
    @emojis = CustomEmoji.from_text([spoiler_text, text].join(' '), status.account.domain)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def ordered_media_attachments
 | 
			
		||||
    return @ordered_media_attachments if defined?(@ordered_media_attachments)
 | 
			
		||||
 | 
			
		||||
    @ordered_media_attachments = begin
 | 
			
		||||
      if ordered_media_attachment_ids.nil?
 | 
			
		||||
        []
 | 
			
		||||
      else
 | 
			
		||||
        map = status.media_attachments.index_by(&:id)
 | 
			
		||||
        ordered_media_attachment_ids.map.with_index { |media_attachment_id, index| PreservedMediaAttachment.new(media_attachment: map[media_attachment_id], description: media_descriptions[index]) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user