This repository has been archived on 2019-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
mastodon/app/models/stream_entry.rb
Eugen Rochko 80e02b90e4 Private visibility on statuses prevents non-followers from seeing those
Filters out hidden stream entries from Atom feed
Blocks now generate hidden stream entries, can be used to federate blocks
Private statuses cannot be reblogged (generates generic 422 error for now)
POST /api/v1/statuses now takes visibility=(public|unlisted|private) param instead of unlisted boolean
Statuses JSON now contains visibility=(public|unlisted|private) field
2016-12-21 20:04:13 +01:00

70 lines
1.7 KiB
Ruby

# frozen_string_literal: true
class StreamEntry < ApplicationRecord
include Paginable
belongs_to :account, inverse_of: :stream_entries
belongs_to :activity, polymorphic: true
belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id'
belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
belongs_to :block, foreign_type: 'Block', foreign_key: 'activity_id'
validates :account, :activity, presence: true
STATUS_INCLUDES = [:account, :stream_entry, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, mentions: :account], thread: [:stream_entry, :account]].freeze
scope :with_includes, -> { includes(:account, status: STATUS_INCLUDES, favourite: [:account, :stream_entry, status: STATUS_INCLUDES], follow: [:target_account, :stream_entry]) }
def object_type
if orphaned?
:activity
else
targeted? ? :activity : activity.object_type
end
end
def verb
orphaned? ? :delete : activity.verb
end
def targeted?
[:follow, :unfollow, :block, :unblock, :share, :favorite].include? verb
end
def target
orphaned? ? nil : activity.target
end
def title
orphaned? ? nil : activity.title
end
def content
orphaned? ? nil : activity.content
end
def threaded?
(verb == :favorite || object_type == :comment) && !thread.nil?
end
def thread
orphaned? ? nil : activity.thread
end
def mentions
activity.respond_to?(:mentions) ? activity.mentions.map(&:account) : []
end
def activity
!new_record? ? send(activity_type.downcase) : super
end
private
def orphaned?
activity.nil?
end
end