{
- {(signedIn || (localLiveFeedAccess === 'public' && remoteLiveFeedAccess === 'public')) && (
+ {(canViewFeed(signedIn, permissions, localLiveFeedAccess) && canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
@@ -187,7 +197,7 @@ const Firehose = ({ feedType, multiColumn }) => {
onLoadMore={handleLoadMore}
trackScroll
scrollKey='firehose'
- emptyMessage={emptyMessage}
+ emptyMessage={canViewSelectedFeed ? emptyMessage : disabledTimelineMessage}
bindToDocument={!multiColumn}
/>
diff --git a/app/javascript/mastodon/features/navigation_panel/index.tsx b/app/javascript/mastodon/features/navigation_panel/index.tsx
index d509bfb6c1..446deb1dd6 100644
--- a/app/javascript/mastodon/features/navigation_panel/index.tsx
+++ b/app/javascript/mastodon/features/navigation_panel/index.tsx
@@ -42,6 +42,7 @@ import {
me,
} from 'mastodon/initial_state';
import { transientSingleColumn } from 'mastodon/is_mobile';
+import { canViewFeed } from 'mastodon/permissions';
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
import { useAppSelector, useAppDispatch } from 'mastodon/store';
@@ -194,7 +195,7 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
multiColumn = false,
}) => {
const intl = useIntl();
- const { signedIn, disabledAccountId } = useIdentity();
+ const { signedIn, permissions, disabledAccountId } = useIdentity();
const location = useLocation();
const showSearch = useBreakpoint('full') && !multiColumn;
@@ -262,13 +263,12 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
/>
)}
- {(signedIn ||
- localLiveFeedAccess === 'public' ||
- remoteLiveFeedAccess === 'public') && (
+ {(canViewFeed(signedIn, permissions, localLiveFeedAccess) ||
+ canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
+ ) : (
+
+ );
+
return (
}
+ emptyMessage={emptyMessage}
bindToDocument={!multiColumn}
/>
diff --git a/app/javascript/mastodon/features/status/index.jsx b/app/javascript/mastodon/features/status/index.jsx
index a07b20f027..bcccc11044 100644
--- a/app/javascript/mastodon/features/status/index.jsx
+++ b/app/javascript/mastodon/features/status/index.jsx
@@ -504,12 +504,14 @@ class Status extends ImmutablePureComponent {
componentDidUpdate (prevProps) {
const { status, ancestorsIds, descendantsIds } = this.props;
- if (status && (ancestorsIds.length > prevProps.ancestorsIds.length || prevProps.status?.get('id') !== status.get('id'))) {
+ const isSameStatus = status && (prevProps.status?.get('id') === status.get('id'));
+
+ if (status && (ancestorsIds.length > prevProps.ancestorsIds.length || !isSameStatus)) {
this._scrollStatusIntoView();
}
// Only highlight replies after the initial load
- if (prevProps.descendantsIds.length) {
+ if (prevProps.descendantsIds.length && isSameStatus) {
const newRepliesIds = difference(descendantsIds, prevProps.descendantsIds);
if (newRepliesIds.length) {
diff --git a/app/javascript/mastodon/initial_state.ts b/app/javascript/mastodon/initial_state.ts
index 324c093b4f..c1cd377530 100644
--- a/app/javascript/mastodon/initial_state.ts
+++ b/app/javascript/mastodon/initial_state.ts
@@ -33,10 +33,10 @@ interface InitialStateMeta {
single_user_mode: boolean;
source_url: string;
streaming_api_base_url: string;
- local_live_feed_access: 'public' | 'authenticated';
- remote_live_feed_access: 'public' | 'authenticated';
- local_topic_feed_access: 'public' | 'authenticated';
- remote_topic_feed_access: 'public' | 'authenticated';
+ local_live_feed_access: 'public' | 'authenticated' | 'disabled';
+ remote_live_feed_access: 'public' | 'authenticated' | 'disabled';
+ local_topic_feed_access: 'public' | 'authenticated' | 'disabled';
+ remote_topic_feed_access: 'public' | 'authenticated' | 'disabled';
title: string;
show_trends: boolean;
trends_as_landing_page: boolean;
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 6917bfef36..12fb8f434e 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -333,6 +333,7 @@
"empty_column.bookmarked_statuses": "You don't have any bookmarked posts yet. When you bookmark one, it will show up here.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!",
"empty_column.direct": "You don't have any private mentions yet. When you send or receive one, it will show up here.",
+ "empty_column.disabled_feed": "This feed has been disabled by your server administrators.",
"empty_column.domain_blocks": "There are no blocked domains yet.",
"empty_column.explore_statuses": "Nothing is trending right now. Check back later!",
"empty_column.favourited_statuses": "You don't have any favorite posts yet. When you favorite one, it will show up here.",
diff --git a/app/javascript/mastodon/permissions.ts b/app/javascript/mastodon/permissions.ts
index d7695d2f5c..a83e1d77a7 100644
--- a/app/javascript/mastodon/permissions.ts
+++ b/app/javascript/mastodon/permissions.ts
@@ -1,3 +1,4 @@
+export const PEMRISSION_VIEW_FEEDS = 0x0000000000100000;
export const PERMISSION_INVITE_USERS = 0x0000000000010000;
export const PERMISSION_MANAGE_USERS = 0x0000000000000400;
export const PERMISSION_MANAGE_TAXONOMIES = 0x0000000000000100;
@@ -22,3 +23,19 @@ export function canManageReports(permissions: number) {
(permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS
);
}
+
+export const canViewFeed = (
+ signedIn: boolean,
+ permissions: number,
+ setting: 'public' | 'authenticated' | 'disabled' | undefined,
+) => {
+ switch (setting) {
+ case 'public':
+ return true;
+ case 'authenticated':
+ return signedIn;
+ case 'disabled':
+ default:
+ return (permissions & PEMRISSION_VIEW_FEEDS) === PEMRISSION_VIEW_FEEDS;
+ }
+};
diff --git a/app/models/export.rb b/app/models/export.rb
index 6ed9f60c7c..b430a2a0d9 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -12,7 +12,7 @@ class Export
def to_bookmarks_csv
CSV.generate do |csv|
account.bookmarks.includes(:status).reorder(id: :desc).each do |bookmark|
- csv << [ActivityPub::TagManager.instance.uri_for(bookmark.status)]
+ csv << [ActivityPub::TagManager.instance.uri_for(bookmark.status)] if bookmark.status.present?
end
end
end
diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb
index 924d9de852..28815c700c 100644
--- a/app/models/form/admin_settings.rb
+++ b/app/models/form/admin_settings.rb
@@ -102,7 +102,7 @@ class Form::AdminSettings
DESCRIPTION_LIMIT = 200
DOMAIN_BLOCK_AUDIENCES = %w(disabled users all).freeze
REGISTRATION_MODES = %w(open approved none).freeze
- FEED_ACCESS_MODES = %w(public authenticated).freeze
+ FEED_ACCESS_MODES = %w(public authenticated disabled).freeze
attr_accessor(*KEYS)
diff --git a/app/models/link_feed.rb b/app/models/link_feed.rb
index 29ea430cc0..4554796cc5 100644
--- a/app/models/link_feed.rb
+++ b/app/models/link_feed.rb
@@ -15,18 +15,30 @@ class LinkFeed < PublicFeed
# @param [Integer] min_id
# @return [Array]
def get(limit, max_id = nil, since_id = nil, min_id = nil)
+ return [] if incompatible_feed_settings?
+
scope = public_scope
scope.merge!(discoverable)
scope.merge!(attached_to_preview_card)
scope.merge!(account_filters_scope) if account?
scope.merge!(language_scope) if account&.chosen_languages.present?
+ scope.merge!(local_only_scope) if local_only?
+ scope.merge!(remote_only_scope) if remote_only?
scope.to_a_paginated_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
end
private
+ def local_feed_setting
+ Setting.local_topic_feed_access
+ end
+
+ def remote_feed_setting
+ Setting.remote_topic_feed_access
+ end
+
def attached_to_preview_card
Status.joins(:preview_cards_status).where(preview_cards_status: { preview_card_id: @preview_card.id })
end
diff --git a/app/models/public_feed.rb b/app/models/public_feed.rb
index 72e6249c39..a4b2919ef8 100644
--- a/app/models/public_feed.rb
+++ b/app/models/public_feed.rb
@@ -20,6 +20,8 @@ class PublicFeed
# @param [Integer] min_id
# @return [Array]
def get(limit, max_id = nil, since_id = nil, min_id = nil)
+ return [] if incompatible_feed_settings?
+
scope = public_scope
scope.merge!(without_local_only_scope) unless allow_local_only?
@@ -42,6 +44,21 @@ class PublicFeed
local_account? && (local_only? || options[:allow_local_only])
end
+ def incompatible_feed_settings?
+ (local_only? && !user_has_access_to_feed?(local_feed_setting)) || (remote_only? && !user_has_access_to_feed?(remote_feed_setting))
+ end
+
+ def user_has_access_to_feed?(setting)
+ case setting
+ when 'public'
+ true
+ when 'authenticated'
+ @account&.user&.functional?
+ when 'disabled'
+ @account&.user&.can?(:view_feeds)
+ end
+ end
+
def with_reblogs?
options[:with_reblogs]
end
@@ -50,12 +67,20 @@ class PublicFeed
options[:with_replies]
end
+ def local_feed_setting
+ Setting.local_live_feed_access
+ end
+
+ def remote_feed_setting
+ Setting.remote_live_feed_access
+ end
+
def local_only?
- options[:local] && !options[:remote]
+ (options[:local] && !options[:remote]) || !user_has_access_to_feed?(remote_feed_setting)
end
def remote_only?
- options[:remote] && !options[:local]
+ (options[:remote] && !options[:local]) || !user_has_access_to_feed?(local_feed_setting)
end
def account?
diff --git a/app/models/tag_feed.rb b/app/models/tag_feed.rb
index a4d371e4c1..f9ed437994 100644
--- a/app/models/tag_feed.rb
+++ b/app/models/tag_feed.rb
@@ -23,6 +23,8 @@ class TagFeed < PublicFeed
# @param [Integer] min_id
# @return [Array]
def get(limit, max_id = nil, since_id = nil, min_id = nil)
+ return [] if incompatible_feed_settings?
+
scope = public_scope
scope.merge!(without_local_only_scope) unless local_account?
@@ -39,6 +41,14 @@ class TagFeed < PublicFeed
private
+ def local_feed_setting
+ Setting.local_topic_feed_access
+ end
+
+ def remote_feed_setting
+ Setting.remote_topic_feed_access
+ end
+
def tagged_with_any_scope
Status.group(:id).tagged_with(tags_for(Array(@tag.name) | Array(options[:any])))
end
diff --git a/app/models/user_role.rb b/app/models/user_role.rb
index d567bf5eca..31c8ff20a6 100644
--- a/app/models/user_role.rb
+++ b/app/models/user_role.rb
@@ -36,6 +36,7 @@ class UserRole < ApplicationRecord
manage_roles: (1 << 17),
manage_user_access: (1 << 18),
delete_user_data: (1 << 19),
+ view_feeds: (1 << 20),
}.freeze
EVERYONE_ROLE_ID = -99
@@ -67,6 +68,7 @@ class UserRole < ApplicationRecord
manage_blocks
manage_taxonomies
manage_invites
+ view_feeds
).freeze,
administration: %i(
diff --git a/config/locales/an.yml b/config/locales/an.yml
index 64aa98ce5d..ca7d6b8254 100644
--- a/config/locales/an.yml
+++ b/config/locales/an.yml
@@ -680,7 +680,6 @@ an:
title: Excluyir per defecto los usuarios d'a indexación d'os motors de busqueda
discovery:
follow_recommendations: Recomendacions de cuentas
- preamble: Exposar conteniu interesant a la superficie ye fundamental pa incorporar nuevos usuarios que pueden no conoixer a dengún Mastodon. Controla cómo funcionan quantas opcions d'escubrimiento en o tuyo servidor.
profile_directory: Directorio de perfils
public_timelines: Linias de tiempo publicas
publish_statistics: Publicar las estatisticas
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index fb60171805..8774b0227a 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -889,7 +889,6 @@ ar:
title: عدم السماح مبدئيا لمحركات البحث بفهرسة الملفات التعريفية للمستخدمين
discovery:
follow_recommendations: اتبع التوصيات
- preamble: يُعد إتاحة رؤية المحتوى المثير للاهتمام أمرًا ضروريًا لجذب مستخدمين جدد قد لا يعرفون أي شخص في Mastodon. تحكم في كيفية عمل ميزات الاكتشاف المختلفة على خادمك الخاص.
privacy: الخصوصية
profile_directory: دليل الصفحات التعريفية
public_timelines: الخيوط الزمنية العامة
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index b0e1052382..9bb87ce8e1 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -316,7 +316,6 @@ ast:
title: Retención del conteníu
discovery:
follow_recommendations: Recomendación de cuentes
- preamble: L'apaición de conteníu interesante ye fundamental p'atrayer persones nueves que nun conozan nada de Mastodon. Controla'l funcionamientu de delles funciones de descubrimientu d'esti sirvidor.
profile_directory: Direutoriu de perfiles
public_timelines: Llinies de tiempu públiques
publish_statistics: Espublizamientu d'estadístiques
diff --git a/config/locales/be.yml b/config/locales/be.yml
index 5e5b1f1e65..96ac5f04f6 100644
--- a/config/locales/be.yml
+++ b/config/locales/be.yml
@@ -865,7 +865,7 @@ be:
title: Перадвызначана выключыць карыстальнікаў з індэксацыі пашуковымі рухавікамі
discovery:
follow_recommendations: Выконвайце рэкамендацыі
- preamble: Прадстаўленне цікавага кантэнту дапамагае прыцягнуць новых карыстальнікаў, якія могуць не ведаць нікога на Mastodon. Кантралюйце працу розных функцый выяўлення на вашым серверы.
+ preamble: Паказ цікавага кантэнту карысны ў прывабліванні новых карыстальнікаў, якія могуць нікога не ведаць у Mastodon. Кантралюйце, як розныя функцыі вынаходства працуюць на Вашым серверы.
privacy: Прыватнасць
profile_directory: Дырэкторыя профіляў
public_timelines: Публічная паслядоўнасць публікацый
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 1f22bf0047..60a86c36a7 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -825,7 +825,6 @@ bg:
title: По подразбиране изключете индексирането от търсачки за вашите потребители
discovery:
follow_recommendations: Препоръки за следване
- preamble: За потребители, които са нови и не познават никого в Mastodon, показването на интересно съдържание е ключово. Настройте начина, по който различни функции по откриване на съдържание работят на вашия сървър.
privacy: Поверителност
profile_directory: Указател на профила
public_timelines: Публични хронологии
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index c3be44daa8..caa472fb39 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -832,7 +832,6 @@ ca:
title: Exclou per defecte els usuaris de la indexació dels motors de cerca
discovery:
follow_recommendations: Seguir les recomanacions
- preamble: L'aparició de contingut interessant és fonamental per atraure els nous usuaris que podrien no saber res de Mastodon. Controla com funcionen diverses opcions de descobriment en el teu servidor.
privacy: Privacitat
profile_directory: Directori de perfils
public_timelines: Línies de temps públiques
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 3919dbe98d..3f24c637fc 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -865,7 +865,6 @@ cs:
title: Odhlásit uživatele ze standardního indexování vyhledávačů
discovery:
follow_recommendations: Doporučená sledování
- preamble: Povrchový zajímavý obsah je užitečný pro zapojení nových uživatelů, kteří možná neznají žádného Mastodona. Mějte pod kontrolou, jak různé objevovací funkce fungují na vašem serveru.
privacy: Soukromí
profile_directory: Adresář profilů
public_timelines: Veřejné časové osy
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index 61d1d9d8af..9aa4fd9652 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -893,7 +893,6 @@ cy:
title: Eithrio defnyddwyr o fynegai peiriannau chwilio, fel rhagosodiad
discovery:
follow_recommendations: Dilyn yr argymhellion
- preamble: Mae amlygu cynnwys diddorol yn allweddol ar gyfer derbyn defnyddwyr newydd nad ydynt efallai'n gyfarwydd ag unrhyw un Mastodon. Rheolwch sut mae nodweddion darganfod amrywiol yn gweithio ar eich gweinydd.
privacy: Preifatrwydd
profile_directory: Cyfeiriadur proffiliau
public_timelines: Ffrydiau cyhoeddus
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 969bece7db..d3b2f8db98 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -837,7 +837,7 @@ da:
title: Fravælg som standard søgemaskineindeksering for brugere
discovery:
follow_recommendations: Følg-anbefalinger
- preamble: At vise interessant indhold er vitalt ifm. at få nye brugere om bord, som måske ikke kender nogen på Mastodon. Styr, hvordan forskellige opdagelsesfunktioner fungerer på serveren.
+ preamble: At bringe interessant indhold frem er afgørende for at engagere nye brugere, der måske ikke kender nogen på Mastodon. Kontroller, hvordan forskellige funktioner til at finde indhold fungerer på din server.
privacy: Fortrolighed
profile_directory: Profiloversigt
public_timelines: Offentlige tidslinjer
diff --git a/config/locales/de.yml b/config/locales/de.yml
index db183a199d..02391fe27b 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -837,7 +837,7 @@ de:
title: Profile standardmäßig von der Suchmaschinen-Indizierung ausnehmen
discovery:
follow_recommendations: Follower-Empfehlungen
- preamble: Das Auffinden interessanter Inhalte ist wichtig, um neue Nutzer einzubinden, die Mastodon noch nicht kennen. Bestimme, wie verschiedene Suchfunktionen auf deinem Server funktionieren.
+ preamble: Interessante Inhalte sichtbar zu machen, ist entscheidend, um neue Nutzer*innen, die möglicherweise noch niemanden auf Mastodon kennen, zu gewinnen. Überprüfe, wie die einzelnen Suchfunktionen auf deinem Server funktionieren.
privacy: Datenschutz
profile_directory: Profilverzeichnis
public_timelines: Öffentliche Timeline
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 0b3094b7cd..37371db4a3 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -837,7 +837,7 @@ el:
title: Εξαίρεση χρηστών από τις μηχανές αναζήτησης
discovery:
follow_recommendations: Ακολούθησε τις προτάσεις
- preamble: Δημοσιεύοντας ενδιαφέρον περιεχόμενο είναι καθοριστικό για την ενσωμάτωση νέων χρηστών που μπορεί να μη γνωρίζουν κανέναν στο Mastodon. Έλεγξε πώς λειτουργούν διάφορες δυνατότητες ανακάλυψης στον διακομιστή σας.
+ preamble: Εμφανίζοντας ενδιαφέρον περιεχόμενο είναι καθοριστικό για την ενσωμάτωση νέων χρηστών που μπορεί να μη γνωρίζουν κανέναν στο Mastodon. Ελέγξτε πώς λειτουργούν διάφορες δυνατότητες ανακάλυψης στον διακομιστή σας.
privacy: Απόρρητο
profile_directory: Κατάλογος προφίλ
public_timelines: Δημόσιες ροές
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 2841f977ee..eda44eaa90 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -831,7 +831,6 @@ en-GB:
title: Opt users out of search engine indexing by default
discovery:
follow_recommendations: Follow recommendations
- preamble: Surfacing interesting content is instrumental in onboarding new users who may not know anyone on Mastodon. Control how various discovery features work on your server.
privacy: Privacy
profile_directory: Profile directory
public_timelines: Public timelines
diff --git a/config/locales/en.yml b/config/locales/en.yml
index eee4d9409f..15c3c582bb 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -796,6 +796,8 @@ en:
view_dashboard_description: Allows users to access the dashboard and various metrics
view_devops: DevOps
view_devops_description: Allows users to access Sidekiq and pgHero dashboards
+ view_feeds: View live and topic feeds
+ view_feeds_description: Allows users to access the live and topic feeds regardless of server settings
title: Roles
rules:
add_new: Add rule
@@ -851,6 +853,7 @@ en:
feed_access:
modes:
authenticated: Authenticated users only
+ disabled: Require specific user role
public: Everyone
registrations:
moderation_recommandation: Please make sure you have an adequate and reactive moderation team before you open registrations to everyone!
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 2a8c98b194..008a72ecff 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -831,7 +831,6 @@ eo:
title: Defaŭltigi, ke uzantoj ne estu aŭtomate aldonitaj al la serĉilo-indekso sen sia konsento
discovery:
follow_recommendations: Sekvorekomendoj
- preamble: Interesa enhavo estas grava por novaj uzantoj kiuj eble ne konas ajn iun.
privacy: Privateco
profile_directory: Profilujo
public_timelines: Publikaj templinioj
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 3e3e32896c..a497d9cea9 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -837,7 +837,7 @@ es-MX:
title: Optar por los usuarios fuera de la indexación en los motores de búsqueda por defecto
discovery:
follow_recommendations: Recomendaciones de cuentas
- preamble: Exponer contenido interesante a la superficie es fundamental para incorporar nuevos usuarios que pueden no conocer a nadie Mastodon. Controla cómo funcionan varias opciones de descubrimiento en tu servidor.
+ preamble: Exponer contenido interesante es fundamental para incorporar nuevos usuarios que pueden no conocer a nadie en Mastodon. Controla cómo funcionan en tu servidor las diferentes opciones de descubrimiento.
privacy: Privacidad
profile_directory: Directorio de perfiles
public_timelines: Lineas de tiempo públicas
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 291a5f16aa..c62053637a 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -837,7 +837,7 @@ es:
title: Excluir por defecto a los usuarios de la indexación del motor de búsqueda
discovery:
follow_recommendations: Recomendaciones de cuentas
- preamble: Exponer contenido interesante a la superficie es fundamental para incorporar nuevos usuarios que pueden no conocer a nadie Mastodon. Controla cómo funcionan varias opciones de descubrimiento en tu servidor.
+ preamble: Exponer contenido interesante es fundamental para incorporar nuevos usuarios que pueden no conocer a nadie en Mastodon. Controla cómo funcionan en tu servidor las diferentes opciones de descubrimiento.
privacy: Privacidad
profile_directory: Directorio de perfiles
public_timelines: Lineas de tiempo públicas
diff --git a/config/locales/et.yml b/config/locales/et.yml
index e9b082ab93..63adff4c7c 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -837,7 +837,6 @@ et:
title: Otsimootorite indeksitesse kasutajaid vaikimisi ei lisata
discovery:
follow_recommendations: Jälgi soovitusi
- preamble: Huvitava sisu esiletoomine on oluline uute kasutajate kaasamisel, kes ei pruugi Mastodonist kedagi tunda. Kontrolli, kuidas erinevad avastamisfunktsioonid serveris töötavad.
privacy: Privaatsus
profile_directory: Kasutajate kataloog
public_timelines: Avalikud ajajooned
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 9e1fcc88a7..242bfa51ae 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -798,7 +798,6 @@ eu:
title: Erabiltzaileei bilaketa-motorraren indexaziotik at egoteko aukera ematen die lehenetsitako aukera modura
discovery:
follow_recommendations: Jarraitzeko gomendioak
- preamble: Eduki interesgarria aurkitzea garrantzitsua da Mastodoneko erabiltzaile berrientzat, behar bada inor ez dutelako ezagutuko. Kontrolatu zure zerbitzariko aurkikuntza-ezaugarriek nola funtzionatzen duten.
privacy: Pribatutasuna
profile_directory: Profil-direktorioa
public_timelines: Denbora-lerro publikoak
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index bfcb481589..92e305bcee 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -837,7 +837,6 @@ fa:
title: درخواست خروج از اندیسگذاری پیشگزیدهٔ موتور جستوجو
discovery:
follow_recommendations: پیروی از پیشنهادها
- preamble: ارائه محتوای جالب در جذب کاربران جدیدی که ممکن است کسی ماستودون را نشناسند، مفید است. نحوه عملکرد ویژگیهای کشف مختلف روی سرور خود را کنترل کنید.
privacy: محرمانگی
profile_directory: شاخهٔ نمایه
public_timelines: خط زمانیهای عمومی
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 9a5d8f9005..f52c34b082 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -837,7 +837,6 @@ fi:
title: Jätä käyttäjät oletusarvoisesti hakukoneindeksoinnin ulkopuolelle
discovery:
follow_recommendations: Seurantasuositukset
- preamble: Mielenkiintoisen sisällön esille tuominen auttaa saamaan uusia käyttäjiä, jotka eivät ehkä tunne ketään Mastodonista. Määrittele, kuinka erilaiset löytämisominaisuudet toimivat palvelimellasi.
privacy: Yksityisyys
profile_directory: Profiilihakemisto
public_timelines: Julkiset aikajanat
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 0ae44cf373..b27d53eea8 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -812,7 +812,6 @@ fr-CA:
title: Par défaut, ne pas indexer les comptes dans les moteurs de recherche
discovery:
follow_recommendations: Suivre les recommandations
- preamble: Faire apparaître un contenu intéressant est essentiel pour interagir avec de nouveaux utilisateurs qui ne connaissent peut-être personne sur Mastodonte. Contrôlez le fonctionnement des différentes fonctionnalités de découverte sur votre serveur.
profile_directory: Annuaire des profils
public_timelines: Fils publics
publish_statistics: Publier les statistiques
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 42e0507fe4..6b04aca1af 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -812,7 +812,6 @@ fr:
title: Par défaut, ne pas indexer les comptes dans les moteurs de recherche
discovery:
follow_recommendations: Suivre les recommandations
- preamble: Il est essentiel de donner de la visibilité à des contenus intéressants pour attirer des utilisateur⋅rice⋅s néophytes qui ne connaissent peut-être personne sur Mastodon. Contrôlez le fonctionnement des différentes fonctionnalités de découverte sur votre serveur.
profile_directory: Annuaire des profils
public_timelines: Fils publics
publish_statistics: Publier les statistiques
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index bad1e43f21..9c489c03ec 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -837,7 +837,6 @@ fy:
title: Brûkers standert net troch sykmasinen yndeksearje litte
discovery:
follow_recommendations: Oanrekommandearre accounts
- preamble: It toanen fan ynteressante ynhâld is fan essinsjeel belang foar it oan board heljen fan nije brûkers dy’t mooglik net ien fan Mastodon kinne. Bepaal hoe’t ferskate funksjes foar it ûntdekken fan ynhâld en brûkers op jo server wurkje.
privacy: Privacy
profile_directory: Profylmap
public_timelines: Iepenbiere tiidlinen
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index 401751ce5b..c6f103fb1c 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -879,7 +879,6 @@ ga:
title: Diúltaigh d'innéacsú inneall cuardaigh mar réamhshocrú d'úsáideoirí
discovery:
follow_recommendations: Lean na moltaí
- preamble: Tá sé ríthábhachtach dromchla a chur ar ábhar suimiúil chun úsáideoirí nua a chur ar bord nach bhfuil aithne acu ar dhuine ar bith Mastodon. Rialú conas a oibríonn gnéithe fionnachtana éagsúla ar do fhreastalaí.
privacy: Príobháideacht
profile_directory: Eolaire próifíle
public_timelines: Amlínte poiblí
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index 24b7cc58a1..a8ca7f48ef 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -865,7 +865,6 @@ gd:
title: Thoir air falbh ro-aonta nan cleachdaichean air inneacsadh le einnseanan-luirg mar a’ bhun-roghainn
discovery:
follow_recommendations: Molaidhean leantainn
- preamble: Tha tighinn an uachdar susbainte inntinniche fìor-chudromach airson toiseach-tòiseachaidh an luchd-cleachdaidh ùr nach eil eòlach air duine sam bith air Mastodon, ma dh’fhaoidte. Stiùirich mar a dh’obraicheas gleusan an rùrachaidh air an fhrithealaiche agad.
privacy: Prìobhaideachd
profile_directory: Eòlaire nam pròifil
public_timelines: Loidhnichean-ama poblach
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 67a175acdc..51c619b70a 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -837,7 +837,6 @@ hu:
title: Alapértelmezetten ne indexeljék a keresők a felhasználókat
discovery:
follow_recommendations: Ajánlottak követése
- preamble: Az érdekes tartalmak felszínre hozása fontos szerepet játszik az új felhasználók bevonásában, akik esetleg nem ismerik a Mastodont. Szabályozd, hogy a különböző felfedezési funkciók hogyan működjenek a kiszolgálón.
privacy: Adatvédelem
profile_directory: Profiladatbázis
public_timelines: Nyilvános idővonalak
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 08f40d5113..6918a93cc4 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -837,7 +837,6 @@ ia:
title: Excluder le usatores del indexation del motores de recerca per predefinition
discovery:
follow_recommendations: Recommendationes de contos a sequer
- preamble: Presentar contento interessante es essential pro attraher e retener nove usatores qui pote non cognoscer alcun persona sur Mastodon. Controla como varie optiones de discoperta functiona sur tu servitor.
privacy: Confidentialitate
profile_directory: Directorio de profilos
public_timelines: Chronologias public
diff --git a/config/locales/id.yml b/config/locales/id.yml
index 81fc590310..eea3637e33 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -670,7 +670,6 @@ id:
title: Keluarkan pengguna dari pengindeksan mesin telusur secara bawaan
discovery:
follow_recommendations: Ikuti rekomendasi
- preamble: Menampilkan konten menarik penting dalam memandu pengguna baru yang mungkin tidak tahu siapa pun di Mastodon. Atur bagaimana berbagai fitur penemuan bekerja di server Anda.
profile_directory: Direktori profil
public_timelines: Linimasa publik
title: Penemuan
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index ce219a9d68..f928948536 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -729,7 +729,6 @@ ie:
title: Predefinir que usatores ne apari in índexes de serchatores
discovery:
follow_recommendations: Seque-recomandationes
- preamble: Exposir interessant contenete es importantissim por incorporar nov usatores qui fórsan conosse nequi che Mastodon. Decider qualmen diferent utensiles de decovrition functiona che vor servitor.
profile_directory: Profilarium
public_timelines: Public témpor-lineas
publish_statistics: Publicar statisticas
diff --git a/config/locales/io.yml b/config/locales/io.yml
index eaca822f1a..924df63c7d 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -780,7 +780,6 @@ io:
title: Despartoprenigez uzanti de serchilo-indexi quale originala stando
discovery:
follow_recommendations: Sequez rekomendaji
- preamble: Montrar interesanta kontenajo esas importanta ye voligar nova uzanti quo forsan ne savas irgu. Dominacez quale ca deskovrotraiti funcionar en ca servilo.
profile_directory: Profiluyo
public_timelines: Publika tempolinei
publish_statistics: Publikar statistiki
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 9e7a2a15cb..782d7a261c 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -837,7 +837,6 @@ it:
title: Esclude gli utenti dall'indicizzazione dei motori di ricerca per impostazione predefinita
discovery:
follow_recommendations: Segui le raccomandazioni
- preamble: La comparsa di contenuti interessanti è determinante per l'arrivo di nuovi utenti che potrebbero non conoscere nessuno su Mastodon. Controlla in che modo varie funzionalità di scoperta funzionano sul tuo server.
privacy: Privacy
profile_directory: Directory del profilo
public_timelines: Timeline pubbliche
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 8feb830f0f..1ef3aef00c 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -816,7 +816,6 @@ ja:
title: デフォルトで検索エンジンによるインデックスを拒否する
discovery:
follow_recommendations: おすすめフォロー
- preamble: Mastodon を知らないユーザーを取り込むには、興味深いコンテンツを浮上させることが重要です。サーバー上で様々なディスカバリー機能がどのように機能するかを制御します。
privacy: プライバシー
profile_directory: ディレクトリ
public_timelines: 公開タイムライン
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 3402c5487e..e882368872 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -825,7 +825,6 @@ ko:
title: 사용자들이 기본적으로 검색엔진에 인덱싱되지 않도록 합니다
discovery:
follow_recommendations: 팔로우 추천
- preamble: 흥미로운 콘텐츠를 노출하는 것은 마스토돈을 알지 못할 수도 있는 신규 사용자를 유입시키는 데 중요합니다. 이 서버에서 작동하는 다양한 발견하기 기능을 제어합니다.
privacy: 개인정보
profile_directory: 프로필 책자
public_timelines: 공개 타임라인
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index 31a0a1cf18..a1b50a2bef 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -679,7 +679,6 @@ ku:
title: Pêlrêçkirna bikarhêneran ji motorê lêgerînê dûr bixe
discovery:
follow_recommendations: Pêşniyarên şopandinê
- preamble: Rûbirûbûna naveroka balkêş ji bo bikarhênerên nû yên ku li ser Mastodon kesek nas nakin pir bi bandor e. Kontrol bike ka çend taybetmendiyên vekolînê li ser rajekarê te çawa dixebite.
profile_directory: Rêgeha profîlê
public_timelines: Demnameya gelemperî
title: Vekolîne
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index df5188e5a3..5c982eff3d 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -796,7 +796,6 @@ lad:
title: Ekskluye utilizadores de la indeksasyon de los bushkadores komo preferensya predeterminada
discovery:
follow_recommendations: Rekomendasyones de kuentos
- preamble: Ekspone kontenido enteresante a la superfisie es fundamental para inkorporar muevos utilizadores ke pueden no koneser a dinguno Mastodon. Kontrola komo fonksionan varias opsiones de diskuvrimiento en tu sirvidor.
privacy: Privasita
profile_directory: Katalogo de profiles
public_timelines: Linyas de tiempo publikas
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index d3fc9e1849..40078ed326 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -832,7 +832,6 @@ lv:
title: Pēc noklusējuma lietotāji būs atteikušies no meklētājprogrammu indeksēšanas
discovery:
follow_recommendations: Sekotšanas rekomendācijas
- preamble: Interesanta satura parādīšana palīdz piesaistīt jaunus lietotājus, kuri, iespējams, nepazīst nevienu Mastodon. Kontrolē, kā tavā serverī darbojas dažādi atklāšanas līdzekļi.
privacy: Konfidencialitāte
profile_directory: Profila direktorija
public_timelines: Publiskās ziņu lentas
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index dc3c9c36a9..76d7bd4d20 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -714,7 +714,6 @@ ms:
title: Tarik pengguna keluar daripada pengindeksan enjin carian secara lalai
discovery:
follow_recommendations: Ikut cadangan
- preamble: Memaparkan kandungan yang menarik adalah penting dalam memasukkan pengguna baharu yang mungkin tidak mengenali sesiapa Mastodon. Kawal cara pelbagai ciri penemuan berfungsi pada server anda.
profile_directory: Direktori profil
public_timelines: Garis masa awam
publish_statistics: Terbitkan statistik
diff --git a/config/locales/my.yml b/config/locales/my.yml
index bdf051ca6e..687c350f3e 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -709,7 +709,6 @@ my:
title: ပုံမှန်အားဖြင့် ရှာဖွေမှုအညွှန်းကိန်းမှ သုံးစွဲသူများကို ဖယ်ထုတ်ပါ
discovery:
follow_recommendations: အကြံပြုချက်များကို စောင့်ကြည့်ပါ
- preamble: စိတ်ဝင်စားစရာကောင်းသော အကြောင်းအရာများပြထားခြင်းမှာ Mastodon ကို မသိသေးသော သုံးစွဲသူအသစ်များအတွက် အရေးပါပါသည်။ သင့်ဆာဗာတွင် မည်သည့်ရှာဖွေတွေ့ရှိမှုအကြောင်းအရာများ ပြထားမည်ကို ထိန်းချုပ်ပါ။
profile_directory: ပရိုဖိုင်လမ်းညွှန်
public_timelines: အများမြင်စာမျက်နှာ
publish_statistics: စာရင်းဇယားထုတ်ပြန်မည်
diff --git a/config/locales/nan.yml b/config/locales/nan.yml
index 19d9f8390c..53a3602350 100644
--- a/config/locales/nan.yml
+++ b/config/locales/nan.yml
@@ -823,7 +823,6 @@ nan:
title: 預設kā用者tuì tshiau-tshuē ia̋n-jín ê索引排除
discovery:
follow_recommendations: 跟tuè建議
- preamble: Kā心適ê內容浮現出來,ē當幫tsān tī Mastodon頂siáng lóng可能m̄知ê新手。控制tsē-tsē發現lí ê服侍器ê特色作品ê功能án-nuá運作。
privacy: 隱私權
profile_directory: 個人資料ê目錄
public_timelines: 公共ê時間線
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 68f76a44a7..0a5bcd6b7b 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -837,7 +837,6 @@ nl:
title: Gebruikers standaard niet door zoekmachines laten indexeren
discovery:
follow_recommendations: Aanbevolen accounts
- preamble: Het tonen van interessante inhoud is van essentieel belang voor het aan boord halen van nieuwe gebruikers, die mogelijk niemand van Mastodon kennen. Bepaal hoe verschillende functies voor het ontdekken van inhoud en gebruikers op jouw server werken.
privacy: Privacy
profile_directory: Gebruikersgids
public_timelines: Openbare tijdlijnen
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index 614b0aa8dd..c3e37405c5 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -837,7 +837,7 @@ nn:
title: Ikkje la brukarar indekserast av søkjemotorar som standard
discovery:
follow_recommendations: Fylgjeforslag
- preamble: Å framheva interessant innhald er vitalt i mottakinga av nye brukarar som ikkje nødvendigvis kjenner nokon på Mastodon. Kontroller korleis oppdagingsfunksjonane på tenaren din fungerar.
+ preamble: Å framheva interessant innhald er viktig for å ta imot nye brukarar som ikkje nødvendigvis kjenner nokon på Mastodon. Kontroller korleis oppdagingsfunksjonane på tenaren din fungerer.
privacy: Personvern
profile_directory: Profilkatalog
public_timelines: Offentlege tidsliner
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 72cbad788e..f627c93184 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -729,7 +729,6 @@
title: Ikke la brukere indekseres av søkemotorer som standard
discovery:
follow_recommendations: Følg anbefalinger
- preamble: Å fremheve interessant innhold er viktig i ombordstigning av nye brukere som kanskje ikke kjenner noen Mastodon. Kontroller hvordan ulike oppdagelsesfunksjoner fungerer på serveren.
profile_directory: Profilkatalog
public_timelines: Offentlige tidslinjer
publish_statistics: Publiser statistikk
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 418d908f8c..d1aec7bef9 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -849,7 +849,6 @@ pl:
title: Domyślnie żądaj nieindeksowania użytkowników przez wyszukiwarki
discovery:
follow_recommendations: Polecane konta
- preamble: Prezentowanie interesujących treści ma kluczowe znaczenie dla nowych użytkowników, którzy mogą nie znać nikogo z Mastodona. Kontroluj, jak różne funkcje odkrywania działają na Twoim serwerze.
privacy: Prywatność
profile_directory: Katalog profilów
public_timelines: Publiczne osie czasu
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 5af8275951..615432f170 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -837,7 +837,6 @@ pt-BR:
title: Optar por excluir usuários da indexação de mecanismos de pesquisa por padrão
discovery:
follow_recommendations: Seguir recomendações
- preamble: Navegar por um conteúdo interessante é fundamental para integrar novos usuários que podem não conhecer ninguém no Mastodon. Controle como várias características de descoberta funcionam no seu servidor.
privacy: Privacidade
profile_directory: Diretório de perfis
public_timelines: Timelines públicas
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 4e7178354b..b2e802300b 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -837,7 +837,7 @@ pt-PT:
title: Desativar, por omissão, a indexação de utilizadores por parte dos motores de pesquisa
discovery:
follow_recommendations: Recomendações de contas
- preamble: Revelar conteúdos interessantes é fundamental para a entrada de novos utilizadores que podem não conhecer ninguém no Mastodon. Controla como os vários recursos de descoberta funcionam no teu servidor.
+ preamble: Apresentar conteúdos interessantes é fundamental para atrair novos utilizadores que talvez não conheçam ninguém no Mastodon. Controle como várias funcionalidades de descoberta funcionam no seu servidor.
privacy: Privacidade
profile_directory: Diretório de perfis
public_timelines: Cronologias públicas
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 12c7395579..7ea9083c8f 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -851,7 +851,6 @@ ru:
title: Исключить пользователей из индексации поисковиками по умолчанию
discovery:
follow_recommendations: Рекомендации подписок
- preamble: Наблюдение интересного контента играет важную роль при открытии новых пользователей, которые могут не знать ни одного Mastodon. Контролируйте как работают различные функции обнаружения на вашем сервере.
privacy: Конфиденциальность
profile_directory: Каталог профилей
public_timelines: Публичные ленты
diff --git a/config/locales/sco.yml b/config/locales/sco.yml
index f90c7e692c..777bd10ef9 100644
--- a/config/locales/sco.yml
+++ b/config/locales/sco.yml
@@ -672,7 +672,6 @@ sco:
title: Content retention
discovery:
follow_recommendations: Follae recommendations
- preamble: Bringin forret interestin content helps ye tae bring in new uisers thit mibbie wullnae ken oniebody on Mastodon yit. Control hou various discovery features wirk on yer server.
profile_directory: Profile directory
public_timelines: Public timelines
title: Discovery
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 3b957a1569..e77132a884 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -812,7 +812,6 @@ sl:
title: Privzeto izvzemi uporabnike iz indeksiranja iskalnika
discovery:
follow_recommendations: Sledi priporočilom
- preamble: Izpostavljanje zanimivih vsebin je ključno za pridobivanje novih uporabnikov, ki morda ne poznajo nikogar na Mastodonu. Nadzirajte, kako različne funkcionalnosti razkritja delujejo na vašem strežniku.
profile_directory: Imenik profilov
public_timelines: Javne časovnice
publish_statistics: Objavi statistiko
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 1a8d9a91ab..967087a6e3 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -831,7 +831,7 @@ sq:
title: Lëri, si parazgjedhje, përdoruesit jashtë indeksimi nga motorë kërkimesh
discovery:
follow_recommendations: Rekomandime ndjekjeje
- preamble: Shpërfaqja e lëndës interesante është me rëndësi kyçe për mirëseardhjen e përdoruesve të rinj që mund të mos njohin njeri në Mastodon. Kontrolloni se si funksionojnë në shërbyesin tuaj veçori të ndryshme zbulimi.
+ preamble: Shpërfaqja e lëndës interesante është me rëndësi për mirëseardhjen e përdoruesve të rinj, të cilët mund të mos njohin njeri në Mastodon. Kontrolloni se funksionojnë në shërbyesin tuaj veçori të ndryshme zbulimi lënde.
privacy: Privatësi
profile_directory: Drejtori profilesh
public_timelines: Rrjedha kohore publike
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 9f422b058b..7d75fe3bd1 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -745,7 +745,6 @@ sr-Latn:
title: Podrazumevano isključi korisnike iz indeksiranja pretraživača
discovery:
follow_recommendations: Preporuke za praćenje
- preamble: Održavanje zanimljivih sadržaja na površini je ključno u privlačenju novih korisnika koji možda ne znaju nikoga na Mastodon-u. Kontrolišite kako različiti načini istraživanja funkcionišu na vašem serveru.
profile_directory: Direktorijum profilâ
public_timelines: Javne vremenske linije
publish_statistics: Objavi statistiku
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index b8d3ad1fc1..25b3728186 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -775,7 +775,6 @@ sr:
title: Подразумевано искључи кориснике из индексирања претраживача
discovery:
follow_recommendations: Препоруке за праћење
- preamble: Одржавање занимљивих садржаја на површини је кључно у привлачењу нових корисника који можда не знају никога на Mastodon-у. Контролишите како различити начини истраживања функционишу на вашем серверу.
profile_directory: Директоријум профилâ
public_timelines: Јавне временске линије
publish_statistics: Објави статистику
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index df222cf147..ad1e36bc86 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -837,7 +837,6 @@ sv:
title: Undantag användare från sökmotorindexering som standard
discovery:
follow_recommendations: Följrekommendationer
- preamble: Att visa intressant innehåll är avgörande i onboarding av nya användare som kanske inte känner någon på Mastodon. Styr hur olika upptäcktsfunktioner fungerar på din server.
privacy: Integritet
profile_directory: Profilkatalog
public_timelines: Offentliga tidslinjer
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 46236daa91..202e2c0035 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -782,7 +782,6 @@ th:
title: เลือกให้ผู้ใช้ไม่รับการทำดัชนีโดยเครื่องมือค้นหาเป็นค่าเริ่มต้น
discovery:
follow_recommendations: คำแนะนำการติดตาม
- preamble: การแสดงเนื้อหาที่น่าสนใจเป็นเครื่องมือในการเตรียมความพร้อมให้ผู้ใช้ใหม่ที่อาจไม่รู้จักใครก็ตามใน Mastodon ควบคุมวิธีที่คุณลักษณะการค้นพบต่าง ๆ ทำงานในเซิร์ฟเวอร์ของคุณ
privacy: ความเป็นส่วนตัว
profile_directory: ไดเรกทอรีโปรไฟล์
public_timelines: เส้นเวลาสาธารณะ
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index 1d667b9eab..bd94e9da3f 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -825,7 +825,6 @@ uk:
title: Усталено відмовитись від індексації користувачів пошуковими системами
discovery:
follow_recommendations: Поради щодо підписок
- preamble: Показ цікавих матеріалів відіграє важливу роль у залученні нових користувачів, які, можливо, не знають нікого з Mastodon. Контролюйте роботу різних функцій виявлення на вашому сервері.
privacy: Конфіденційність
profile_directory: Каталог профілів
public_timelines: Публічна стрічка
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 6df758f92a..d26030cda6 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -823,7 +823,7 @@ vi:
title: Mặc định người dùng không xuất hiện trong công cụ tìm kiếm
discovery:
follow_recommendations: Gợi ý theo dõi
- preamble: Hiển thị nội dung thú vị là công cụ để thu hút người dùng mới, những người có thể không quen bất kỳ ai trong Mastodon. Kiểm soát cách các tính năng khám phá hoạt động trên máy chủ của bạn.
+ preamble: Hiển thị nội dung thú vị là công cụ để thu hút người dùng mới, những người có thể không quen bất kỳ ai trên Mastodon. Kiểm soát cách các tính năng khám phá hoạt động trên máy chủ của bạn.
privacy: Riêng tư
profile_directory: Danh bạ
public_timelines: Bảng tin
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index b914738902..8245d9716b 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -823,7 +823,7 @@ zh-CN:
title: 默认不让用户被搜索引擎索引
discovery:
follow_recommendations: 关注推荐
- preamble: 露出有趣的内容有助于新加入 Mastodon 的用户融入。可在这里控制多种发现功能如何在你的服务器上工作。
+ preamble: 展示有趣的内容有助于新加入 Mastodon 的用户融入。可在这里控制多种发现功能如何在你的服务器上工作。
privacy: 隐私
profile_directory: 个人资料目录
public_timelines: 公共时间线
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index 6045808fee..d565d3604c 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -736,7 +736,6 @@ zh-HK:
title: 預設用戶不在搜尋引擎索引之內
discovery:
follow_recommendations: 追蹤建議
- preamble: 呈現有趣的內容有助於吸引不認識 Mastodon 的使用者新手上路。控制各種探索功能在你的伺服器上的運作方式。
privacy: 私隱
profile_directory: 個人檔案目錄
public_timelines: 公共時間軸
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 2c8ebb07ae..dbb53085cb 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -825,7 +825,7 @@ zh-TW:
title: 預設將使用者排除於搜尋引擎索引
discovery:
follow_recommendations: 跟隨建議
- preamble: 呈現有趣的內容有助於 Mastodon 上一人不識的新手上路。控制各種不同的分類於您伺服器上如何被探索到。
+ preamble: 呈現有趣的內容有助於 Mastodon 上一人不識的新手上路。控制您伺服器上各類探索功能之運作方式。
privacy: 隱私權
profile_directory: 個人檔案目錄
public_timelines: 公開時間軸
diff --git a/config/roles.yml b/config/roles.yml
index f443250d17..33d2635f4d 100644
--- a/config/roles.yml
+++ b/config/roles.yml
@@ -4,6 +4,7 @@ moderator:
permissions:
- view_dashboard
- view_audit_log
+ - view_feeds
- manage_users
- manage_reports
- manage_taxonomies
diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb
index 81aaf88585..ce4c966087 100644
--- a/spec/models/export_spec.rb
+++ b/spec/models/export_spec.rb
@@ -14,15 +14,20 @@ RSpec.describe Export do
end
describe '#to_bookmarks_csv' do
- before { Fabricate.times(2, :bookmark, account: account) }
-
+ let!(:bookmark) { Fabricate(:bookmark, account: account) }
let(:export) { CSV.parse(subject.to_bookmarks_csv) }
+ let!(:second_bookmark) { Fabricate(:bookmark, account: account) }
+ let!(:bookmark_of_soft_deleted) { Fabricate(:bookmark, account: account) }
+
+ before do
+ bookmark_of_soft_deleted.status.discard
+ end
it 'returns a csv of bookmarks' do
expect(export)
.to contain_exactly(
- include(/statuses/),
- include(/statuses/)
+ [ActivityPub::TagManager.instance.uri_for(bookmark.status)],
+ [ActivityPub::TagManager.instance.uri_for(second_bookmark.status)]
)
end
end
diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb
index 5f2444dc6b..db422c67d4 100644
--- a/spec/models/public_feed_spec.rb
+++ b/spec/models/public_feed_spec.rb
@@ -5,6 +5,11 @@ require 'rails_helper'
RSpec.describe PublicFeed do
let(:account) { Fabricate(:account) }
+ before do
+ Setting.local_live_feed_access = 'public'
+ Setting.remote_live_feed_access = 'public'
+ end
+
describe '#get' do
subject { described_class.new(nil).get(20).map(&:id) }
@@ -264,5 +269,320 @@ RSpec.describe PublicFeed do
end
end
end
+
+ context 'when both local_live_feed_access and remote_live_feed_access are disabled' do
+ before do
+ Setting.local_live_feed_access = 'disabled'
+ Setting.remote_live_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'includes all expected statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(viewer, local: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(viewer, remote: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'includes remote statuses only' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
+
+ context 'when local_live_feed_access is disabled' do
+ before do
+ Setting.local_live_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(viewer, local: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(viewer, remote: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
+
+ context 'when remote_live_feed_access is disabled' do
+ before do
+ Setting.remote_live_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+
+ it 'is not affected by personal domain blocks' do
+ viewer.block_domain!('test.com')
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(viewer, local: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+
+ it 'is not affected by personal domain blocks' do
+ viewer.block_domain!('test.com')
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(viewer, remote: true).get(20).map(&:id) }
+
+ let!(:local_account) { Fabricate(:account, domain: nil) }
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { Fabricate(:status, account: local_account) }
+ let!(:remote_status) { Fabricate(:status, account: remote_account) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
end
end
diff --git a/spec/models/tag_feed_spec.rb b/spec/models/tag_feed_spec.rb
index 939b9f3e82..c4abe079e6 100644
--- a/spec/models/tag_feed_spec.rb
+++ b/spec/models/tag_feed_spec.rb
@@ -3,6 +3,11 @@
require 'rails_helper'
RSpec.describe TagFeed do
+ before do
+ Setting.local_topic_feed_access = 'public'
+ Setting.remote_topic_feed_access = 'public'
+ end
+
describe '#get' do
let(:account) { Fabricate(:account) }
let(:tag_cats) { Fabricate(:tag, name: 'cats') }
@@ -80,5 +85,311 @@ RSpec.describe TagFeed do
expect(results).to include(status)
end
end
+
+ context 'when both local_topic_feed_access and remote_topic_feed_access are disabled' do
+ before do
+ Setting.local_topic_feed_access = 'disabled'
+ Setting.remote_topic_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(tag_cats, viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'includes all expected statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(tag_cats, viewer, local: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(tag_cats, viewer, remote: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'includes remote statuses only' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
+
+ context 'when local_topic_feed_access is disabled' do
+ before do
+ Setting.local_topic_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(tag_cats, viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(tag_cats, viewer, local: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(tag_cats, viewer, remote: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
+
+ context 'when remote_topic_feed_access is disabled' do
+ before do
+ Setting.remote_topic_feed_access = 'disabled'
+ end
+
+ context 'without local_only option' do
+ subject { described_class.new(tag_cats, viewer).get(20).map(&:id) }
+
+ let(:viewer) { nil }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+
+ it 'is not affected by personal domain blocks' do
+ viewer.block_domain!('test.com')
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a local_only option set' do
+ subject { described_class.new(tag_cats, viewer, local: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'does not include remote instances statuses' do
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+
+ it 'is not affected by personal domain blocks' do
+ viewer.block_domain!('test.com')
+ expect(subject).to include(local_status.id)
+ expect(subject).to_not include(remote_status.id)
+ end
+ end
+ end
+
+ context 'with a remote_only option set' do
+ subject { described_class.new(tag_cats, viewer, remote: true).get(20).map(&:id) }
+
+ let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
+ let!(:local_status) { status_tagged_with_cats }
+ let!(:remote_status) { Fabricate(:status, account: remote_account, tags: [tag_cats]) }
+
+ context 'without a viewer' do
+ let(:viewer) { nil }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a viewer' do
+ let(:viewer) { Fabricate(:account, username: 'viewer') }
+
+ it 'returns an empty list' do
+ expect(subject).to be_empty
+ end
+ end
+
+ context 'with a moderator as viewer' do
+ let(:viewer) { Fabricate(:moderator_user).account }
+
+ it 'does not include local instances statuses' do
+ expect(subject).to_not include(local_status.id)
+ expect(subject).to include(remote_status.id)
+ end
+ end
+ end
+ end
end
end
diff --git a/yarn.lock b/yarn.lock
index 84b3f5d079..62b938b581 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -13944,8 +13944,8 @@ __metadata:
linkType: hard
"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.1.1":
- version: 7.1.11
- resolution: "vite@npm:7.1.11"
+ version: 7.1.12
+ resolution: "vite@npm:7.1.12"
dependencies:
esbuild: "npm:^0.25.0"
fdir: "npm:^6.5.0"
@@ -13994,7 +13994,7 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: 10c0/c4aa7f47b1fb07f734ed6f4f605d73e5acf7ff9754d75b4adbfbdddf0e520413019834620c1f7b4a207bce7e1d20a2636c584db2b1b17f5a3ba2cd23d47e50ab
+ checksum: 10c0/cef4d4b4a84e663e09b858964af36e916892ac8540068df42a05ced637ceeae5e9ef71c72d54f3cfc1f3c254af16634230e221b6e2327c2a66d794bb49203262
languageName: node
linkType: hard