about summary refs log tree commit diff
path: root/app/models
diff options
context:
space:
mode:
authorOSAMU SATO <satosamu@gmail.com>2020-10-13 08:01:14 +0900
committerGitHub <noreply@github.com>2020-10-13 01:01:14 +0200
commit96761752eccfc0d239974a24e0cc2d74c6aee7ac (patch)
tree1590275b4f8a1f954d90e870ef2bfb8ac00d7109 /app/models
parentf54ca3d08e068af07a5b7a8b139e7658b3236db8 (diff)
Add duration parameter to muting. (#13831)
* Adding duration to muting.

* Remove useless checks
Diffstat (limited to 'app/models')
-rw-r--r--app/models/concerns/account_interactions.rb7
-rw-r--r--app/models/mute.rb2
2 files changed, 7 insertions, 2 deletions
diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb
index 427ebdae2..6a0ad5aa9 100644
--- a/app/models/concerns/account_interactions.rb
+++ b/app/models/concerns/account_interactions.rb
@@ -131,9 +131,12 @@ module AccountInteractions
                        .find_or_create_by!(target_account: other_account)
   end
 
-  def mute!(other_account, notifications: nil)
+  def mute!(other_account, notifications: nil, duration: 0)
     notifications = true if notifications.nil?
-    mute = mute_relationships.create_with(hide_notifications: notifications).find_or_create_by!(target_account: other_account)
+    mute = mute_relationships.create_with(hide_notifications: notifications).find_or_initialize_by(target_account: other_account)
+    mute.expires_in = duration.zero? ? nil : duration
+    mute.save!
+
     remove_potential_friendship(other_account)
 
     # When toggling a mute between hiding and allowing notifications, the mute will already exist, so the find_or_create_by! call will return the existing Mute without updating the hide_notifications attribute. Therefore, we check that hide_notifications? is what we want and set it if it isn't.
diff --git a/app/models/mute.rb b/app/models/mute.rb
index 0e00c2278..578345ef6 100644
--- a/app/models/mute.rb
+++ b/app/models/mute.rb
@@ -9,11 +9,13 @@
 #  account_id         :bigint(8)        not null
 #  target_account_id  :bigint(8)        not null
 #  hide_notifications :boolean          default(TRUE), not null
+#  expires_at         :datetime
 #
 
 class Mute < ApplicationRecord
   include Paginable
   include RelationshipCacheable
+  include Expireable
 
   belongs_to :account
   belongs_to :target_account, class_name: 'Account'