about summary refs log tree commit diff
path: root/app/controllers/settings/preferences_controller.rb
blob: c64ae9ab7fff2d7ba4bb2f2806f1f532fc040861 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# frozen_string_literal: true

class Settings::PreferencesController < Settings::BaseController
  include Redisable

  layout 'admin'

  before_action :authenticate_user!

  def show; end

  def update
    user_settings.update(user_settings_params.to_h)

    MarkExpiredStatusesWorker.perform_async(current_account.id)

    if current_user.update(user_params)
      I18n.locale = current_user.locale
      toggle_filters
      remove_cache
      update_feeds
      redirect_to settings_preferences_path, notice: I18n.t('generic.changes_saved_msg')
    else
      render :show
    end
  end

  private

  def toggle_filters
    current_user.update!(filters_enabled: !current_account.custom_filters.enabled.blank?)
  end

  def update_feeds
    FilterFeedsWorker.perform_async(current_user.account_id)
  end

  def remove_cache
    redis.del("filtered_statuses:#{current_user.account_id}")
  end

  def user_settings
    UserSettingsDecorator.new(current_user)
  end

  def user_params
    params.require(:user).permit(
      :locale,
      :filters_enabled,
      :hide_boosts,
      :only_known,
      :media_only,
      :filter_undescribed,
      :invert_filters,
      :filter_timelines_only,
      :monsterpit_api,
      :allow_unknown_follows,
      :defanged,
      chosen_languages: []
    )
  end

  def user_settings_params
    params.require(:user).permit(
      :setting_default_local,
      :setting_always_local,
      :setting_rawr_federated,
      :setting_hide_stats,
      :setting_force_lowercase,
      :setting_hide_captions,
      :setting_larger_menus,
      :setting_larger_buttons,
      :setting_larger_drawer,
      :setting_larger_emoji,
      :setting_filter_mentions,
      :setting_hide_replies_muted,
      :setting_hide_replies_blocked,
      :setting_hide_replies_blocker,
      :setting_hide_mntions_muted,
      :setting_hide_mntions_blocked,
      :setting_hide_mntions_blocker,
      :setting_hide_mntions_packm8,
      :setting_gently_kobolds,
      :setting_user_is_kobold,
      :setting_hide_mascot,
      :setting_hide_interactions,
      :setting_hide_public_profile,
      :setting_hide_public_outbox,
      :setting_max_public_history,
      :setting_max_public_access,
      :setting_roar_lifespan,
      :setting_roar_lifespan_old,
      :setting_roar_defederate,
      :setting_roar_defederate_old,
      :setting_delayed_roars,
      :setting_delayed_for,
      :setting_boost_interval,
      :setting_boost_random,
      :setting_boost_interval_from,
      :setting_boost_interval_to,
      :setting_show_cursor,
      :setting_allow_rss,
      :setting_hide_sensitive_cards,

      :setting_default_privacy,
      :setting_default_sensitive,
      :setting_default_language,
      :setting_unfollow_modal,
      :setting_boost_modal,
      :setting_favourite_modal,
      :setting_delete_modal,
      :setting_auto_play_gif,
      :setting_display_media,
      :setting_expand_spoilers,
      :setting_reduce_motion,
      :setting_system_font_ui,
      :setting_noindex,
      :setting_hide_network,
      :setting_hide_followers_count,
      :setting_aggregate_reblogs,
      :setting_show_application,
      :setting_default_content_type,

      :setting_theme,
      :setting_advanced_layout,
      notification_emails: %i(follow follow_request reblog favourite mention digest report pending_account),
      interactions: %i(must_be_follower must_be_following)
    )
  end
end