about summary refs log tree commit diff
path: root/app/lib/command_tag/command/account_tools.rb
blob: ac38f19a1b96c4c3191667a5bb71a11ff4e57e63 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# frozen_string_literal: true
module CommandTag::Command::AccountTools
  def handle_account_at_start(args)
    return if args[0].blank?

    case args[0].downcase
    when 'set'
      handle_account_set(args[1..-1])
    end
  end

  alias handle_acct_at_start handle_account_at_start

  private

  def handle_account_set(args)
    return if args[0].blank?

    case args[0].downcase
    when 'v', 'p', 'visibility', 'privacy', 'default-visibility', 'default-privacy'
      args[1] = read_visibility_from(args[1])
      return if args[1].blank?

      if args[2].blank?
        @account.user.settings.default_privacy = args[1]
      elsif args[1] == 'public'
        domains = args[2..-1].map { |domain| normalize_domain(domain) unless domain == '*' }.uniq.compact
        @account.domain_permissions.where(domain: domains, sticky: false).destroy_all if domains.present?
      elsif args[1] != 'cc'
        args[2..-1].flat_map(&:split).uniq.each do |domain|
          domain = normalize_domain(domain) unless domain == '*'
          @account.domain_permissions.create_or_update(domain: domain, visibility: args[1]) if domain.present?
        end
      end
    end
  end
end