Fix unnecessary second connection to user stream from account timeline in web UI (#14387)
Fix regression from #14212
This commit is contained in:
		| @ -71,10 +71,9 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => { | ||||
|       dispatch(fetchAnnouncements(done)))))); | ||||
| }; | ||||
|  | ||||
| export const connectUserStream         = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification); | ||||
| export const connectUserTimelineStream = (accountId) => connectTimelineStream(`account:${accountId}`, 'user'); | ||||
| export const connectCommunityStream    = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`); | ||||
| export const connectPublicStream       = ({ onlyMedia, onlyRemote } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`); | ||||
| export const connectHashtagStream      = (id, tag, local, accept) => connectTimelineStream(`hashtag:${id}${local ? ':local' : ''}`, `hashtag${local ? ':local' : ''}&tag=${tag}`, null, accept); | ||||
| export const connectDirectStream       = () => connectTimelineStream('direct', 'direct'); | ||||
| export const connectListStream         = id => connectTimelineStream(`list:${id}`, `list&list=${id}`); | ||||
| export const connectUserStream      = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification); | ||||
| export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`); | ||||
| export const connectPublicStream    = ({ onlyMedia, onlyRemote } = {}) => connectTimelineStream(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, `public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`); | ||||
| export const connectHashtagStream   = (id, tag, local, accept) => connectTimelineStream(`hashtag:${id}${local ? ':local' : ''}`, `hashtag${local ? ':local' : ''}&tag=${tag}`, null, accept); | ||||
| export const connectDirectStream    = () => connectTimelineStream('direct', 'direct'); | ||||
| export const connectListStream      = id => connectTimelineStream(`list:${id}`, `list&list=${id}`); | ||||
|  | ||||
| @ -16,7 +16,7 @@ import { fetchAccountIdentityProofs } from '../../actions/identity_proofs'; | ||||
| import MissingIndicator from 'mastodon/components/missing_indicator'; | ||||
| import TimelineHint from 'mastodon/components/timeline_hint'; | ||||
| import { me } from 'mastodon/initial_state'; | ||||
| import { connectUserTimelineStream } from '../../actions/streaming'; | ||||
| import { connectTimeline, disconnectTimeline } from 'mastodon/actions/timelines'; | ||||
|  | ||||
| const emptyList = ImmutableList(); | ||||
|  | ||||
| @ -63,41 +63,48 @@ class AccountTimeline extends ImmutablePureComponent { | ||||
|   }; | ||||
|  | ||||
|   componentWillMount () { | ||||
|     const { params: { accountId }, withReplies } = this.props; | ||||
|     const { params: { accountId }, withReplies, dispatch } = this.props; | ||||
|  | ||||
|     this.props.dispatch(fetchAccount(accountId)); | ||||
|     this.props.dispatch(fetchAccountIdentityProofs(accountId)); | ||||
|     dispatch(fetchAccount(accountId)); | ||||
|     dispatch(fetchAccountIdentityProofs(accountId)); | ||||
|  | ||||
|     if (!withReplies) { | ||||
|       this.props.dispatch(expandAccountFeaturedTimeline(accountId)); | ||||
|       dispatch(expandAccountFeaturedTimeline(accountId)); | ||||
|     } | ||||
|  | ||||
|     this.props.dispatch(expandAccountTimeline(accountId, { withReplies })); | ||||
|   } | ||||
|     dispatch(expandAccountTimeline(accountId, { withReplies })); | ||||
|  | ||||
|   componentDidMount () { | ||||
|     if (this.props.params.accountId === me) { | ||||
|       this.disconnect = this.props.dispatch(connectUserTimelineStream(me)); | ||||
|     if (accountId === me) { | ||||
|       dispatch(connectTimeline(`account:${me}`)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   componentWillReceiveProps (nextProps) { | ||||
|     const { dispatch } = this.props; | ||||
|  | ||||
|     if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) { | ||||
|       this.props.dispatch(fetchAccount(nextProps.params.accountId)); | ||||
|       this.props.dispatch(fetchAccountIdentityProofs(nextProps.params.accountId)); | ||||
|       dispatch(fetchAccount(nextProps.params.accountId)); | ||||
|       dispatch(fetchAccountIdentityProofs(nextProps.params.accountId)); | ||||
|  | ||||
|       if (!nextProps.withReplies) { | ||||
|         this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId)); | ||||
|         dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId)); | ||||
|       } | ||||
|  | ||||
|       this.props.dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies })); | ||||
|       dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies })); | ||||
|     } | ||||
|  | ||||
|     if (nextProps.params.accountId === me && this.props.params.accountId !== me) { | ||||
|       dispatch(connectTimeline(`account:${me}`)); | ||||
|     } else if (this.props.params.accountId === me && nextProps.params.accountId !== me) { | ||||
|       dispatch(disconnectTimeline(`account:${me}`)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   componentWillUnmount () { | ||||
|     if (this.disconnect) { | ||||
|       this.disconnect(); | ||||
|       this.disconnect = null; | ||||
|     const { dispatch, params: { accountId } } = this.props; | ||||
|  | ||||
|     if (accountId === me) { | ||||
|       dispatch(disconnectTimeline(`account:${me}`)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user