Fix #323 - self-replies to appear in public timelines again
This commit is contained in:
		| @@ -105,7 +105,7 @@ class Status < ApplicationRecord | ||||
|       query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | ||||
|               .where(visibility: :public) | ||||
|               .where('accounts.silenced = FALSE') | ||||
|               .where('statuses.in_reply_to_id IS NULL') | ||||
|               .where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | ||||
|               .where('statuses.reblog_of_id IS NULL') | ||||
|       query = filter_timeline(query, account) unless account.nil? | ||||
|       query | ||||
| @@ -116,7 +116,7 @@ class Status < ApplicationRecord | ||||
|                  .joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | ||||
|                  .where(visibility: :public) | ||||
|                  .where('accounts.silenced = FALSE') | ||||
|                  .where('statuses.in_reply_to_id IS NULL') | ||||
|                  .where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | ||||
|                  .where('statuses.reblog_of_id IS NULL') | ||||
|       query = filter_timeline(query, account) unless account.nil? | ||||
|       query | ||||
| @@ -141,5 +141,6 @@ class Status < ApplicationRecord | ||||
|  | ||||
|   before_validation do | ||||
|     text.strip! | ||||
|     self.in_reply_to_account_id = thread.account_id if reply? | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -8,7 +8,7 @@ class FanOutOnWriteService < BaseService | ||||
|     deliver_to_followers(status) | ||||
|     deliver_to_mentioned(status) | ||||
|  | ||||
|     return if status.account.silenced? || !status.public_visibility? | ||||
|     return if status.account.silenced? || !status.public_visibility? || status.reblog? || (status.reply? && status.in_reply_to_account_id != status.account_id) | ||||
|  | ||||
|     deliver_to_hashtags(status) | ||||
|     deliver_to_public(status) | ||||
| @@ -41,8 +41,6 @@ class FanOutOnWriteService < BaseService | ||||
|   end | ||||
|  | ||||
|   def deliver_to_hashtags(status) | ||||
|     return if status.reblog? || status.reply? | ||||
|  | ||||
|     Rails.logger.debug "Delivering status #{status.id} to hashtags" | ||||
|     status.tags.find_each do |tag| | ||||
|       FeedManager.instance.broadcast("hashtag:#{tag.name}", type: 'update', id: status.id) | ||||
| @@ -50,8 +48,6 @@ class FanOutOnWriteService < BaseService | ||||
|   end | ||||
|  | ||||
|   def deliver_to_public(status) | ||||
|     return if status.reblog? || status.reply? | ||||
|  | ||||
|     Rails.logger.debug "Delivering status #{status.id} to public timeline" | ||||
|     FeedManager.instance.broadcast(:public, type: 'update', id: status.id) | ||||
|   end | ||||
|   | ||||
| @@ -0,0 +1,18 @@ | ||||
| class AddInReplyToAccountIdToStatuses < ActiveRecord::Migration[5.0] | ||||
|   def up | ||||
|     add_column :statuses, :in_reply_to_account_id, :integer, null: true, default: nil | ||||
|  | ||||
|     ActiveRecord::Base.transaction do | ||||
|       Status.where.not(in_reply_to_id: nil).includes(:thread).find_each do |status| | ||||
|         next if status.thread.nil? | ||||
|  | ||||
|         status.in_reply_to_account_id = status.thread.account_id | ||||
|         status.save! | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def down | ||||
|     remove_column :statuses, :in_reply_to_account_id | ||||
|   end | ||||
| end | ||||
							
								
								
									
										15
									
								
								db/schema.rb
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								db/schema.rb
									
									
									
									
									
								
							| @@ -10,7 +10,7 @@ | ||||
| # | ||||
| # It's strongly recommended that you check this file into your version control system. | ||||
|  | ||||
| ActiveRecord::Schema.define(version: 20161130185319) do | ||||
| ActiveRecord::Schema.define(version: 20161202132159) do | ||||
|  | ||||
|   # These are extensions that must be enabled in order to support this database | ||||
|   enable_extension "plpgsql" | ||||
| @@ -168,15 +168,16 @@ ActiveRecord::Schema.define(version: 20161130185319) do | ||||
|  | ||||
|   create_table "statuses", force: :cascade do |t| | ||||
|     t.string   "uri" | ||||
|     t.integer  "account_id",                     null: false | ||||
|     t.text     "text",           default: "",    null: false | ||||
|     t.datetime "created_at",                     null: false | ||||
|     t.datetime "updated_at",                     null: false | ||||
|     t.integer  "account_id",                             null: false | ||||
|     t.text     "text",                   default: "",    null: false | ||||
|     t.datetime "created_at",                             null: false | ||||
|     t.datetime "updated_at",                             null: false | ||||
|     t.integer  "in_reply_to_id" | ||||
|     t.integer  "reblog_of_id" | ||||
|     t.string   "url" | ||||
|     t.boolean  "sensitive",      default: false | ||||
|     t.integer  "visibility",     default: 0,     null: false | ||||
|     t.boolean  "sensitive",              default: false | ||||
|     t.integer  "visibility",             default: 0,     null: false | ||||
|     t.integer  "in_reply_to_account_id" | ||||
|     t.index ["account_id"], name: "index_statuses_on_account_id", using: :btree | ||||
|     t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id", using: :btree | ||||
|     t.index ["reblog_of_id"], name: "index_statuses_on_reblog_of_id", using: :btree | ||||
|   | ||||
		Reference in New Issue
	
	Block a user