Removed public/community timeline for non-admins

• Removed:
- public/community timeline for non-admins
- links to the page
- web sockets for the page
This commit is contained in:
mgabdev 2020-06-19 15:42:13 -04:00
parent b9bf84994f
commit 7ad7fe06bd
11 changed files with 2 additions and 100 deletions

View File

@ -2,6 +2,7 @@
class Api::V1::Timelines::PublicController < Api::BaseController
before_action :require_user!, only: [:show]
before_action :require_admin!
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
respond_to :json

View File

@ -51,7 +51,6 @@ export function connectTimelineStream (timelineId, path, pollingRefresh = null,
}
export const connectUserStream = () => connectTimelineStream('home', 'user');
export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`);
export const connectHashtagStream = (id, tag, accept) => connectTimelineStream(`hashtag:${id}`, `hashtag&tag=${tag}`, null, accept);
export const connectListStream = id => connectTimelineStream(`list:${id}`, `list&list=${id}`);
export const connectGroupStream = id => connectTimelineStream(`group:${id}`, `group&group=${id}`);

View File

@ -164,11 +164,6 @@ class Sidebar extends ImmutablePureComponent {
]
const exploreItems = [
{
title: 'All',
icon: 'community',
to: '/timeline/all',
},
{
title: 'Chat',
icon: 'chat',

View File

@ -130,12 +130,6 @@ class SidebarXS extends ImmutablePureComponent {
onClick: this.handleSidebarClose,
title: intl.formatMessage(messages.preferences),
},
{
icon: 'community',
to: '/timeline/all',
onClick: this.handleSidebarClose,
title: 'All'
},
{
icon: 'list',
to: '/lists',

View File

@ -1,6 +1,5 @@
import { defineMessages, injectIntl } from 'react-intl'
import { expandCommunityTimeline } from '../actions/timelines'
import { connectCommunityStream } from '../actions/streaming'
import StatusList from '../components/status_list'
const messages = defineMessages({
@ -30,24 +29,13 @@ class CommunityTimeline extends PureComponent {
const { dispatch, onlyMedia } = this.props
dispatch(expandCommunityTimeline({ onlyMedia }))
this.disconnect = dispatch(connectCommunityStream({ onlyMedia }))
}
componentDidUpdate (prevProps) {
if (prevProps.onlyMedia !== this.props.onlyMedia) {
const { dispatch, onlyMedia } = this.props
this.disconnect()
dispatch(expandCommunityTimeline({ onlyMedia }))
this.disconnect = dispatch(connectCommunityStream({ onlyMedia }))
}
}
componentWillUnmount () {
if (this.disconnect) {
this.disconnect()
this.disconnect = null
}
}

View File

@ -8,8 +8,6 @@ import WhoToFollowPanel from '../components/panel/who_to_follow_panel'
import ProgressPanel from '../components/panel/progress_panel'
import TrendsPanel from '../components/panel/trends_panel'
import DefaultLayout from '../layouts/default_layout'
import TimelineComposeBlock from '../components/timeline_compose_block'
import Divider from '../components/divider'
const messages = defineMessages({
community: { 'id': 'column.community', 'defaultMessage': 'Community feed' },
@ -57,8 +55,6 @@ class CommunityPage extends PureComponent {
)}
>
<PageTitle path={title} />
<TimelineComposeBlock autoFocus={false} />
<Divider />
{children}
</DefaultLayout>
)

View File

@ -342,7 +342,7 @@ class Status < ApplicationRecord
end
def as_public_timeline(account = nil)
query = timeline_scope.without_replies.where('statuses.updated_at > ?', 30.minutes.ago)
query = timeline_scope.without_replies
apply_timeline_filters(query, account)
end

View File

@ -87,14 +87,6 @@ class BatchedRemoveStatusService < BaseService
payload = @json_payloads[status.id]
redis.pipelined do
redis.publish('timeline:public', payload)
redis.publish('timeline:public:local', payload) if status.local?
if status.media_attachments.any?
redis.publish('timeline:public:media', payload)
redis.publish('timeline:public:local:media', payload) if status.local?
end
@tags[status.id].each do |hashtag|
redis.publish("timeline:hashtag:#{hashtag}", payload)
redis.publish("timeline:hashtag:#{hashtag}:local", payload) if status.local?

View File

@ -24,9 +24,6 @@ class FanOutOnWriteService < BaseService
deliver_to_hashtags(status)
return if status.reply? && status.in_reply_to_account_id != status.account_id
deliver_to_public(status)
deliver_to_media(status) if status.media_attachments.any?
end
private
@ -98,20 +95,6 @@ class FanOutOnWriteService < BaseService
end
end
def deliver_to_public(status)
Rails.logger.debug "Delivering status #{status.id} to public timeline"
Redis.current.publish('timeline:public', @payload)
Redis.current.publish('timeline:public:local', @payload) if status.local?
end
def deliver_to_media(status)
Rails.logger.debug "Delivering status #{status.id} to media timeline"
Redis.current.publish('timeline:public:media', @payload)
Redis.current.publish('timeline:public:local:media', @payload) if status.local?
end
def deliver_to_own_conversation(status)
AccountConversation.add_status(status.account, status)
end

View File

@ -22,8 +22,6 @@ class RemoveStatusService < BaseService
remove_from_affected
remove_reblogs
remove_from_hashtags
remove_from_public
remove_from_media if status.media_attachments.any?
@status.destroy!
else
@ -145,20 +143,6 @@ class RemoveStatusService < BaseService
end
end
def remove_from_public
return unless @status.public_visibility?
redis.publish('timeline:public', @payload)
redis.publish('timeline:public:local', @payload) if @status.local?
end
def remove_from_media
return unless @status.public_visibility?
redis.publish('timeline:public:media', @payload)
redis.publish('timeline:public:local:media', @payload) if @status.local?
end
def lock_options
{ redis: Redis.current, key: "distribute:#{@status.id}" }
end

View File

@ -267,10 +267,6 @@ const startWorker = (workerId) => {
};
const PUBLIC_STREAMS = [
'public',
'public:media',
'public:local',
'public:local:media',
'hashtag',
'hashtag:local',
];
@ -548,20 +544,6 @@ const startWorker = (workerId) => {
streamFrom(`timeline:${req.accountId}`, req, streamToHttp(req, res), streamHttpEnd(req), false, true);
});
app.get('/api/v1/streaming/public', (req, res) => {
const onlyMedia = req.query.only_media === '1' || req.query.only_media === 'true';
const channel = onlyMedia ? 'timeline:public:media' : 'timeline:public';
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req), true);
});
app.get('/api/v1/streaming/public/local', (req, res) => {
const onlyMedia = req.query.only_media === '1' || req.query.only_media === 'true';
const channel = onlyMedia ? 'timeline:public:local:media' : 'timeline:public:local';
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req), true);
});
app.get('/api/v1/streaming/direct', (req, res) => {
const channel = `timeline:direct:${req.accountId}`;
streamFrom(channel, req, streamToHttp(req, res), streamHttpEnd(req, subscriptionHeartbeat(channel)), true);
@ -624,18 +606,6 @@ const startWorker = (workerId) => {
case 'user:notification':
streamFrom(`timeline:${req.accountId}`, req, streamToWs(req, ws), streamWsEnd(req, ws), false, true);
break;
case 'public':
streamFrom('timeline:public', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'public:local':
streamFrom('timeline:public:local', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'public:media':
streamFrom('timeline:public:media', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'public:local:media':
streamFrom('timeline:public:local:media', req, streamToWs(req, ws), streamWsEnd(req, ws), true);
break;
case 'direct':
channel = `timeline:direct:${req.accountId}`;
streamFrom(channel, req, streamToWs(req, ws), streamWsEnd(req, ws, subscriptionHeartbeat(channel)), true);