diff options
| author | Roger Braun <roger@rogerbraun.net> | 2016-10-26 19:03:55 +0200 |
|---|---|---|
| committer | Roger Braun <roger@rogerbraun.net> | 2016-10-26 19:03:55 +0200 |
| commit | 4c2764c747f1480ee7752e43357663f3c321f571 (patch) | |
| tree | e5bab6fc4abfd03c626d6d9d07dbac089ab7a151 /src/services/timeline_fetcher | |
| parent | 191c02af1ebfc7e6c53dc88d97c4e3ca23fbea8b (diff) | |
.
Diffstat (limited to 'src/services/timeline_fetcher')
| l--------- | src/services/timeline_fetcher/.#timeline_fetcher.service.js | 1 | ||||
| -rw-r--r-- | src/services/timeline_fetcher/timeline_fetcher.service.js | 53 |
2 files changed, 54 insertions, 0 deletions
diff --git a/src/services/timeline_fetcher/.#timeline_fetcher.service.js b/src/services/timeline_fetcher/.#timeline_fetcher.service.js new file mode 120000 index 00000000..8315cdae --- /dev/null +++ b/src/services/timeline_fetcher/.#timeline_fetcher.service.js @@ -0,0 +1 @@ +roger@yuuyuu.18961
\ No newline at end of file diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js new file mode 100644 index 00000000..9013c82e --- /dev/null +++ b/src/services/timeline_fetcher/timeline_fetcher.service.js @@ -0,0 +1,53 @@ +import { upperFirst, camelCase } from 'lodash'; + +const timelineFetcherServiceFactory = ($ngRedux, apiService, $interval) => { + let fetcher; + + const update = ({statuses, timeline, showImmediately}) => { + const ccTimeline = camelCase(timeline); + + const action = { + type: 'ADD_NEW_STATUSES', + data: { + statuses, + timeline: ccTimeline, + showImmediately + } + }; + + $ngRedux.dispatch(action); + $ngRedux.dispatch({type: 'UPDATE_TIMESTAMPS'}); + }; + + const fetchAndUpdate = ({timeline = 'friends', older = false, showImmediately = false}) => { + const args = { timeline }; + const timelineData = $ngRedux.getState().statuses.timelines[camelCase(timeline)]; + + if(older) { + args['until'] = timelineData.minVisibleId; + } else { + args['since'] = timelineData.maxId; + } + + apiService.fetchTimeline(args). + then((statuses) => update({statuses, timeline, showImmediately})); + }; + + const startFetching = ({timeline = 'friends'}) => { + fetchAndUpdate({timeline, showImmediately: true}); + + const boundFetchAndUpdate = () => fetchAndUpdate({timeline}); + fetcher = $interval(boundFetchAndUpdate, 10000); + }; + + const timelineFetcherService = { + startFetching, + fetchAndUpdate + }; + + return timelineFetcherService; +}; + +timelineFetcherServiceFactory.$inject = ['$ngRedux', 'apiService', '$interval']; + +export default timelineFetcherServiceFactory; |
