diff --git a/packages/local-sync/src/local-api/routes/auth.js b/packages/local-sync/src/local-api/routes/auth.js index 609b97118..53d8d256d 100644 --- a/packages/local-sync/src/local-api/routes/auth.js +++ b/packages/local-sync/src/local-api/routes/auth.js @@ -55,16 +55,13 @@ const buildAccountWith = ({name, email, provider, settings, credentials}) => { account.setCredentials(credentials); return account.save().then((saved) => - AccountToken.create({accountId: saved.id}).then((token) => - LocalDatabaseConnector.ensureAccountDatabase(saved.id).then(() => { - SyncProcessManager.addWorkerForAccount(saved); - - return Promise.resolve({ - account: saved, - token: token, - }); - }) - ) + AccountToken.create({accountId: saved.id}).then((token) => { + SyncProcessManager.addWorkerForAccount(saved); + return Promise.resolve({ + account: saved, + token: token, + }); + }) ); }); }); diff --git a/packages/local-sync/src/local-sync-dashboard/root.jsx b/packages/local-sync/src/local-sync-dashboard/root.jsx index c96d11a2c..0106d1657 100644 --- a/packages/local-sync/src/local-sync-dashboard/root.jsx +++ b/packages/local-sync/src/local-sync-dashboard/root.jsx @@ -45,7 +45,13 @@ class AccountCard extends React.Component { SyncProcessManager.wakeWorkerForAccount(account); }); }) - }) + }); + } + + onResetSync = () => { + SyncProcessManager.removeWorkerForAccountId(this.props.account.id); + LocalDatabaseConnector.destroyAccountDatabase(this.props.account.id); + SyncProcessManager.addWorkerForAccount(this.props.account); } renderError() { @@ -89,6 +95,7 @@ class AccountCard extends React.Component { style={{top: `${position.top}px`, left: `${position.left}px`}} >

{account.emailAddress} [{account.id}]

+
First Sync Duration (sec): diff --git a/packages/local-sync/src/local-sync-worker/sync-process-manager.js b/packages/local-sync/src/local-sync-worker/sync-process-manager.js index 9e2346cbb..556ec62cb 100644 --- a/packages/local-sync/src/local-sync-worker/sync-process-manager.js +++ b/packages/local-sync/src/local-sync-worker/sync-process-manager.js @@ -50,15 +50,18 @@ class SyncProcessManager { } addWorkerForAccount(account) { - return LocalDatabaseConnector.forAccount(account.id).then((db) => { - if (this._workers[account.id]) { - return Promise.reject(new Error("Local worker already exists")); - } + return LocalDatabaseConnector.ensureAccountDatabase(account.id) + .then(() => { + return LocalDatabaseConnector.forAccount(account.id).then((db) => { + if (this._workers[account.id]) { + return Promise.reject(new Error("Local worker already exists")); + } - this._workers[account.id] = new SyncWorker(account, db, () => { - this.removeWorkerForAccountId(account.id) - }); - return Promise.resolve(); + this._workers[account.id] = new SyncWorker(account, db, () => { + this.removeWorkerForAccountId(account.id) + }); + return Promise.resolve(); + }) }) .then(() => { this._logger.info({account_id: account.id}, `ProcessManager: Claiming Account Succeeded`) @@ -69,6 +72,8 @@ class SyncProcessManager { } removeWorkerForAccountId(accountId) { + const worker = this._workers[accountId]; + worker.cleanup(); this._workers[accountId] = null; } diff --git a/packages/local-sync/src/shared/local-database-connector.js b/packages/local-sync/src/shared/local-database-connector.js index 8248aff06..7354f464f 100644 --- a/packages/local-sync/src/shared/local-database-connector.js +++ b/packages/local-sync/src/shared/local-database-connector.js @@ -60,7 +60,12 @@ class LocalDatabaseConnector { destroyAccountDatabase(accountId) { const dbname = `a-${accountId}`; - fs.removeFileSync(path.join(process.env.NYLAS_HOME, `${dbname}.sqlite`)); + fs.access(dbname, fs.F_OK, (err) => { + if (!err) { + fs.unlinkSync(path.join(process.env.NYLAS_HOME, `${dbname}.sqlite`)); + } + }); + return Promise.resolve() }