diff -r 34a75bd8d0b9 -r d48946d164c6 client/src/sagas/syncSaga.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/sagas/syncSaga.js Fri Jul 28 19:40:35 2017 +0200 @@ -0,0 +1,41 @@ +import { put, take, all, select } from 'redux-saga/effects' +import * as types from '../constants/actionTypes'; +import { getLastSync } from './selectors'; +import moment from 'moment'; +import { endSynchronize, updateLastSync } from '../actions/syncActions'; +import SessionSynchronizer from './SessionSyncronizer'; +import NoteSynchronizer from './NoteSyncronizer'; + + +function* watchSync(context) { + while (true) { + yield take(types.SYNC_DO_SYNC); + const lastSync = yield select(getLastSync); + + + //const sessions = yield context.client.get('/api/notes/sessions/', {modified_since: lastSync}); + const nextLastSync = moment().unix() + + // TODO: manage errors + try { + const syncObjects = yield context.client.get('/api/notes/sync/', { modified_since: lastSync }); + + const sessionSynchronizer = new SessionSynchronizer(syncObjects.sessions, context.client); + yield sessionSynchronizer.syncObjects(); + + const noteSynchronizer = new NoteSynchronizer(syncObjects.notes, context.client); + yield noteSynchronizer.syncObjects(); + + yield put(updateLastSync(nextLastSync)); + } finally { + yield put(endSynchronize()); + } + } +} + +//--- The root saga +export default function* rootSaga(context) { + yield all([ + watchSync(context) + ]); +}