Fix #65 - Options to block notifications from people you don't follow/who don't follow you

This commit is contained in:
Eugen Rochko 2016-11-25 13:13:16 +01:00
parent e3ed212b85
commit 71401659b8
8 changed files with 20 additions and 7 deletions

View File

@ -14,7 +14,10 @@ class Settings::PreferencesController < ApplicationController
current_user.settings(:notification_emails).favourite = user_params[:notification_emails][:favourite] == '1' current_user.settings(:notification_emails).favourite = user_params[:notification_emails][:favourite] == '1'
current_user.settings(:notification_emails).mention = user_params[:notification_emails][:mention] == '1' current_user.settings(:notification_emails).mention = user_params[:notification_emails][:mention] == '1'
if current_user.update(user_params.except(:notification_emails)) current_user.settings(:interactions).must_be_follower = user_params[:interactions][:must_be_follower] == '1'
current_user.settings(:interactions).must_be_following = user_params[:interactions][:must_be_following] == '1'
if current_user.update(user_params.except(:notification_emails, :interactions))
redirect_to settings_preferences_path, notice: I18n.t('generic.changes_saved_msg') redirect_to settings_preferences_path, notice: I18n.t('generic.changes_saved_msg')
else else
render action: :show render action: :show
@ -24,6 +27,6 @@ class Settings::PreferencesController < ApplicationController
private private
def user_params def user_params
params.require(:user).permit(:locale, notification_emails: [:follow, :reblog, :favourite, :mention]) params.require(:user).permit(:locale, notification_emails: [:follow, :reblog, :favourite, :mention], interactions: [:must_be_follower, :must_be_following])
end end
end end

View File

@ -84,7 +84,7 @@ class FeedManager
def filter_from_mentions?(status, receiver) def filter_from_mentions?(status, receiver)
should_filter = receiver.id == status.account_id # Filter if I'm mentioning myself should_filter = receiver.id == status.account_id # Filter if I'm mentioning myself
should_filter ||= receiver.blocking?(status.account) # or it's from someone I blocked should_filter ||= receiver.blocking?(status.account) # or it's from someone I blocked
should_filter ||= receiver.blocking?(status.mentions.map(&:account_id)) # or if it mentions someone I blocked should_filter ||= receiver.blocking?(status.mentions.includes(:account).map(&:account)) # or if it mentions someone I blocked
if status.reply? && !status.thread.account.nil? # or it's a reply if status.reply? && !status.thread.account.nil? # or it's a reply
should_filter ||= receiver.blocking?(status.thread.account) # to a user I blocked should_filter ||= receiver.blocking?(status.thread.account) # to a user I blocked
@ -95,7 +95,7 @@ class FeedManager
def filter_from_public?(status, receiver) def filter_from_public?(status, receiver)
should_filter = receiver.blocking?(status.account) should_filter = receiver.blocking?(status.account)
should_filter ||= receiver.blocking?(status.mentions.map(&:account_id)) should_filter ||= receiver.blocking?(status.mentions.includes(:account).map(&:account))
if status.reply? && !status.thread.account.nil? if status.reply? && !status.thread.account.nil?
should_filter ||= receiver.blocking?(status.thread.account) should_filter ||= receiver.blocking?(status.thread.account)

View File

@ -15,6 +15,7 @@ class User < ApplicationRecord
has_settings do |s| has_settings do |s|
s.key :notification_emails, defaults: { follow: false, reblog: false, favourite: false, mention: false } s.key :notification_emails, defaults: { follow: false, reblog: false, favourite: false, mention: false }
s.key :interactions, defaults: { must_be_follower: false, must_be_following: false }
end end
def send_devise_notification(notification, *args) def send_devise_notification(notification, *args)

View File

@ -36,6 +36,8 @@ class NotifyService < BaseService
blocked = false blocked = false
blocked ||= @recipient.id == @notification.from_account.id blocked ||= @recipient.id == @notification.from_account.id
blocked ||= @recipient.blocking?(@notification.from_account) blocked ||= @recipient.blocking?(@notification.from_account)
blocked ||= (@recipient.user.settings(:interactions).must_be_follower && !@notification.from_account.following?(@recipient))
blocked ||= (@recipient.user.settings(:interactions).must_be_following && !@recipient.following?(@notification.from_account))
blocked ||= send("blocked_#{@notification.type}?") blocked ||= send("blocked_#{@notification.type}?")
blocked blocked
end end

View File

@ -12,6 +12,10 @@
= ff.input :favourite, as: :boolean, wrapper: :with_label = ff.input :favourite, as: :boolean, wrapper: :with_label
= ff.input :mention, as: :boolean, wrapper: :with_label = ff.input :mention, as: :boolean, wrapper: :with_label
= f.simple_fields_for :interactions, current_user.settings(:interactions) do |ff|
= ff.input :must_be_follower, as: :boolean, wrapper: :with_label
= ff.input :must_be_following, as: :boolean, wrapper: :with_label
.actions .actions
= f.button :button, t('generic.save_changes'), type: :submit = f.button :button, t('generic.save_changes'), type: :submit

View File

@ -30,9 +30,6 @@ search:
- app/assets/fonts - app/assets/fonts
- app/assets/videos - app/assets/videos
ignore_missing:
- '{devise,simple_form}.*'
ignore_unused: ignore_unused:
- 'activerecord.attributes.*' - 'activerecord.attributes.*'
- '{devise,will_paginate,doorkeeper}.*' - '{devise,will_paginate,doorkeeper}.*'

View File

@ -21,6 +21,9 @@ de:
follow: E-mail senden, wenn mir jemand folgt follow: E-mail senden, wenn mir jemand folgt
mention: E-mail senden, wenn mich jemand erwähnt mention: E-mail senden, wenn mich jemand erwähnt
reblog: E-mail senden, wenn jemand meinen Beitrag teilt reblog: E-mail senden, wenn jemand meinen Beitrag teilt
interactions:
must_be_follower: Benachrichtigungen von nicht-Folgern blockieren
must_be_following: Benachrichtigungen von Nutzern blockieren, denen ich nicht folge
'no': Nein 'no': Nein
required: required:
mark: "*" mark: "*"

View File

@ -21,6 +21,9 @@ en:
follow: Send e-mail when someone follows you follow: Send e-mail when someone follows you
mention: Send e-mail when someone mentions you mention: Send e-mail when someone mentions you
reblog: Send e-mail when someone reblogs your status reblog: Send e-mail when someone reblogs your status
interactions:
must_be_follower: Block notifications from non-followers
must_be_following: Block notifications from people you don't follow
'no': 'No' 'no': 'No'
required: required:
mark: "*" mark: "*"