# frozen_string_literal: true module HasUserSettings extend ActiveSupport::Concern included do serialize :settings, UserSettingsSerializer end def settings_attributes=(attributes) settings.update(attributes) end def prefers_noindex? settings['noindex'] end def preferred_posting_language valid_locale_cascade(settings['default_language'], locale, I18n.locale) end def setting_auto_play_gif settings['web.auto_play'] end def setting_default_sensitive settings['default_sensitive'] end def setting_unfollow_modal settings['web.unfollow_modal'] end def setting_boost_modal settings['web.reblog_modal'] end def setting_delete_modal settings['web.delete_modal'] end def setting_favourite_modal settings['web.favourite_modal'] end def setting_reduce_motion settings['web.reduce_motion'] end def setting_system_font_ui settings['web.use_system_font'] end def setting_system_emoji_font settings['web.use_system_emoji_font'] end def setting_noindex settings['noindex'] end def setting_flavour settings['flavour'] end def setting_skin settings['skin'] end def setting_display_media settings['web.display_media'] end def setting_expand_spoilers settings['web.expand_content_warnings'] end def setting_default_language settings['default_language'] end def setting_aggregate_reblogs settings['aggregate_reblogs'] end def setting_show_application settings['show_application'] end def setting_advanced_layout settings['web.advanced_layout'] end def setting_use_blurhash settings['web.use_blurhash'] end def setting_use_pending_items settings['web.use_pending_items'] end def setting_trends settings['web.trends'] end def setting_crop_images settings['web.crop_images'] end def setting_disable_swiping settings['web.disable_swiping'] end def setting_always_send_emails settings['always_send_emails'] end def setting_default_privacy settings['default_privacy'] || (account.locked? ? 'private' : 'public') end def setting_default_content_type settings['default_content_type'] end def setting_hide_followers_count settings['hide_followers_count'] end def setting_visible_reactions integer_cast_setting('visible_reactions', 0) end def allows_report_emails? settings['notification_emails.report'] end def allows_pending_account_emails? settings['notification_emails.pending_account'] end def allows_appeal_emails? settings['notification_emails.appeal'] end def allows_trends_review_emails? settings['notification_emails.trends'] end def allows_trending_tags_review_emails? settings['notification_emails.trends'] end def allows_trending_links_review_emails? settings['notification_emails.link_trends'] end def allows_trending_statuses_review_emails? settings['notification_emails.status_trends'] end def aggregates_reblogs? settings['aggregate_reblogs'] end def shows_application? settings['show_application'] end def show_all_media? settings['web.display_media'] == 'show_all' end def hide_all_media? settings['web.display_media'] == 'hide_all' end def integer_cast_setting(key, min = nil, max = nil) i = ActiveModel::Type::Integer.new.cast(settings[key]) # the cast above doesn't return a number if passed the string "e" i = 0 unless i.is_a? Numeric return min if !min.nil? && i < min return max if !max.nil? && i > max i end end