diff options
author | Fire Demon <firedemon@creature.cafe> | 2020-07-21 23:40:01 -0500 |
---|---|---|
committer | Fire Demon <firedemon@creature.cafe> | 2020-08-30 05:44:01 -0500 |
commit | c752a46c457759149c14ae0e4d501d5ef2ce478a (patch) | |
tree | 5066a3b5cf73ba06d16a8b494bc3e91a094f807b /app/models/status.rb | |
parent | 03338243d28df8ecca77785c77214260ca0c32c9 (diff) |
[Privacy] Implement thread ownership and visibility
Diffstat (limited to 'app/models/status.rb')
-rw-r--r-- | app/models/status.rb | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/app/models/status.rb b/app/models/status.rb index 120a69715..657fcaca0 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -290,8 +290,7 @@ class Status < ApplicationRecord before_validation :prepare_contents, if: :local? before_validation :set_reblog - before_validation :set_conversation - before_validation :set_visibility + before_validation :set_conversation_perms before_validation :set_local after_create :set_poll_id @@ -537,27 +536,25 @@ class Status < ApplicationRecord update_column(:poll_id, poll.id) unless poll.nil? end - def set_visibility - self.visibility = reblog.visibility if reblog? && visibility.nil? - self.visibility = (account.locked? ? :private : :public) if visibility.nil? - self.visibility = thread.visibility unless thread.nil? || %w(public unlisted).include?(thread.visibility) || ['direct', 'limited', thread.visibility].include?(visibility.to_s) - self.sensitive = false if sensitive.nil? - end - def set_locality self.local_only = marked_local_only? if account.domain.nil? && !attribute_changed?(:local_only) end - def set_conversation + def set_conversation_perms self.thread = thread.reblog if thread&.reblog? - self.reply = !(in_reply_to_id.nil? && thread.nil?) unless reply + self.visibility = reblog.visibility if reblog? && visibility.nil? + self.visibility = (account.locked? ? :private : :public) if visibility.nil? + self.visibility = thread.visibility unless thread.nil? || %w(public unlisted).include?(thread.visibility) || ['direct', 'limited', thread.visibility].include?(visibility.to_s) + self.sensitive = false if sensitive.nil? if reply? && !thread.nil? self.in_reply_to_account_id = carried_over_reply_to_account_id self.conversation_id = thread.conversation_id if conversation_id.nil? elsif conversation_id.nil? - self.conversation = Conversation.new + self.conversation = reply? ? Conversation.new(account_id: nil, public: false) : Conversation.new(account_id: account_id, public: %w(public unlisted).include?(visibility.to_s)) + elsif !reply? && account_id != conversation.account_id + conversation.update!(account_id: account_id, public: %w(public unlisted).include?(visibility.to_s)) end end @@ -616,4 +613,4 @@ class Status < ApplicationRecord end end end -# rubocop:enable Metrics/ClassLength \ No newline at end of file +# rubocop:enable Metrics/ClassLength |