f55959ebd9
Conflicts: - `db/schema.rb`: Upstream regenerated the schema file using Rails 7, the conflicts are caused by our extra columns. Applied upstream's changes, but keeping our extra columns.
108 lines
3.1 KiB
Ruby
108 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class UserSettings
|
|
class Error < StandardError; end
|
|
class KeyError < Error; end
|
|
|
|
include UserSettings::DSL
|
|
include UserSettings::Glue
|
|
|
|
setting :always_send_emails, default: false
|
|
setting :aggregate_reblogs, default: true
|
|
setting :flavour, default: -> { ::Setting.flavour }
|
|
setting :skin, default: -> { ::Setting.skin }
|
|
setting :noindex, default: -> { ::Setting.noindex }
|
|
setting :show_application, default: true
|
|
setting :default_language, default: nil
|
|
setting :default_sensitive, default: false
|
|
setting :default_privacy, default: nil, in: %w(public unlisted private)
|
|
setting :default_content_type, default: 'text/plain'
|
|
setting :hide_followers_count, default: false
|
|
|
|
namespace :web do
|
|
setting :advanced_layout, default: false
|
|
setting :trends, default: true
|
|
setting :use_blurhash, default: true
|
|
setting :use_pending_items, default: false
|
|
setting :use_system_font, default: false
|
|
setting :disable_swiping, default: false
|
|
setting :delete_modal, default: true
|
|
setting :reblog_modal, default: false
|
|
setting :unfollow_modal, default: true
|
|
setting :favourite_modal, default: false
|
|
setting :reduce_motion, default: false
|
|
setting :expand_content_warnings, default: false
|
|
setting :display_media, default: 'default', in: %w(default show_all hide_all)
|
|
setting :auto_play, default: false
|
|
setting :use_system_emoji_font, default: false
|
|
end
|
|
|
|
namespace :notification_emails do
|
|
setting :follow, default: true
|
|
setting :reblog, default: false
|
|
setting :favourite, default: false
|
|
setting :mention, default: true
|
|
setting :follow_request, default: true
|
|
setting :report, default: true
|
|
setting :pending_account, default: true
|
|
setting :trends, default: true
|
|
setting :link_trends, default: false
|
|
setting :status_trends, default: false
|
|
setting :appeal, default: true
|
|
end
|
|
|
|
namespace :interactions do
|
|
setting :must_be_follower, default: false
|
|
setting :must_be_following, default: false
|
|
setting :must_be_following_dm, default: false
|
|
end
|
|
|
|
def initialize(original_hash)
|
|
@original_hash = original_hash || {}
|
|
end
|
|
|
|
def [](key)
|
|
key = key.to_sym
|
|
|
|
raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key)
|
|
|
|
if @original_hash.key?(key)
|
|
@original_hash[key]
|
|
else
|
|
self.class.definition_for(key).default_value
|
|
end
|
|
end
|
|
|
|
def []=(key, value)
|
|
key = key.to_sym
|
|
|
|
raise KeyError, "Undefined setting: #{key}" unless self.class.definition_for?(key)
|
|
|
|
setting_definition = self.class.definition_for(key)
|
|
typecast_value = setting_definition.type_cast(value)
|
|
|
|
raise ArgumentError, "Invalid value for setting #{key}: #{typecast_value}" if setting_definition.in.present? && setting_definition.in.exclude?(typecast_value)
|
|
|
|
if typecast_value.nil?
|
|
@original_hash.delete(key)
|
|
else
|
|
@original_hash[key] = typecast_value
|
|
end
|
|
end
|
|
|
|
def update(params)
|
|
params.each do |k, v|
|
|
self[k] = v unless v.nil?
|
|
end
|
|
end
|
|
|
|
keys.each do |key|
|
|
define_method(key) do
|
|
self[key]
|
|
end
|
|
end
|
|
|
|
def as_json
|
|
@original_hash
|
|
end
|
|
end
|