aboutsummaryrefslogtreecommitdiff
path: root/src/services/timeline_fetcher
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2016-10-26 19:03:55 +0200
committerRoger Braun <roger@rogerbraun.net>2016-10-26 19:03:55 +0200
commit4c2764c747f1480ee7752e43357663f3c321f571 (patch)
treee5bab6fc4abfd03c626d6d9d07dbac089ab7a151 /src/services/timeline_fetcher
parent191c02af1ebfc7e6c53dc88d97c4e3ca23fbea8b (diff)
.
Diffstat (limited to 'src/services/timeline_fetcher')
l---------src/services/timeline_fetcher/.#timeline_fetcher.service.js1
-rw-r--r--src/services/timeline_fetcher/timeline_fetcher.service.js53
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;