Mailspring/internal_packages/deltas/lib/delta-streaming-connection.es6
Evan Morikawa f2517ea7d7 refactor(name): rename worker-sync package to deltas
Summary:
This diff is a rename. No logical changes.

We used to have a set of files called `nylas-sync-worker`. In Old N1 these
used to have a lot of logic to slowly sync mail from our API. Since we
exclusively use local-sync via a soon-to-be-obsolesced delta stream, these
files really just manage the delta streaming connection.

It's incredibly confusing to have a set of files called worker-sync when
there's a sync-worker already in the codebase. This renames everything to
refer to them as account sync workers.

The reason I wanted this rename is because the IdentityStore on initial
launch triggers and fires a fairly scary-sounding
`Actions.refreshAllSyncWorkers()`. In reality all it does is
`Actions.refreshAllDeltaConnections()`. I'm also tired of staring at files
for a full minute before realizing that this is not the sync worker I was
  looking for.

Test Plan:
After rename, booted the app and ensured that deltas were coming through
for new mail and no errors were being thrown

Reviewers: halla, juan

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D3767
2017-01-25 10:08:23 -05:00

45 lines
1.1 KiB
JavaScript

import _ from 'underscore'
import {NylasLongConnection, DatabaseStore} from 'nylas-exports'
class DeltaStreamingConnection extends NylasLongConnection {
constructor(api, accountId, opts = {}) {
opts.throttleResultsInterval = 1000
opts.closeIfDataStopsInterval = 15 * 1000
super(api, accountId, opts)
const {getCursor, setCursor} = opts
this._getCursor = getCursor
this._setCursor = setCursor
// Update cursor when deltas received
this.onDeltas((deltas) => {
if (opts.onDeltas) opts.onDeltas(deltas);
const last = _.last(deltas)
this._setCursor(last.cursor)
})
}
_deltaStreamingPath(cursor) {
return `/delta/streaming?cursor=${cursor}`
}
onError(err) {
if (err.message.indexOf('Invalid cursor') > 0) {
const error = new Error('Delta Connection: Cursor is invalid. Need to blow away local cache.');
this._setCursor(0)
DatabaseStore._handleSetupError(error)
}
}
onDeltas(callback) {
return this.onResults(callback)
}
start() {
this._path = this._deltaStreamingPath(this._getCursor() || 0)
super.start()
}
}
export default DeltaStreamingConnection