add option to show raw world timeline

staging
multiple creatures 2019-03-24 20:19:22 -05:00
parent 3e8d7fd5f8
commit ba51d3f135
5 changed files with 37 additions and 20 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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