diff options
author | Anthony Bellew <anthonyreflected@gmail.com> | 2017-01-03 11:51:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-03 11:51:35 -0700 |
commit | de154dbd5dbb04d083f5a66dc288d9fef7006c01 (patch) | |
tree | 88a1715021c33add55501351dbf74950deeac481 /app/models/status.rb | |
parent | c3e9ba6a66bfcb9e33edebc73adea0a17d7f02a6 (diff) | |
parent | e6657d7342ee1ce08973bf1e5ab89e423eb8b760 (diff) |
Merge pull request #1 from Gargron/master
Catchup merge
Diffstat (limited to 'app/models/status.rb')
-rw-r--r-- | app/models/status.rb | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/app/models/status.rb b/app/models/status.rb index dc7fc60d7..bc595c93b 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -8,6 +8,7 @@ class Status < ApplicationRecord enum visibility: [:public, :unlisted, :private], _suffix: :visibility belongs_to :account, inverse_of: :statuses + belongs_to :in_reply_to_account, foreign_key: 'in_reply_to_account_id', class_name: 'Account' belongs_to :thread, foreign_key: 'in_reply_to_id', class_name: 'Status', inverse_of: :replies belongs_to :reblog, foreign_key: 'reblog_of_id', class_name: 'Status', inverse_of: :reblogs, touch: true @@ -31,7 +32,6 @@ class Status < ApplicationRecord scope :remote, -> { where.not(uri: nil) } scope :local, -> { where(uri: nil) } - scope :permitted_for, ->(target_account, account) { account&.id == target_account.id || account&.following?(target_account) ? where('1=1') : where.not(visibility: :private) } cache_associated :account, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account @@ -72,7 +72,7 @@ class Status < ApplicationRecord end def permitted?(other_account = nil) - private_visibility? ? (account.id == other_account&.id || other_account&.following?(account)) : true + private_visibility? ? (account.id == other_account&.id || other_account&.following?(account)) : other_account.nil? || !account.blocking?(other_account) end def ancestors(account = nil) @@ -145,6 +145,16 @@ class Status < ApplicationRecord end end + def permitted_for(target_account, account) + if account&.id == target_account.id || account&.following?(target_account) + where('1 = 1') + elsif !account.nil? && target_account.blocking?(account) + where('1 = 0') + else + where.not(visibility: :private) + end + end + private def filter_timeline(query, account) @@ -161,8 +171,9 @@ class Status < ApplicationRecord before_validation do text.strip! - self.reblog = reblog.reblog if reblog? && reblog.reblog? - self.in_reply_to_account_id = thread.account_id if reply? + + self.reblog = reblog.reblog if reblog? && reblog.reblog? + self.in_reply_to_account_id = (thread.account_id == account_id && thread.reply? ? thread.in_reply_to_account_id : thread.account_id) if reply? self.visibility = (account.locked? ? :private : :public) if visibility.nil? end |