Merge branch 'master' into french-translation
This commit is contained in:
		@ -128,6 +128,6 @@ class Api::V1::AccountsController < ApiController
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    raw.map { |status| cached_keys_with_value[status.cache_key] || uncached[status.id] }
 | 
					    raw.map { |status| cached_keys_with_value[status.cache_key] || uncached[status.id] }.compact
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -39,6 +39,6 @@ class Api::V1::NotificationsController < ApiController
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    raw.map { |notification| cached_keys_with_value[notification.cache_key] || uncached[notification.id] }
 | 
					    raw.map { |notification| cached_keys_with_value[notification.cache_key] || uncached[notification.id] }.compact
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -87,6 +87,6 @@ class Api::V1::TimelinesController < ApiController
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    raw.map { |status| cached_keys_with_value[status.cache_key] || uncached[status.id] }
 | 
					    raw.map { |status| cached_keys_with_value[status.cache_key] || uncached[status.id] }.compact
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -76,12 +76,15 @@ class FeedManager
 | 
				
			|||||||
      should_filter = receiver.blocking?(status.reblog.account)             # if I'm blocking the reblogged person
 | 
					      should_filter = receiver.blocking?(status.reblog.account)             # if I'm blocking the reblogged person
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    should_filter ||= receiver.blocking?(status.mentions.map(&:account_id)) # or if it mentions someone I blocked
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    should_filter
 | 
					    should_filter
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  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.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
 | 
				
			||||||
@ -92,6 +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.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)
 | 
				
			||||||
 | 
				
			|||||||
@ -66,12 +66,12 @@ class Account < ApplicationRecord
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  def unfollow!(other_account)
 | 
					  def unfollow!(other_account)
 | 
				
			||||||
    follow = active_relationships.find_by(target_account: other_account)
 | 
					    follow = active_relationships.find_by(target_account: other_account)
 | 
				
			||||||
    follow.destroy unless follow.nil?
 | 
					    follow&.destroy
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def unblock!(other_account)
 | 
					  def unblock!(other_account)
 | 
				
			||||||
    block = block_relationships.find_by(target_account: other_account)
 | 
					    block = block_relationships.find_by(target_account: other_account)
 | 
				
			||||||
    block.destroy unless block.nil?
 | 
					    block&.destroy
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def following?(other_account)
 | 
					  def following?(other_account)
 | 
				
			||||||
 | 
				
			|||||||
@ -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)
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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}.*'
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,9 @@ de:
 | 
				
			|||||||
        password: Passwort
 | 
					        password: Passwort
 | 
				
			||||||
        silenced: Öffentliche Beiträge nicht auflisten
 | 
					        silenced: Öffentliche Beiträge nicht auflisten
 | 
				
			||||||
        username: Nutzername
 | 
					        username: Nutzername
 | 
				
			||||||
 | 
					      interactions:
 | 
				
			||||||
 | 
					        must_be_follower: Benachrichtigungen von nicht-Folgern blockieren
 | 
				
			||||||
 | 
					        must_be_following: Benachrichtigungen von Nutzern blockieren, denen ich nicht folge
 | 
				
			||||||
      notification_emails:
 | 
					      notification_emails:
 | 
				
			||||||
        favourite: E-mail senden, wenn jemand meinen Beitrag favorisiert
 | 
					        favourite: E-mail senden, wenn jemand meinen Beitrag favorisiert
 | 
				
			||||||
        follow: E-mail senden, wenn mir jemand folgt
 | 
					        follow: E-mail senden, wenn mir jemand folgt
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,9 @@ en:
 | 
				
			|||||||
        password: Password
 | 
					        password: Password
 | 
				
			||||||
        silenced: Unlisted mode
 | 
					        silenced: Unlisted mode
 | 
				
			||||||
        username: Username
 | 
					        username: Username
 | 
				
			||||||
 | 
					      interactions:
 | 
				
			||||||
 | 
					        must_be_follower: Block notifications from non-followers
 | 
				
			||||||
 | 
					        must_be_following: Block notifications from people you don't follow
 | 
				
			||||||
      notification_emails:
 | 
					      notification_emails:
 | 
				
			||||||
        favourite: Send e-mail when someone favourites your status
 | 
					        favourite: Send e-mail when someone favourites your status
 | 
				
			||||||
        follow: Send e-mail when someone follows you
 | 
					        follow: Send e-mail when someone follows you
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user