Compare commits
6 commits
58847542c1
...
b98a2f01be
Author | SHA1 | Date | |
---|---|---|---|
b98a2f01be | |||
efb7f0b66a | |||
|
0898ff9c14 | ||
|
e9a8bb3d30 | ||
|
92109c2cbe | ||
|
71b1d4c694 |
17 changed files with 37 additions and 8 deletions
|
@ -24,6 +24,11 @@ class AccountsController < ApplicationController
|
||||||
format.rss do
|
format.rss do
|
||||||
expires_in 1.minute, public: true
|
expires_in 1.minute, public: true
|
||||||
|
|
||||||
|
if @account&.user&.setting_norss
|
||||||
|
@statuses = []
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
limit = params[:limit].present? ? [params[:limit].to_i, PAGE_SIZE_MAX].min : PAGE_SIZE
|
limit = params[:limit].present? ? [params[:limit].to_i, PAGE_SIZE_MAX].min : PAGE_SIZE
|
||||||
@statuses = filtered_statuses.without_reblogs.limit(limit)
|
@statuses = filtered_statuses.without_reblogs.limit(limit)
|
||||||
@statuses = cache_collection(@statuses, Status)
|
@statuses = cache_collection(@statuses, Status)
|
||||||
|
|
|
@ -65,6 +65,7 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
poll: status_params[:poll],
|
poll: status_params[:poll],
|
||||||
content_type: status_params[:content_type],
|
content_type: status_params[:content_type],
|
||||||
idempotency: request.headers['Idempotency-Key'],
|
idempotency: request.headers['Idempotency-Key'],
|
||||||
|
local_only: status_params[:local_only],
|
||||||
with_rate_limit: true,
|
with_rate_limit: true,
|
||||||
quote_id: status_params[:quote_id].presence
|
quote_id: status_params[:quote_id].presence
|
||||||
)
|
)
|
||||||
|
@ -133,6 +134,7 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
:scheduled_at,
|
:scheduled_at,
|
||||||
:quote_id,
|
:quote_id,
|
||||||
:content_type,
|
:content_type,
|
||||||
|
:local_only,
|
||||||
media_ids: [],
|
media_ids: [],
|
||||||
media_attributes: [
|
media_attributes: [
|
||||||
:id,
|
:id,
|
||||||
|
|
|
@ -48,6 +48,7 @@ class Settings::PreferencesController < Settings::BaseController
|
||||||
:setting_system_font_ui,
|
:setting_system_font_ui,
|
||||||
:setting_system_emoji_font,
|
:setting_system_emoji_font,
|
||||||
:setting_noindex,
|
:setting_noindex,
|
||||||
|
:setting_norss,
|
||||||
:setting_hide_followers_count,
|
:setting_hide_followers_count,
|
||||||
:setting_aggregate_reblogs,
|
:setting_aggregate_reblogs,
|
||||||
:setting_show_application,
|
:setting_show_application,
|
||||||
|
|
|
@ -197,10 +197,6 @@ export function submitCompose(routerHistory) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getState().getIn(['compose', 'advanced_options', 'do_not_federate'])) {
|
|
||||||
status = status + ' 👁️';
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatch(submitComposeRequest());
|
dispatch(submitComposeRequest());
|
||||||
|
|
||||||
// If we're editing a post with media attachments, those have not
|
// If we're editing a post with media attachments, those have not
|
||||||
|
@ -230,6 +226,7 @@ export function submitCompose(routerHistory) {
|
||||||
visibility: getState().getIn(['compose', 'privacy']),
|
visibility: getState().getIn(['compose', 'privacy']),
|
||||||
poll: getState().getIn(['compose', 'poll'], null),
|
poll: getState().getIn(['compose', 'poll'], null),
|
||||||
language: getState().getIn(['compose', 'language']),
|
language: getState().getIn(['compose', 'language']),
|
||||||
|
local_only: getState().getIn(['compose', 'advanced_options', 'do_not_federate']),
|
||||||
},
|
},
|
||||||
headers: {
|
headers: {
|
||||||
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
|
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
|
||||||
|
|
|
@ -206,7 +206,7 @@ function continueThread (state, status) {
|
||||||
map.set('in_reply_to', status.id);
|
map.set('in_reply_to', status.id);
|
||||||
map.update(
|
map.update(
|
||||||
'advanced_options',
|
'advanced_options',
|
||||||
map => map.merge(new ImmutableMap({ do_not_federate: status.local_only }))
|
map => map.merge(new ImmutableMap({ do_not_federate: !!status.local_only }))
|
||||||
);
|
);
|
||||||
map.set('privacy', status.visibility);
|
map.set('privacy', status.visibility);
|
||||||
map.set('sensitive', false);
|
map.set('sensitive', false);
|
||||||
|
|
|
@ -6,6 +6,7 @@ module Settings
|
||||||
flavour
|
flavour
|
||||||
skin
|
skin
|
||||||
noindex
|
noindex
|
||||||
|
norss
|
||||||
).freeze
|
).freeze
|
||||||
|
|
||||||
def initialize(object)
|
def initialize(object)
|
||||||
|
|
|
@ -35,6 +35,7 @@ class UserSettingsDecorator
|
||||||
user.settings['hide_followers_count'] = hide_followers_count_preference if change?('setting_hide_followers_count')
|
user.settings['hide_followers_count'] = hide_followers_count_preference if change?('setting_hide_followers_count')
|
||||||
user.settings['flavour'] = flavour_preference if change?('setting_flavour')
|
user.settings['flavour'] = flavour_preference if change?('setting_flavour')
|
||||||
user.settings['skin'] = skin_preference if change?('setting_skin')
|
user.settings['skin'] = skin_preference if change?('setting_skin')
|
||||||
|
user.settings['norss'] = norss_preference if change?('setting_norss')
|
||||||
user.settings['aggregate_reblogs'] = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
|
user.settings['aggregate_reblogs'] = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
|
||||||
user.settings['show_application'] = show_application_preference if change?('setting_show_application')
|
user.settings['show_application'] = show_application_preference if change?('setting_show_application')
|
||||||
user.settings['advanced_layout'] = advanced_layout_preference if change?('setting_advanced_layout')
|
user.settings['advanced_layout'] = advanced_layout_preference if change?('setting_advanced_layout')
|
||||||
|
@ -115,6 +116,10 @@ class UserSettingsDecorator
|
||||||
settings['setting_flavour']
|
settings['setting_flavour']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def norss_preference
|
||||||
|
boolean_cast_setting 'setting_norss'
|
||||||
|
end
|
||||||
|
|
||||||
def skin_preference
|
def skin_preference
|
||||||
settings['setting_skin']
|
settings['setting_skin']
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,6 +34,7 @@ class Form::AdminSettings
|
||||||
show_domain_blocks
|
show_domain_blocks
|
||||||
show_domain_blocks_rationale
|
show_domain_blocks_rationale
|
||||||
noindex
|
noindex
|
||||||
|
norss
|
||||||
outgoing_spoilers
|
outgoing_spoilers
|
||||||
require_invite_text
|
require_invite_text
|
||||||
captcha_enabled
|
captcha_enabled
|
||||||
|
@ -62,6 +63,7 @@ class Form::AdminSettings
|
||||||
trendable_by_default
|
trendable_by_default
|
||||||
trending_status_cw
|
trending_status_cw
|
||||||
noindex
|
noindex
|
||||||
|
norss
|
||||||
require_invite_text
|
require_invite_text
|
||||||
captcha_enabled
|
captcha_enabled
|
||||||
).freeze
|
).freeze
|
||||||
|
|
|
@ -587,8 +587,10 @@ class Status < ApplicationRecord
|
||||||
|
|
||||||
def set_locality
|
def set_locality
|
||||||
if account.domain.nil? && !attribute_changed?(:local_only)
|
if account.domain.nil? && !attribute_changed?(:local_only)
|
||||||
self.local_only = marked_local_only?
|
self.local_only = true if marked_local_only?
|
||||||
end
|
end
|
||||||
|
self.local_only = true if thread&.local_only? && self.local_only.nil?
|
||||||
|
self.local_only = reblog.local_only if reblog?
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_conversation
|
def set_conversation
|
||||||
|
|
|
@ -132,7 +132,7 @@ class User < ApplicationRecord
|
||||||
has_many :session_activations, dependent: :destroy
|
has_many :session_activations, dependent: :destroy
|
||||||
|
|
||||||
delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal,
|
delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :favourite_modal, :delete_modal,
|
||||||
:reduce_motion, :system_font_ui, :noindex, :flavour, :skin, :display_media, :hide_followers_count,
|
:reduce_motion, :system_font_ui, :noindex, :norss, :flavour, :skin, :display_media, :hide_followers_count,
|
||||||
:expand_spoilers, :default_language, :aggregate_reblogs, :show_application,
|
:expand_spoilers, :default_language, :aggregate_reblogs, :show_application,
|
||||||
:advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images, :visible_reactions,
|
:advanced_layout, :use_blurhash, :use_pending_items, :trends, :crop_images, :visible_reactions,
|
||||||
:disable_swiping, :always_send_emails, :default_content_type, :system_emoji_font,
|
:disable_swiping, :always_send_emails, :default_content_type, :system_emoji_font,
|
||||||
|
|
|
@ -183,6 +183,7 @@ class PostStatusService < BaseService
|
||||||
content_type: @options[:content_type] || @account.user&.setting_default_content_type,
|
content_type: @options[:content_type] || @account.user&.setting_default_content_type,
|
||||||
rate_limit: @options[:with_rate_limit],
|
rate_limit: @options[:with_rate_limit],
|
||||||
quote_id: @options[:quote_id],
|
quote_id: @options[:quote_id],
|
||||||
|
local_only: @options[:local_only],
|
||||||
}.compact
|
}.compact
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,9 @@
|
||||||
- if @account.user_prefers_noindex?
|
- if @account.user_prefers_noindex?
|
||||||
%meta{ name: 'robots', content: 'noindex, noarchive' }/
|
%meta{ name: 'robots', content: 'noindex, noarchive' }/
|
||||||
|
|
||||||
|
- if !@account.user&.setting_norss
|
||||||
%link{ rel: 'alternate', type: 'application/rss+xml', href: @rss_url }/
|
%link{ rel: 'alternate', type: 'application/rss+xml', href: @rss_url }/
|
||||||
|
|
||||||
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
%link{ rel: 'alternate', type: 'application/activity+json', href: ActivityPub::TagManager.instance.uri_for(@account) }/
|
||||||
|
|
||||||
- @account.fields.select(&:verifiable?).each do |field|
|
- @account.fields.select(&:verifiable?).each do |field|
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :timeline_preview, as: :boolean, wrapper: :with_label
|
= f.input :timeline_preview, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :norss, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_norss.title'), hint: t('admin.settings.default_norss.desc_html')
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :noindex, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_noindex.title'), hint: t('admin.settings.default_noindex.desc_html')
|
= f.input :noindex, as: :boolean, wrapper: :with_label, label: t('admin.settings.default_noindex.title'), hint: t('admin.settings.default_noindex.desc_html')
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_noindex, as: :boolean, wrapper: :with_label
|
= f.input :setting_noindex, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
|
.fields-group
|
||||||
|
= f.input :setting_norss, as: :boolean, wrapper: :with_label
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true
|
= f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label, recommended: true
|
||||||
|
|
||||||
|
|
|
@ -731,6 +731,9 @@ en:
|
||||||
default_noindex:
|
default_noindex:
|
||||||
desc_html: Affects all users who have not changed this setting themselves
|
desc_html: Affects all users who have not changed this setting themselves
|
||||||
title: Opt users out of search engine indexing by default
|
title: Opt users out of search engine indexing by default
|
||||||
|
default_norss:
|
||||||
|
desc_html: Affects all users who have not changed this setting themselves
|
||||||
|
title: Opt users out of having an RSS feed of their public posts by default
|
||||||
discovery:
|
discovery:
|
||||||
follow_recommendations: Follow recommendations
|
follow_recommendations: Follow recommendations
|
||||||
preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone Mastodon. Control how various discovery features work on your server.
|
preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone Mastodon. Control how various discovery features work on your server.
|
||||||
|
|
|
@ -208,6 +208,7 @@ en:
|
||||||
setting_expand_spoilers: Always expand posts marked with content warnings
|
setting_expand_spoilers: Always expand posts marked with content warnings
|
||||||
setting_hide_network: Hide your social graph
|
setting_hide_network: Hide your social graph
|
||||||
setting_noindex: Opt-out of search engine indexing
|
setting_noindex: Opt-out of search engine indexing
|
||||||
|
setting_norss: Opt-out of an RSS feed for your public posts
|
||||||
setting_reduce_motion: Reduce motion in animations
|
setting_reduce_motion: Reduce motion in animations
|
||||||
setting_show_application: Disclose application used to send posts
|
setting_show_application: Disclose application used to send posts
|
||||||
setting_system_font_ui: Use system's default font
|
setting_system_font_ui: Use system's default font
|
||||||
|
|
|
@ -31,6 +31,7 @@ defaults: &defaults
|
||||||
system_font_ui: false
|
system_font_ui: false
|
||||||
system_emoji_font: false
|
system_emoji_font: false
|
||||||
noindex: false
|
noindex: false
|
||||||
|
norss: false
|
||||||
hide_followers_count: false
|
hide_followers_count: false
|
||||||
flavour: 'glitch'
|
flavour: 'glitch'
|
||||||
skin: 'default'
|
skin: 'default'
|
||||||
|
|
Loading…
Reference in a new issue