mirror of
https://github.com/yingziwu/mastodon.git
synced 2026-02-21 17:53:18 +00:00
Merge tag 'v3.5.0'
This commit is contained in:
commit
22ca80b7ce
264 changed files with 8639 additions and 7556 deletions
|
|
@ -128,13 +128,13 @@ class Account < ApplicationRecord
|
|||
:approved?,
|
||||
:pending?,
|
||||
:disabled?,
|
||||
:unconfirmed?,
|
||||
:unconfirmed_or_pending?,
|
||||
:role,
|
||||
:admin?,
|
||||
:moderator?,
|
||||
:staff?,
|
||||
:locale,
|
||||
:hides_network?,
|
||||
:shows_application?,
|
||||
to: :user,
|
||||
prefix: true,
|
||||
|
|
|
|||
|
|
@ -80,6 +80,10 @@ class AccountFilter
|
|||
accounts_with_users.merge(User.pending)
|
||||
when 'suspended'
|
||||
Account.suspended
|
||||
when 'disabled'
|
||||
accounts_with_users.merge(User.disabled)
|
||||
when 'silenced'
|
||||
Account.silenced
|
||||
else
|
||||
raise "Unknown status: #{value}"
|
||||
end
|
||||
|
|
|
|||
35
app/models/concerns/status_snapshot_concern.rb
Normal file
35
app/models/concerns/status_snapshot_concern.rb
Normal file
|
|
@ -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
|
||||
|
|
@ -185,7 +185,7 @@ class MediaAttachment < ApplicationRecord
|
|||
remotable_attachment :thumbnail, IMAGE_LIMIT, suppress_errors: true, download_on_assign: false
|
||||
|
||||
validates :account, presence: true
|
||||
validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local?
|
||||
validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }
|
||||
validates :file, presence: true, if: :local?
|
||||
validates :thumbnail, absence: true, if: -> { local? && !audio_or_video? }
|
||||
|
||||
|
|
@ -258,7 +258,6 @@ class MediaAttachment < ApplicationRecord
|
|||
after_commit :enqueue_processing, on: :create
|
||||
after_commit :reset_parent_cache, on: :update
|
||||
|
||||
before_create :prepare_description, unless: :local?
|
||||
before_create :set_unknown_type
|
||||
before_create :set_processing
|
||||
|
||||
|
|
@ -306,10 +305,6 @@ class MediaAttachment < ApplicationRecord
|
|||
self.type = :unknown if file.blank? && !type_changed?
|
||||
end
|
||||
|
||||
def prepare_description
|
||||
self.description = description.strip[0...MAX_DESCRIPTION_LENGTH] unless description.nil?
|
||||
end
|
||||
|
||||
def set_type_and_extension
|
||||
self.type = begin
|
||||
if VIDEO_MIME_TYPES.include?(file_content_type)
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ class Status < ApplicationRecord
|
|||
include Paginable
|
||||
include Cacheable
|
||||
include StatusThreadingConcern
|
||||
include StatusSnapshotConcern
|
||||
include RateLimitable
|
||||
|
||||
rate_limit by: :account, family: :statuses
|
||||
|
|
@ -59,8 +60,6 @@ class Status < ApplicationRecord
|
|||
belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies, optional: true
|
||||
belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, optional: true
|
||||
|
||||
has_many :edits, class_name: 'StatusEdit', inverse_of: :status, dependent: :destroy
|
||||
|
||||
has_many :favourites, inverse_of: :status, dependent: :destroy
|
||||
has_many :bookmarks, inverse_of: :status, dependent: :destroy
|
||||
has_many :reblogs, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblog, dependent: :destroy
|
||||
|
|
@ -212,24 +211,6 @@ class Status < ApplicationRecord
|
|||
public_visibility? || unlisted_visibility?
|
||||
end
|
||||
|
||||
def snapshot!(account_id: nil, at_time: nil, rate_limit: true)
|
||||
edits.create!(
|
||||
text: text,
|
||||
spoiler_text: spoiler_text,
|
||||
sensitive: sensitive,
|
||||
ordered_media_attachment_ids: ordered_media_attachment_ids || media_attachments.pluck(:id),
|
||||
media_descriptions: ordered_media_attachments.map(&:description),
|
||||
poll_options: preloadable_poll&.options,
|
||||
account_id: account_id || self.account_id,
|
||||
created_at: at_time || edited_at,
|
||||
rate_limit: rate_limit
|
||||
)
|
||||
end
|
||||
|
||||
def edited?
|
||||
edited_at.present?
|
||||
end
|
||||
|
||||
alias sign? distributable?
|
||||
|
||||
def with_media?
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class Trends::Query
|
|||
end
|
||||
|
||||
def offset!(value)
|
||||
@offset = value
|
||||
@offset = value.to_i
|
||||
self
|
||||
end
|
||||
|
||||
|
|
@ -46,7 +46,7 @@ class Trends::Query
|
|||
end
|
||||
|
||||
def limit!(value)
|
||||
@limit = value
|
||||
@limit = value.to_i
|
||||
self
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -91,11 +91,11 @@ class User < ApplicationRecord
|
|||
validates :invite_request, presence: true, on: :create, if: :invite_text_required?
|
||||
|
||||
validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
|
||||
validates_with BlacklistedEmailValidator, on: :create
|
||||
validates_with BlacklistedEmailValidator, if: -> { !confirmed? }
|
||||
validates_with EmailMxValidator, if: :validate_email_dns?
|
||||
validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create
|
||||
|
||||
# Those are honeypot/antispam fields
|
||||
# Honeypot/anti-spam fields
|
||||
attr_accessor :registration_form_time, :website, :confirm_password
|
||||
|
||||
validates_with RegistrationFormTimeValidator, on: :create
|
||||
|
|
@ -208,8 +208,12 @@ class User < ApplicationRecord
|
|||
confirmed? && approved? && !disabled? && !account.suspended? && !account.memorial? && account.moved_to_account_id.nil?
|
||||
end
|
||||
|
||||
def unconfirmed?
|
||||
!confirmed?
|
||||
end
|
||||
|
||||
def unconfirmed_or_pending?
|
||||
!(confirmed? && approved?)
|
||||
unconfirmed? || pending?
|
||||
end
|
||||
|
||||
def inactive_message
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue