The code powering m.abunchtell.com https://m.abunchtell.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

57 lines
2.2 KiB

  1. import { connectStream } from '../stream';
  2. import {
  3. updateTimeline,
  4. deleteFromTimelines,
  5. expandHomeTimeline,
  6. disconnectTimeline,
  7. } from './timelines';
  8. import { updateNotifications, expandNotifications } from './notifications';
  9. import { updateConversations } from './conversations';
  10. import { fetchFilters } from './filters';
  11. import { getLocale } from '../locales';
  12. const { messages } = getLocale();
  13. export function connectTimelineStream (timelineId, path, pollingRefresh = null) {
  14. return connectStream (path, pollingRefresh, (dispatch, getState) => {
  15. const locale = getState().getIn(['meta', 'locale']);
  16. return {
  17. onDisconnect() {
  18. dispatch(disconnectTimeline(timelineId));
  19. },
  20. onReceive (data) {
  21. switch(data.event) {
  22. case 'update':
  23. dispatch(updateTimeline(timelineId, JSON.parse(data.payload)));
  24. break;
  25. case 'delete':
  26. dispatch(deleteFromTimelines(data.payload));
  27. break;
  28. case 'notification':
  29. dispatch(updateNotifications(JSON.parse(data.payload), messages, locale));
  30. break;
  31. case 'conversation':
  32. dispatch(updateConversations(JSON.parse(data.payload)));
  33. break;
  34. case 'filters_changed':
  35. dispatch(fetchFilters());
  36. break;
  37. }
  38. },
  39. };
  40. });
  41. }
  42. const refreshHomeTimelineAndNotification = (dispatch, done) => {
  43. dispatch(expandHomeTimeline({}, () => dispatch(expandNotifications({}, done))));
  44. };
  45. export const connectUserStream = () => connectTimelineStream('home', 'user', refreshHomeTimelineAndNotification);
  46. export const connectCommunityStream = ({ onlyMedia } = {}) => connectTimelineStream(`community${onlyMedia ? ':media' : ''}`, `public:local${onlyMedia ? ':media' : ''}`);
  47. export const connectPublicStream = ({ onlyMedia } = {}) => connectTimelineStream(`public${onlyMedia ? ':media' : ''}`, `public${onlyMedia ? ':media' : ''}`);
  48. export const connectHashtagStream = tag => connectTimelineStream(`hashtag:${tag}`, `hashtag&tag=${tag}`);
  49. export const connectDirectStream = () => connectTimelineStream('direct', 'direct');
  50. export const connectListStream = id => connectTimelineStream(`list:${id}`, `list&list=${id}`);