diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 370992304f..73d92752b1 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -76,6 +76,8 @@ class PostStatusService < BaseService @status = @account.statuses.new(status_attributes) process_mentions_service.call(@status, save_records: false) safeguard_mentions!(@status) + + UpdateStatusExpirationService.new.call(@status) # The following transaction block is needed to wrap the UPDATEs to # the media attachments when the status is created @@ -116,7 +118,6 @@ class PostStatusService < BaseService end def postprocess_status! - UpdateStatusExpirationService.new.call(@status) process_hashtags_service.call(@status) Trends.tags.register(@status) LinkCrawlWorker.perform_async(@status.id) diff --git a/app/services/update_status_expiration_service.rb b/app/services/update_status_expiration_service.rb index df151a8f1c..21068bbcea 100644 --- a/app/services/update_status_expiration_service.rb +++ b/app/services/update_status_expiration_service.rb @@ -10,10 +10,12 @@ class UpdateStatusExpirationService < BaseService expiration = status.text.scan(SCAN_EXPIRATION_RE).first return if !expiration - expiration_num = expiration[0].to_f - expiration_option = expiration[1] + expiration_num = expiration[1].to_f + expiration_option = expiration[2] base_time = status.created_at || Time.now.utc + raise Mastodon::ValidationError, 'Too many expiration value' if expiration_num >= 10000 + expired_at = base_time + (expiration_option == 'd' ? expiration_num.days : expiration_option == 'h' ? expiration_num.hours : expiration_option == 's' ? expiration_num.seconds : expiration_num.minutes) ScheduledExpirationStatus.create!(account: status.account, status: status, scheduled_at: expired_at) end diff --git a/app/services/update_status_service.rb b/app/services/update_status_service.rb index d461d60abf..9cdef9b326 100644 --- a/app/services/update_status_service.rb +++ b/app/services/update_status_service.rb @@ -30,7 +30,6 @@ class UpdateStatusService < BaseService update_media_attachments! if @options.key?(:media_ids) update_poll! if @options.key?(:poll) update_immediate_attributes! - update_expiration! create_edit! unless @options[:no_history] end @@ -118,6 +117,8 @@ class UpdateStatusService < BaseService # We raise here to rollback the entire transaction raise NoChangesSubmittedError unless significant_changes? + + update_expiration! @status.edited_at = Time.now.utc @status.save!