Squashed, modified, and rebased from glitch-soc/mastodon#2221. Co-authored-by: fef <owo@fef.moe> Co-authored-by: Jeremy Kescher <jeremy@kescher.at> Co-authored-by: neatchee <neatchee@gmail.com> Co-authored-by: Ivan Rodriguez <104603218+IRod22@users.noreply.github.com> Co-authored-by: Plastikmensch <plastikmensch@users.noreply.github.com>
		
			
				
	
	
		
			183 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module User::HasSettings
 | |
|   extend ActiveSupport::Concern
 | |
| 
 | |
|   included do
 | |
|     serialize :settings, coder: 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_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
 |