diff --git a/app/controllers/api/v1/timelines/public_controller.rb b/app/controllers/api/v1/timelines/public_controller.rb index dc42f9b9..a6d1e8ee 100644 --- a/app/controllers/api/v1/timelines/public_controller.rb +++ b/app/controllers/api/v1/timelines/public_controller.rb @@ -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 diff --git a/app/javascript/gabsocial/actions/streaming.js b/app/javascript/gabsocial/actions/streaming.js index 55e0ff4e..8b57cb2c 100644 --- a/app/javascript/gabsocial/actions/streaming.js +++ b/app/javascript/gabsocial/actions/streaming.js @@ -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}`); diff --git a/app/javascript/gabsocial/components/sidebar.js b/app/javascript/gabsocial/components/sidebar.js index 9ea39a12..769bc64d 100644 --- a/app/javascript/gabsocial/components/sidebar.js +++ b/app/javascript/gabsocial/components/sidebar.js @@ -164,11 +164,6 @@ class Sidebar extends ImmutablePureComponent { ] const exploreItems = [ - { - title: 'All', - icon: 'community', - to: '/timeline/all', - }, { title: 'Chat', icon: 'chat', diff --git a/app/javascript/gabsocial/components/sidebar_xs.js b/app/javascript/gabsocial/components/sidebar_xs.js index b3315885..a8949a97 100644 --- a/app/javascript/gabsocial/components/sidebar_xs.js +++ b/app/javascript/gabsocial/components/sidebar_xs.js @@ -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', diff --git a/app/javascript/gabsocial/features/community_timeline.js b/app/javascript/gabsocial/features/community_timeline.js index 8cf6d65c..31a5da45 100644 --- a/app/javascript/gabsocial/features/community_timeline.js +++ b/app/javascript/gabsocial/features/community_timeline.js @@ -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 } } diff --git a/app/javascript/gabsocial/pages/community_page.js b/app/javascript/gabsocial/pages/community_page.js index b11bfa13..50483ac5 100644 --- a/app/javascript/gabsocial/pages/community_page.js +++ b/app/javascript/gabsocial/pages/community_page.js @@ -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 { )} > - - {children} ) diff --git a/app/models/status.rb b/app/models/status.rb index 855e17d8..1f66138f 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -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 diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb index e328b173..85a2f036 100644 --- a/app/services/batched_remove_status_service.rb +++ b/app/services/batched_remove_status_service.rb @@ -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? diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 1e561e62..63c517ca 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -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 diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index f0fb5df9..61d56400 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -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 diff --git a/streaming/index.js b/streaming/index.js index 08471d10..94bea582 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -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);