commit: 0128b86d3098042cdbc3a1629f74b70f665f8dfb
parent: 0370ba7b0a18d41f688269370d0eb089261047a9
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 13 Dec 2017 02:12:41 +0100
Use streaming API for standalone timelines on /about and /tag pages (#5998)
Diffstat:
3 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/app/javascript/mastodon/features/standalone/hashtag_timeline/index.js b/app/javascript/mastodon/features/standalone/hashtag_timeline/index.js
@@ -8,6 +8,7 @@ import {
} from '../../../actions/timelines';
import Column from '../../../components/column';
import ColumnHeader from '../../../components/column_header';
+import { connectHashtagStream } from '../../../actions/streaming';
@connect()
export default class HashtagTimeline extends React.PureComponent {
@@ -29,16 +30,13 @@ export default class HashtagTimeline extends React.PureComponent {
const { dispatch, hashtag } = this.props;
dispatch(refreshHashtagTimeline(hashtag));
-
- this.polling = setInterval(() => {
- dispatch(refreshHashtagTimeline(hashtag));
- }, 10000);
+ this.disconnect = dispatch(connectHashtagStream(hashtag));
}
componentWillUnmount () {
- if (typeof this.polling !== 'undefined') {
- clearInterval(this.polling);
- this.polling = null;
+ if (this.disconnect) {
+ this.disconnect();
+ this.disconnect = null;
}
}
diff --git a/app/javascript/mastodon/features/standalone/public_timeline/index.js b/app/javascript/mastodon/features/standalone/public_timeline/index.js
@@ -9,6 +9,7 @@ import {
import Column from '../../../components/column';
import ColumnHeader from '../../../components/column_header';
import { defineMessages, injectIntl } from 'react-intl';
+import { connectPublicStream } from '../../../actions/streaming';
const messages = defineMessages({
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
@@ -35,16 +36,13 @@ export default class PublicTimeline extends React.PureComponent {
const { dispatch } = this.props;
dispatch(refreshPublicTimeline());
-
- this.polling = setInterval(() => {
- dispatch(refreshPublicTimeline());
- }, 3000);
+ this.disconnect = dispatch(connectPublicStream());
}
componentWillUnmount () {
- if (typeof this.polling !== 'undefined') {
- clearInterval(this.polling);
- this.polling = null;
+ if (this.disconnect) {
+ this.disconnect();
+ this.disconnect = null;
}
}
diff --git a/app/javascript/mastodon/stream.js b/app/javascript/mastodon/stream.js
@@ -62,7 +62,13 @@ export function connectStream(path, pollingRefresh = null, callbacks = () => ({
export default function getStream(streamingAPIBaseURL, accessToken, stream, { connected, received, disconnected, reconnected }) {
- const ws = new WebSocketClient(`${streamingAPIBaseURL}/api/v1/streaming/?access_token=${accessToken}&stream=${stream}`);
+ const params = [ `stream=${stream}` ];
+
+ if (accessToken !== null) {
+ params.push(`access_token=${accessToken}`);
+ }
+
+ const ws = new WebSocketClient(`${streamingAPIBaseURL}/api/v1/streaming/?${params.join('&')}`);
ws.onopen = connected;
ws.onmessage = e => received(JSON.parse(e.data));