[Glitch] Fix local streaming of hashtag timelines
Port 3a1a21ad57 to glitch-soc
Signed-off-by: Thibaut Girka <thib@sitedethib.com>
			
			
This commit is contained in:
		
							parent
							
								
									ef6bfaf12e
								
							
						
					
					
						commit
						44ea965557
					
				| 
						 | 
				
			
			@ -74,6 +74,6 @@ const refreshHomeTimelineAndNotification = (dispatch, done) => {
 | 
			
		|||
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, accept) => connectTimelineStream(`hashtag:${id}`, `hashtag&tag=${tag}`, null, accept);
 | 
			
		||||
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}`);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -129,7 +129,7 @@ export const expandAccountFeaturedTimeline = accountId => expandTimeline(`accoun
 | 
			
		|||
export const expandAccountMediaTimeline    = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
 | 
			
		||||
export const expandListTimeline            = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
 | 
			
		||||
export const expandHashtagTimeline         = (hashtag, { maxId, tags, local } = {}, done = noOp) => {
 | 
			
		||||
  return expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`, {
 | 
			
		||||
  return expandTimeline(`hashtag:${hashtag}${local ? ':local' : ''}`, `/api/v1/timelines/tag/${hashtag}`, {
 | 
			
		||||
    max_id: maxId,
 | 
			
		||||
    any: parseTags(tags, 'any'),
 | 
			
		||||
    all: parseTags(tags, 'all'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ import { connectHashtagStream } from 'flavours/glitch/actions/streaming';
 | 
			
		|||
import { isEqual } from 'lodash';
 | 
			
		||||
 | 
			
		||||
const mapStateToProps = (state, props) => ({
 | 
			
		||||
  hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0,
 | 
			
		||||
  hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}${props.params.local ? ':local' : ''}`, 'unread']) > 0,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default @connect(mapStateToProps)
 | 
			
		||||
| 
						 | 
				
			
			@ -75,13 +75,13 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		|||
    this.column.scrollTop();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _subscribe (dispatch, id, tags = {}) {
 | 
			
		||||
  _subscribe (dispatch, id, tags = {}, local) {
 | 
			
		||||
    let any  = (tags.any || []).map(tag => tag.value);
 | 
			
		||||
    let all  = (tags.all || []).map(tag => tag.value);
 | 
			
		||||
    let none = (tags.none || []).map(tag => tag.value);
 | 
			
		||||
 | 
			
		||||
    [id, ...any].map(tag => {
 | 
			
		||||
      this.disconnects.push(dispatch(connectHashtagStream(id, tag, status => {
 | 
			
		||||
      this.disconnects.push(dispatch(connectHashtagStream(id, tag, local, status => {
 | 
			
		||||
        let tags = status.tags.map(tag => tag.name);
 | 
			
		||||
 | 
			
		||||
        return all.filter(tag => tags.includes(tag)).length === all.length &&
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		|||
    const { dispatch } = this.props;
 | 
			
		||||
    const { id, tags, local } = this.props.params;
 | 
			
		||||
 | 
			
		||||
    this._subscribe(dispatch, id, tags);
 | 
			
		||||
    this._subscribe(dispatch, id, tags, local);
 | 
			
		||||
    dispatch(expandHashtagTimeline(id, { tags, local }));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -109,8 +109,8 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		|||
 | 
			
		||||
    if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) {
 | 
			
		||||
      this._unsubscribe();
 | 
			
		||||
      this._subscribe(dispatch, id, tags);
 | 
			
		||||
      dispatch(clearTimeline(`hashtag:${id}`));
 | 
			
		||||
      this._subscribe(dispatch, id, tags, local);
 | 
			
		||||
      dispatch(clearTimeline(`hashtag:${id}${local ? ':local' : ''}`));
 | 
			
		||||
      dispatch(expandHashtagTimeline(id, { tags, local }));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		|||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { hasUnread, columnId, multiColumn } = this.props;
 | 
			
		||||
    const { id } = this.props.params;
 | 
			
		||||
    const { id,  local } = this.props.params;
 | 
			
		||||
    const pinned = !!columnId;
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
| 
						 | 
				
			
			@ -153,7 +153,7 @@ class HashtagTimeline extends React.PureComponent {
 | 
			
		|||
        <StatusListContainer
 | 
			
		||||
          trackScroll={!pinned}
 | 
			
		||||
          scrollKey={`hashtag_timeline-${columnId}`}
 | 
			
		||||
          timelineId={`hashtag:${id}`}
 | 
			
		||||
          timelineId={`hashtag:${id}${local ? ':local' : ''}`}
 | 
			
		||||
          onLoadMore={this.handleLoadMore}
 | 
			
		||||
          emptyMessage={<FormattedMessage id='empty_column.hashtag' defaultMessage='There is nothing in this hashtag yet.' />}
 | 
			
		||||
          bindToDocument={!multiColumn}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue