diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb index 8ae5664dd..50bc04a4e 100644 --- a/app/lib/user_settings_decorator.rb +++ b/app/lib/user_settings_decorator.rb @@ -20,6 +20,7 @@ class UserSettingsDecorator user.settings['default_privacy'] = default_privacy_preference if change?('setting_default_privacy') user.settings['default_local'] = default_local_preference if change?('setting_default_local') user.settings['always_local'] = always_local_preference if change?('setting_always_local') + user.settings['rawr_federated'] = rawr_federated_preference if change?('setting_rawr_federated') user.settings['default_sensitive'] = default_sensitive_preference if change?('setting_default_sensitive') user.settings['default_language'] = default_language_preference if change?('setting_default_language') user.settings['unfollow_modal'] = unfollow_modal_preference if change?('setting_unfollow_modal') @@ -61,6 +62,10 @@ class UserSettingsDecorator boolean_cast_setting 'setting_always_local' end + def rawr_federated_preference + boolean_cast_setting 'setting_rawr_federated' + end + def default_sensitive_preference boolean_cast_setting 'setting_default_sensitive' end diff --git a/app/models/status.rb b/app/models/status.rb index 37eae21aa..f8c11d109 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -351,25 +351,29 @@ class Status < ApplicationRecord end def as_public_timeline(account = nil, local_only = false) - # instead of our ftl being a noisy irrelevant firehose - # only show public stuff boosted by the community - query = Status.network - if local_only then - # we don't want to change the ltl - query = query - .with_public_visibility - .without_replies - .without_reblogs - else # but on the ftl - query = query.without_replies unless Setting.show_replies_in_public_timelines - # grab the stuff we boosted - subquery = query.reblogs.select(:reblog_of_id) - .reorder(nil) - .distinct - # map those ids to actual statuses - # THIS QUERY IS EXPENSIVE AS FUCK!!!!!!! - # but it does the job - query = Status.where(id: subquery).with_public_visibility + if account.present? && account&.user&.setting_rawr_federated + query = timeline_scope(local_only).without_replies + else + # instead of our ftl being a noisy irrelevant firehose + # only show public stuff boosted by the community + query = Status.network + if local_only then + # we don't want to change the ltl + query = query + .with_public_visibility + .without_replies + .without_reblogs + else # but on the ftl + query = query.without_replies unless Setting.show_replies_in_public_timelines + # grab the stuff we boosted + subquery = query.reblogs.select(:reblog_of_id) + .reorder(nil) + .distinct + # map those ids to actual statuses + # THIS QUERY IS EXPENSIVE AS FUCK!!!!!!! + # but it does the job + query = Status.where(id: subquery).with_public_visibility + end end apply_timeline_filters(query, account, local_only) diff --git a/app/models/user.rb b/app/models/user.rb index ebf3fa422..b581a9a4b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -102,7 +102,7 @@ class User < ApplicationRecord has_many :session_activations, dependent: :destroy - delegate :auto_play_gif, :default_local, :always_local, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal, + delegate :auto_play_gif, :default_local, :always_local, :rawr_federated, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal, :reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_network, :hide_followers_count, :expand_spoilers, :default_language, :aggregate_reblogs, :show_application, :default_content_type, to: :settings, prefix: :setting, allow_nil: false @@ -196,6 +196,10 @@ class User < ApplicationRecord settings.always_local || false end + def setting_rawr_federated + settings.rawr_federated || false + end + def allows_digest_emails? settings.notification_emails['digest'] end diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml index 2ed325b19..a292a4f66 100644 --- a/app/views/settings/preferences/show.html.haml +++ b/app/views/settings/preferences/show.html.haml @@ -33,6 +33,9 @@ %hr#settings_other/ + .fields-group + = f.input :setting_rawr_federated, as: :boolean, wrapper: :with_label + .fields-group = f.input :setting_noindex, as: :boolean, wrapper: :with_label diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index e13a77902..6198392fc 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -104,6 +104,7 @@ en: setting_default_privacy: Post privacy setting_default_local: Default to Monsterpit-only roars (in Glitch flavour) setting_always_local: Don't send your roars outside Monsterpit + setting_rawr_federated: Show raw world timeline (may contain offensive content!) setting_default_sensitive: Always mark media as sensitive setting_delete_modal: Show confirmation dialog before deleting a roar setting_display_media: Media display