2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# frozen_string_literal: true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 13:21:53 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 21:32:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  enum  visibility :  [ :public ,  :unlisted ] ,  _suffix :  :visibility 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-22 23:18:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :account ,  inverse_of :  :statuses 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-06 12:34:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :thread ,  foreign_key :  'in_reply_to_id' ,  class_name :  'Status' ,  inverse_of :  :replies 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 13:28:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  belongs_to  :reblog ,  foreign_key :  'reblog_of_id' ,  class_name :  'Status' ,  inverse_of :  :reblogs ,  touch :  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 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_and_belongs_to_many  :tags 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-21 14:59:13 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  has_one  :notification ,  as :  :activity ,  dependent :  :destroy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :account ,  presence :  true 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :uri ,  uniqueness :  true ,  unless :  'local?' 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :text ,  presence :  true ,  length :  {  maximum :  500  } ,  if :  proc  {  | s |  s . local?  &&  ! s . reblog?  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-18 23:14:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :text ,  presence :  true ,  if :  proc  {  | s |  ! s . local?  &&  ! s . reblog?  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-02 15:33:24 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :reblog ,  uniqueness :  {  scope :  :account ,  message :  'of status already exists'  } ,  if :  'reblog?' 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-09 15:15:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  default_scope  {  order ( 'id desc' )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-02 14:14:49 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :remote ,  - >  {  where . not ( uri :  nil )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :local ,  - >  {  where ( uri :  nil )  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:57:56 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  cache_associated  :account ,  :media_attachments ,  :tags ,  :stream_entry ,  mentions :  :account ,  reblog :  [ :account ,  :stream_entry ,  :tags ,  :media_attachments ,  mentions :  :account ] ,  thread :  :account 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-11 16:47:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  local? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  reply? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ! in_reply_to_id . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  verb 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-23 19:17:37 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    reblog?  ?  :share  :  :post 
							 
						 
					
						
							
								
									
										
										
										
											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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  content 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    reblog?  ?  reblog . text  :  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 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-21 10:31:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    content 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-12 16:09:46 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  reblogs_count 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    attributes [ 'reblogs_count' ]  ||  reblogs . count 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-12 16:09:46 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  favourites_count 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    attributes [ 'favourites_count' ]  ||  favourites . count 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-12 16:09:46 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  ancestors ( account  =  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ids       =  ( Status . find_by_sql ( [ 'WITH RECURSIVE search_tree(id, in_reply_to_id, path) AS (SELECT id, in_reply_to_id, ARRAY[id] FROM statuses WHERE id = ? UNION ALL SELECT statuses.id, statuses.in_reply_to_id, path || statuses.id FROM search_tree JOIN statuses ON statuses.id = search_tree.in_reply_to_id WHERE NOT statuses.id = ANY(path)) SELECT id FROM search_tree ORDER BY path DESC' ,  id ] )  -  [ self ] ) . pluck ( :id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-22 22:59:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    statuses  =  Status . where ( id :  ids ) . with_includes . group_by ( & :id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    results   =  ids . map  {  | id |  statuses [ id ] . first  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    results   =  results . reject  {  | status |  account . blocking? ( status . account )  }  unless  account . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 23:18:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    results 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-21 11:43:21 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  descendants ( account  =  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ids       =  ( Status . find_by_sql ( [ 'WITH RECURSIVE search_tree(id, path) AS (SELECT id, ARRAY[id] FROM statuses WHERE id = ? UNION ALL SELECT statuses.id, path || statuses.id FROM search_tree JOIN statuses ON statuses.in_reply_to_id = search_tree.id WHERE NOT statuses.id = ANY(path)) SELECT id FROM search_tree ORDER BY path' ,  id ] )  -  [ self ] ) . pluck ( :id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-22 22:59:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    statuses  =  Status . where ( id :  ids ) . with_includes . group_by ( & :id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    results   =  ids . map  {  | id |  statuses [ id ] . first  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    results   =  results . reject  {  | status |  account . blocking? ( status . account )  }  unless  account . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 23:18:28 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 17:33:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    results 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-21 11:43:21 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  class  <<  self 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  as_home_timeline ( account ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-03 20:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      where ( account :  [ account ]  +  account . following ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  as_mentions_timeline ( account ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-03 20:04:19 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      where ( id :  Mention . where ( account :  account ) . select ( :status_id ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-08 23:22:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_public_timeline ( account  =  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-26 15:45:35 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query  =  joins ( 'LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 21:32:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								              . where ( visibility :  :public ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-02 14:33:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								              . where ( '(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-26 15:45:35 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								              . where ( 'statuses.reblog_of_id IS NULL' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-05 22:59:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-06 00:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      account . nil?  ?  filter_timeline_default ( query )  :  filter_timeline_default ( filter_timeline ( query ,  account ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-08 23:22:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  as_tag_timeline ( tag ,  account  =  nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query  =  tag . statuses 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                 . joins ( 'LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 21:32:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                 . where ( visibility :  :public ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-02 14:33:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                 . where ( '(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-26 15:45:35 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                 . where ( 'statuses.reblog_of_id IS NULL' ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-05 22:59:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-12-06 00:24:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      account . nil?  ?  filter_timeline_default ( query )  :  filter_timeline_default ( filter_timeline ( query ,  account ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 15:20:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    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 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      select ( 'reblog_of_id' ) . where ( reblog_of_id :  status_ids ) . where ( account_id :  account_id ) . map  {  | s |  [ s . reblog_of_id ,  true ]  } . to_h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 00:03:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      accounts  =  Account . where ( id :  account_ids . uniq ) . map  {  | a |  [ a . id ,  a ]  } . to_h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      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-11-10 00:03:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  filter_timeline ( query ,  account ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      blocked  =  Block . where ( account :  account ) . pluck ( :target_account_id ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-05 22:59:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      query    =  query . where ( 'statuses.account_id NOT IN (?)' ,  blocked )  unless  blocked . empty? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query    =  query . where ( 'accounts.silenced = TRUE' )  if  account . silenced? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  filter_timeline_default ( query ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query . where ( 'accounts.silenced = FALSE' ) 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  before_validation  do 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    text . strip! 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-02 14:33:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . in_reply_to_account_id  =  thread . account_id  if  reply? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-22 21:39:53 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-20 22:53:20 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								end