about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/lib/user_settings_decorator.rb5
-rw-r--r--app/models/status.rb42
-rw-r--r--app/models/user.rb6
-rw-r--r--app/views/settings/preferences/show.html.haml3
-rw-r--r--config/locales/simple_form.en.yml1
5 files changed, 37 insertions, 20 deletions
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
@@ -34,6 +34,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
 
   .fields-group
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