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()
}