show autofollow on client and mute on unfollow

This commit is contained in:
Connor Turland 2017-09-03 15:11:52 -04:00
parent 1a8c7810be
commit 9b2193ad8c
6 changed files with 20 additions and 5 deletions

View file

@ -58,8 +58,8 @@ class User < ApplicationRecord
admin: admin } admin: admin }
if (_options[:follows]) if (_options[:follows])
json['follows'] = { json['follows'] = {
topics: following.where(followed_type: 'Topic').to_a.map(&:followed_id), topics: following.where(muted: false, followed_type: 'Topic').to_a.map(&:followed_id),
maps: following.where(followed_type: 'Map').to_a.map(&:followed_id) maps: following.where(muted: false, followed_type: 'Map').to_a.map(&:followed_id)
} }
end end
if (_options[:follow_settings]) if (_options[:follow_settings])

View file

@ -8,13 +8,15 @@ class FollowService
return if (reason == 'created' || reason == 'contributed') && !should_auto_follow(entity, user, reason) return if (reason == 'created' || reason == 'contributed') && !should_auto_follow(entity, user, reason)
follow = Follow.where(followed: entity, user: user).first_or_create follow = Follow.where(followed: entity, user: user).first_or_create
follow.update_attribute('muted', false)
if FollowReason::REASONS.include?(reason) && !follow.follow_reason.read_attribute(reason) if FollowReason::REASONS.include?(reason) && !follow.follow_reason.read_attribute(reason)
follow.follow_reason.update_attribute(reason, true) follow.follow_reason.update_attribute(reason, true)
end end
end end
def unfollow(entity, user) def unfollow(entity, user)
Follow.where(followed: entity, user: user).destroy_all follow = Follow.where(followed: entity, user: user).first
follow.update_attribute('muted', true)
end end
def remove_reason(entity, user, reason) def remove_reason(entity, user, reason)
@ -31,6 +33,8 @@ class FollowService
protected protected
def should_auto_follow(entity, user, reason) def should_auto_follow(entity, user, reason)
follow = Follow.where(followed: entity, user: user).first
return false if follow && follow.muted
if entity.class == Topic if entity.class == Topic
if reason == 'created' if reason == 'created'
return user.settings.follow_topic_on_created == '1' return user.settings.follow_topic_on_created == '1'

View file

@ -51,6 +51,7 @@ class NotificationService
def self.notify_followers(entity, event_type, event, reason_filter = nil, exclude_follows = nil) def self.notify_followers(entity, event_type, event, reason_filter = nil, exclude_follows = nil)
follows = entity.follows.where.not(user_id: event.user.id) follows = entity.follows.where.not(user_id: event.user.id)
follows = follows.where(muted: false)
if !exclude_follows.nil? if !exclude_follows.nil?
follows = follows.where.not(id: exclude_follows) follows = follows.where.not(id: exclude_follows)

View file

@ -0,0 +1,5 @@
class AddMutedToFollows < ActiveRecord::Migration[5.0]
def change
add_column :follows, :muted, :boolean
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170209215911) do ActiveRecord::Schema.define(version: 20170903180840) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -86,6 +86,7 @@ ActiveRecord::Schema.define(version: 20170209215911) do
t.integer "followed_id" t.integer "followed_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.boolean "muted"
t.index ["followed_type", "followed_id"], name: "index_follows_on_followed_type_and_followed_id", using: :btree t.index ["followed_type", "followed_id"], name: "index_follows_on_followed_type_and_followed_id", using: :btree
t.index ["user_id"], name: "index_follows_on_user_id", using: :btree t.index ["user_id"], name: "index_follows_on_user_id", using: :btree
end end

View file

@ -105,6 +105,10 @@ const Topic = Backbone.Model.extend({
var onPageWithTopicCard = Active.Map || Active.Topic var onPageWithTopicCard = Active.Map || Active.Topic
var node = this.get('node') var node = this.get('node')
if (Active.Mapper.get('follow_topic_on_contributed')) {
Active.Mapper.followTopic(this.id)
}
// update the node on the map // update the node on the map
if (onPageWithTopicCard && node) { if (onPageWithTopicCard && node) {
node.name = this.get('name') node.name = this.get('name')