|
|
|
@ -29,7 +29,6 @@ class PostStatusService < BaseService |
|
|
|
|
return idempotency_duplicate if idempotency_given? && idempotency_duplicate? |
|
|
|
|
|
|
|
|
|
validate_media! |
|
|
|
|
validate_poll! |
|
|
|
|
preprocess_attributes! |
|
|
|
|
|
|
|
|
|
if scheduled? |
|
|
|
@ -71,6 +70,7 @@ class PostStatusService < BaseService |
|
|
|
|
|
|
|
|
|
def schedule_status! |
|
|
|
|
status_for_validation = @account.statuses.build(status_attributes) |
|
|
|
|
|
|
|
|
|
if status_for_validation.valid? |
|
|
|
|
status_for_validation.destroy |
|
|
|
|
|
|
|
|
@ -103,12 +103,6 @@ class PostStatusService < BaseService |
|
|
|
|
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:video?) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def validate_poll! |
|
|
|
|
return if @options[:poll].blank? |
|
|
|
|
|
|
|
|
|
@poll = @account.polls.new(@options[:poll]) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def language_from_option(str) |
|
|
|
|
ISO_639.find(str)&.alpha2 |
|
|
|
|
end |
|
|
|
@ -161,13 +155,13 @@ class PostStatusService < BaseService |
|
|
|
|
text: @text, |
|
|
|
|
media_attachments: @media || [], |
|
|
|
|
thread: @in_reply_to, |
|
|
|
|
owned_poll: @poll, |
|
|
|
|
owned_poll_attributes: poll_attributes, |
|
|
|
|
sensitive: (@options[:sensitive].nil? ? @account.user&.setting_default_sensitive : @options[:sensitive]) || @options[:spoiler_text].present?, |
|
|
|
|
spoiler_text: @options[:spoiler_text] || '', |
|
|
|
|
visibility: @visibility, |
|
|
|
|
language: language_from_option(@options[:language]) || @account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(@text, @account), |
|
|
|
|
application: @options[:application], |
|
|
|
|
} |
|
|
|
|
}.compact |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def scheduled_status_attributes |
|
|
|
@ -178,6 +172,12 @@ class PostStatusService < BaseService |
|
|
|
|
} |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def poll_attributes |
|
|
|
|
return if @options[:poll].blank? |
|
|
|
|
|
|
|
|
|
@options[:poll].merge(account: @account) |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def scheduled_options |
|
|
|
|
@options.tap do |options_hash| |
|
|
|
|
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id |
|
|
|
|