2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# frozen_string_literal: true 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# == Schema Information 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# Table name: statuses 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  id                     :bigint(8)        not null, primary key 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  uri                    :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  text                   :text             default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  created_at             :datetime         not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  updated_at             :datetime         not null 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  in_reply_to_id         :bigint(8) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  reblog_of_id           :bigint(8) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  url                    :string 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 03:12:25 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  sensitive              :boolean          default(FALSE), not null 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  visibility             :integer          default("public"), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  spoiler_text           :text             default(""), not null 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 03:12:25 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  reply                  :boolean          default(FALSE), not null 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  favourites_count       :integer          default(0), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  reblogs_count          :integer          default(0), not null 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 12:09:37 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  language               :string 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  conversation_id        :bigint(8) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 20:57:52 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  local                  :boolean 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  account_id             :bigint(8)        not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  application_id         :bigint(8) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  in_reply_to_account_id :bigint(8) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-17 17:56:23 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								class  Status  <  ApplicationRecord 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:21:53 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  Paginable 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-25 02:13:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  Streamable 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:57:56 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  Cacheable 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-05 10:07:44 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  StatusThreadingConcern 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:21:53 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-09 23:04:47 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  update_index ( 'statuses#status' ,  :proper )  if  Chewy . enabled? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-15 22:52:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  enum  visibility :  [ :public ,  :unlisted ,  :private ,  :direct ] ,  _suffix :  :visibility 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 21:32:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-20 04:56:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :application ,  class_name :  'Doorkeeper::Application' ,  optional :  true 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-15 08:58:50 +11:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-20 04:56:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :account ,  inverse_of :  :statuses ,  counter_cache :  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  belongs_to  :in_reply_to_account ,  foreign_key :  'in_reply_to_account_id' ,  class_name :  'Account' ,  optional :  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  belongs_to  :conversation ,  optional :  true 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-20 04:56:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :thread ,  foreign_key :  'in_reply_to_id' ,  class_name :  'Status' ,  inverse_of :  :replies ,  optional :  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  belongs_to  :reblog ,  foreign_key :  'reblog_of_id' ,  class_name :  'Status' ,  inverse_of :  :reblogs ,  counter_cache :  :reblogs_count ,  optional :  true 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-24 12:57:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_many  :favourites ,  inverse_of :  :status ,  dependent :  :destroy 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-16 10:46:15 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_many  :reblogs ,  foreign_key :  'reblog_of_id' ,  class_name :  'Status' ,  inverse_of :  :reblog ,  dependent :  :destroy 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-06 12:34:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_many  :replies ,  foreign_key :  'in_reply_to_id' ,  class_name :  'Status' ,  inverse_of :  :thread 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-25 02:13:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_many  :mentions ,  dependent :  :destroy 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-05 17:46:36 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_many  :media_attachments ,  dependent :  :destroy 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-01 16:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_and_belongs_to_many  :tags 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-01 16:20:16 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_and_belongs_to_many  :preview_cards 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-21 14:59:13 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_one  :notification ,  as :  :activity ,  dependent :  :destroy 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-29 16:11:05 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_one  :stream_entry ,  as :  :activity ,  inverse_of :  :status 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-21 14:59:13 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 22:21:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :uri ,  uniqueness :  true ,  presence :  true ,  unless :  :local? 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-07 08:28:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :text ,  presence :  true ,  unless :  - >  {  with_media?  ||  reblog?  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-12 23:54:26 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates_with  StatusLengthValidator 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 23:52:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates_with  DisallowedHashtagsValidator 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-18 21:11:23 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :reblog ,  uniqueness :  {  scope :  :account  } ,  if :  :reblog? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-23 09:53:01 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  default_scope  {  recent  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-09 15:15:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-23 09:53:01 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :recent ,  - >  {  reorder ( id :  :desc )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-07 20:18:34 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :remote ,  - >  {  where ( local :  false ) . or ( where . not ( uri :  nil ) )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :local ,   - >  {  where ( local :  true ) . or ( where ( uri :  nil ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:57:56 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 17:27:17 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :without_replies ,  - >  {  where ( 'statuses.reply = FALSE OR statuses.in_reply_to_account_id = statuses.account_id' )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :without_reblogs ,  - >  {  where ( 'statuses.reblog_of_id IS NULL' )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :with_public_visibility ,  - >  {  where ( visibility :  :public )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :tagged_with ,  - > ( tag )  {  joins ( :statuses_tags ) . where ( statuses_tags :  {  tag_id :  tag  } )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :excluding_silenced_accounts ,  - >  {  left_outer_joins ( :account ) . where ( accounts :  {  silenced :  false  } )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :including_silenced_accounts ,  - >  {  left_outer_joins ( :account ) . where ( accounts :  {  silenced :  true  } )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :not_excluded_by_account ,  - > ( account )  {  where . not ( account_id :  account . excluded_from_timeline_account_ids )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-20 07:38:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :not_domain_blocked_by_account ,  - > ( account )  {  account . excluded_from_timeline_domains . blank?  ?  left_outer_joins ( :account )  :  left_outer_joins ( :account ) . where ( 'accounts.domain IS NULL OR accounts.domain NOT IN (?)' ,  account . excluded_from_timeline_domains )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-05 17:27:17 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-21 23:21:32 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  cache_associated  :account ,  :application ,  :media_attachments ,  :conversation ,  :tags ,  :stream_entry ,  mentions :  :account ,  reblog :  [ :account ,  :application ,  :stream_entry ,  :tags ,  :media_attachments ,  :conversation ,  mentions :  :account ] ,  thread :  :account 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-11 16:47:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-31 14:38:17 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  delegate  :domain ,  to :  :account ,  prefix :  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-17 14:28:48 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  REAL_TIME_WINDOW  =  6 . hours 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-09 23:04:47 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  searchable_by ( preloaded  =  nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ids  =  [ account_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  preloaded . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  mentions . pluck ( :account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  favourites . pluck ( :account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  reblogs . pluck ( :account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  preloaded . mentions [ id ]  ||  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  preloaded . favourites [ id ]  ||  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ids  +=  preloaded . reblogs [ id ]  ||  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ids . uniq 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 20:25:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  reply? 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 21:20:55 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ! in_reply_to_id . nil?  ||  attributes [ 'reply' ] 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 20:25:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  local? 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 19:01:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    attributes [ 'local' ]  ||  uri . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  reblog? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ! reblog_of_id . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-17 14:28:48 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  within_realtime_window? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    created_at  > =  REAL_TIME_WINDOW . ago 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  verb 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-29 16:11:05 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  destroyed? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      :delete 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      reblog?  ?  :share  :  :post 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  object_type 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    reply?  ?  :comment  :  :note 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-07 14:18:30 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  proper 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    reblog?  ?  reblog  :  self 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  content 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-07 14:18:30 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    proper . text 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  target 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    reblog 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  title 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-29 16:11:05 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  destroyed? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      " #{ account . acct }  deleted status " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      reblog?  ?  " #{ account . acct }  shared a status by  #{ reblog . account . acct } "  :  " New status by  #{ account . acct } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-21 20:00:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  hidden? 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-15 22:52:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    private_visibility?  ||  direct_visibility? 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-12 16:09:46 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-07 08:28:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  with_media? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    media_attachments . any? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-16 10:38:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  non_sensitive_with_media? 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-07 08:28:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ! sensitive?  &&  with_media? 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-16 10:38:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-19 02:42:40 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  emojis 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-27 01:38:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    @emojis  || =  CustomEmoji . from_text ( [ spoiler_text ,  text ] . join ( ' ' ) ,  account . domain ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-19 02:42:40 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-12 14:52:09 -10:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  after_create_commit  :store_uri ,  if :  :local? 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-29 19:52:04 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  after_create_commit  :update_statistics ,  if :  :local? 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 19:01:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-08 17:34:34 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  around_create  Mastodon :: Snowflake :: Callbacks 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-14 19:47:53 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :prepare_contents ,  if :  :local? 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 21:20:55 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :set_reblog 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  before_validation  :set_visibility 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  before_validation  :set_conversation 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 01:47:23 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :set_sensitivity 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 19:01:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :set_local 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  class  <<  self 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-20 11:32:44 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  not_in_filtered_languages ( account ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-23 02:33:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      where ( language :  nil ) . or  where . not ( language :  account . filtered_languages ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-01 11:42:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_home_timeline ( account ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-22 02:38:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      where ( account :  [ account ]  +  account . following ) . where ( visibility :  [ :public ,  :unlisted ,  :private ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-18 04:09:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_direct_timeline ( account ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query  =  joins ( " LEFT OUTER JOIN mentions ON statuses.id = mentions.status_id AND mentions.account_id =  #{ account . id } " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								              . where ( " mentions.account_id =  #{ account . id }  OR statuses.account_id =  #{ account . id } " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								              . where ( visibility :  [ :direct ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      apply_timeline_filters ( query ,  account ,  false ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-06 23:16:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_public_timeline ( account  =  nil ,  local_only  =  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  timeline_scope ( local_only ) . without_replies 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-05 22:59:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      apply_timeline_filters ( query ,  account ,  local_only ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-06 23:16:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_tag_timeline ( tag ,  account  =  nil ,  local_only  =  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  timeline_scope ( local_only ) . tagged_with ( tag ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-06 23:16:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      apply_timeline_filters ( query ,  account ,  local_only ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-22 20:21:10 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_outbox_timeline ( account ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      where ( account :  account ,  visibility :  :public ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  favourites_map ( status_ids ,  account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Favourite . select ( 'status_id' ) . where ( status_id :  status_ids ) . where ( account_id :  account_id ) . map  {  | f |  [ f . status_id ,  true ]  } . to_h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  reblogs_map ( status_ids ,  account_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-25 02:41:07 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      select ( 'reblog_of_id' ) . where ( reblog_of_id :  status_ids ) . where ( account_id :  account_id ) . reorder ( nil ) . map  {  | s |  [ s . reblog_of_id ,  true ]  } . to_h 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 00:03:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										 
										
											
												Feature conversations muting (#3017)
* Add <ostatus:conversation /> tag to Atom input/output
Only uses ref attribute (not href) because href would be
the alternate link that's always included also.
Creates new conversation for every non-reply status. Carries
over conversation for every reply. Keeps remote URIs verbatim,
generates local URIs on the fly like the rest of them.
* Conversation muting - prevents notifications that reference a conversation
(including replies, favourites, reblogs) from being created. API endpoints
/api/v1/statuses/:id/mute and /api/v1/statuses/:id/unmute
Currently no way to tell when a status/conversation is muted, so the web UI
only has a "disable notifications" button, doesn't work as a toggle
* Display "Dismiss notifications" on all statuses in notifications column, not just own
* Add "muted" as a boolean attribute on statuses JSON
For now always false on contained reblogs, since it's only relevant for
statuses returned from the notifications endpoint, which are not nested
Remove "Disable notifications" from detailed status view, since it's
only relevant in the notifications column
* Up max class length
* Remove pending test for conversation mute
* Add tests, clean up
* Rename to "mute conversation" and "unmute conversation"
* Raise validation error when trying to mute/unmute status without conversation
											 
										 
										
											2017-05-15 03:04:13 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  mutes_map ( conversation_ids ,  account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ConversationMute . select ( 'conversation_id' ) . where ( conversation_id :  conversation_ids ) . where ( account_id :  account_id ) . map  {  | m |  [ m . conversation_id ,  true ]  } . to_h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-25 01:41:18 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  pins_map ( status_ids ,  account_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      StatusPin . select ( 'status_id' ) . where ( status_id :  status_ids ) . where ( account_id :  account_id ) . map  {  | p |  [ p . status_id ,  true ]  } . to_h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-03 18:21:26 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  reload_stale_associations! ( cached_items ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      account_ids  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      cached_items . each  do  | item | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        account_ids  <<  item . account_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        account_ids  <<  item . reblog . account_id  if  item . reblog? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-13 16:44:29 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      account_ids . uniq! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      return  if  account_ids . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      accounts  =  Account . where ( id :  account_ids ) . map  {  | a |  [ a . id ,  a ]  } . to_h 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-03 18:21:26 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      cached_items . each  do  | item | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        item . account  =  accounts [ item . account_id ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        item . reblog . account  =  accounts [ item . reblog . account_id ]  if  item . reblog? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-26 19:13:56 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  permitted_for ( target_account ,  account ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-16 09:54:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      visibility  =  [ :public ,  :unlisted ] 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-15 22:52:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-16 09:54:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  account . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        where ( visibility :  visibility ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      elsif  target_account . blocking? ( account )  # get rid of blocked peeps 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 06:02:58 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        none 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-15 22:52:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      elsif  account . id  ==  target_account . id  # author can see own stuff 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-05 06:02:58 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        all 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-16 09:54:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        # followers can see followers-only stuff, but also things they are mentioned in. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        # non-followers can see everything that isn't private/direct, but can see stuff they are mentioned in. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        visibility . push ( :private )  if  account . following? ( target_account ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-13 23:53:44 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        where ( visibility :  visibility ) . or ( where ( id :  account . mentions . select ( :status_id ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-26 19:13:56 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 00:03:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  timeline_scope ( local_only  =  false ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-17 12:29:43 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      starting_scope  =  local_only  ?  Status . local  :  Status 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      starting_scope 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . with_public_visibility 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . without_reblogs 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  apply_timeline_filters ( query ,  account ,  local_only ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  account . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        filter_timeline_default ( query ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        filter_timeline_for_account ( query ,  account ,  local_only ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  filter_timeline_for_account ( query ,  account ,  local_only ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  query . not_excluded_by_account ( account ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-19 21:05:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  query . not_domain_blocked_by_account ( account )  unless  local_only 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-20 11:32:44 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  query . not_in_filtered_languages ( account )  if  account . filtered_languages . present? 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query . merge ( account_silencing_filter ( account ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-05 22:59:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  filter_timeline_default ( query ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query . excluding_silenced_accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  account_silencing_filter ( account ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  account . silenced? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        including_silenced_accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        excluding_silenced_accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 00:03:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-08 21:23:29 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 21:39:53 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 19:01:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  store_uri 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    update_attribute ( :uri ,  ActivityPub :: TagManager . instance . uri_for ( self ) )  if  uri . nil? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  prepare_contents 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-04 01:33:34 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    text & . strip! 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-25 00:49:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    spoiler_text & . strip! 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 14:35:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  set_reblog 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . reblog  =  reblog . reblog  if  reblog?  &&  reblog . reblog? 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-21 20:00:18 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  set_visibility 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . visibility  =  ( account . locked?  ?  :private  :  :public )  if  visibility . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-24 18:36:08 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . visibility  =  reblog . visibility  if  reblog? 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 03:12:25 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . sensitive   =  false  if  sensitive . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 01:47:23 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  set_sensitivity 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . sensitive  =  sensitive  ||  spoiler_text . present? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  set_conversation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . reply  =  ! ( in_reply_to_id . nil?  &&  thread . nil? )  unless  reply 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    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? 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-12 21:45:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      self . conversation  =  Conversation . new 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-12 19:09:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  carried_over_reply_to_account_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  thread . account_id  ==  account_id  &&  thread . reply? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      thread . in_reply_to_account_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      thread . account_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-06 19:01:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  set_local 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . local  =  account . local? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-29 19:52:04 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  update_statistics 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  unless  public_visibility?  ||  unlisted_visibility? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ActivityTracker . increment ( 'activity:statuses:local' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-20 22:53:20 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								end