From d8b87ec487463f548363cc861d0000b2016dd899 Mon Sep 17 00:00:00 2001 From: multiple creatures Date: Wed, 15 Jan 2020 16:42:43 -0600 Subject: handle passing `0` to `lifespan` & `defed_in` bangtags to unset the auto-destruct/auto-defederate flag for a post --- app/lib/bangtags.rb | 26 +++++++++++++------------- app/models/status.rb | 32 ++++++++++++++++++++++++++++---- app/services/post_status_service.rb | 1 + 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/app/lib/bangtags.rb b/app/lib/bangtags.rb index abc49aee9..44c2e5c75 100644 --- a/app/lib/bangtags.rb +++ b/app/lib/bangtags.rb @@ -762,19 +762,19 @@ class Bangtags unit = cmd[2].present? ? cmd[2].downcase : 'minutes' end defederate_after = case unit - when 'm', 'min', 'mins', 'minute', 'minutes' - i.minutes - when 'h', 'hr', 'hrs', 'hour', 'hours' - i.hours - when 'd', 'dy', 'dys', 'day', 'days' - i.days - when 'w', 'wk', 'wks', 'week', 'weeks' - i.weeks - when 'mn', 'mns', 'month', 'months' - i.months - when 'y', 'yr', 'yrs', 'year', 'years' - i.years - end + when 'm', 'min', 'mins', 'minute', 'minutes' + i.minutes + when 'h', 'hr', 'hrs', 'hour', 'hours' + i.hours + when 'd', 'dy', 'dys', 'day', 'days' + i.days + when 'w', 'wk', 'wks', 'week', 'weeks' + i.weeks + when 'mn', 'mns', 'month', 'months' + i.months + when 'y', 'yr', 'yrs', 'year', 'years' + i.years + end if s == :thread @parent_status.conversation.statuses.where(account_id: @account.id).find_each do |s| s.defederate_after = defederate_after diff --git a/app/models/status.rb b/app/models/status.rb index 6ab33c9b4..5954e7868 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -285,15 +285,25 @@ class Status < ApplicationRecord end def delete_after=(value) + @no_clobber_expirations = true + + if value.to_i == 0 + DestructingStatus.where(status_id: id).destroy_all + return + end + if defederate_after && defederate_after < (Time.now.utc + 5.minutes + value) value = 5.minutes + value end + delete_after = Time.now.utc + value if destructing_status.nil? - DestructingStatus.create!(status_id: id, delete_after: Time.now.utc + value) + DestructingStatus.create!(status_id: id, delete_after: delete_after) else - destructing_status.update(delete_after: Time.now.utc + value) + destructing_status.update(delete_after: delete_after) end + + delete_after end def defederate_after @@ -301,13 +311,27 @@ class Status < ApplicationRecord end def defederate_after=(value) + @no_clobber_expirations = true + + if value.to_i == 0 + DefederatingStatus.where(status_id: id).destroy_all + return + end + return unless delete_after.nil? || delete_after >= (Time.now.utc + 5.minutes + value) + defederate_after = Time.now.utc + value if defederating_status.nil? - DefederatingStatus.create!(status_id: id, defederate_after: Time.now.utc + value) + DefederatingStatus.create!(status_id: id, defederate_after: defederate_after) else - defederating_status.update(defederate_after: Time.now.utc + value) + defederating_status.update(defederate_after: defederate_after) end + + defederate_after + end + + def no_clobber_expirations? + @no_clobber_expirations || false end def mark_for_mass_destruction! diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index baf45eda6..2a065f58b 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -279,6 +279,7 @@ class PostStatusService < BaseService end def set_expirations + return if @status.no_clobber_expirations? @status.delete_after = @delete_after if @delete_after && @status.delete_after.nil? @status.defederate_after = @defederate_after if @defederate_after && @status.defederate_after.nil? end -- cgit