diff --git a/internal_packages/notifications/lib/headers/connection-status-header.jsx b/internal_packages/notifications/lib/headers/connection-status-header.jsx index c6b915f6d..9675ecb42 100644 --- a/internal_packages/notifications/lib/headers/connection-status-header.jsx +++ b/internal_packages/notifications/lib/headers/connection-status-header.jsx @@ -47,8 +47,13 @@ export default class ConnectionStatusHeader extends React.Component { } getStateFromStores() { + const nextRetryDelay = NylasSyncStatusStore.nextRetryDelay(); const nextRetryTimestamp = NylasSyncStatusStore.nextRetryTimestamp(); - const connected = NylasSyncStatusStore.connected(); + let connected = NylasSyncStatusStore.connected(); + + if (nextRetryDelay < 5000) { + connected = true; + } let nextRetryText = null; if (!connected) { diff --git a/internal_packages/notifications/lib/sidebar/initial-sync-activity.cjsx b/internal_packages/notifications/lib/sidebar/initial-sync-activity.cjsx index b0a95ee61..e7187e43d 100644 --- a/internal_packages/notifications/lib/sidebar/initial-sync-activity.cjsx +++ b/internal_packages/notifications/lib/sidebar/initial-sync-activity.cjsx @@ -27,12 +27,10 @@ class InitialSyncActivity extends React.Component fetched = 0 totalProgress = 0 incomplete = 0 - error = null for acctId, state of @state.sync for model, modelState of state incomplete += 1 unless modelState.complete - error ?= modelState.error if modelState.count count += modelState.count / 1 fetched += modelState.fetched / 1 @@ -45,13 +43,6 @@ class InitialSyncActivity extends React.Component if incomplete is 0 return false - else if error -
-
An error occurred while syncing your mailbox. Sync will resume in a moment… -
Try Again Now
-
- {@_expandedSyncState()} -
else
@setState expandedSync: !@state.expandedSync}> {@_renderProgressBar(totalProgress)} diff --git a/internal_packages/notifications/stylesheets/notifications.less b/internal_packages/notifications/stylesheets/notifications.less index cccfab416..562b3806c 100644 --- a/internal_packages/notifications/stylesheets/notifications.less +++ b/internal_packages/notifications/stylesheets/notifications.less @@ -136,7 +136,7 @@ background-color: #615396; } .notification-error { - background-color: @background-color-error; + background: linear-gradient(to top, darken(@background-color-error, 4%) 0%, @background-color-error 100%); border-color: @background-color-error; color: @color-error; } @@ -144,7 +144,7 @@ border-color: @background-color-success; } .notification-offline { - background-color: #CC9900; + background: linear-gradient(to top, darken(#CC9900, 4%) 0%, #CC9900 100%); border-color: darken(#CC9900, 5%); } @@ -152,7 +152,6 @@ display:flex; font-size: @font-size-base; color:@text-color-inverse; - border-top:1px solid rgba(0,0,0,0.25); border-bottom:1px solid rgba(0,0,0,0.25); padding-left: @padding-base-horizontal; line-height: @line-height-base * 1.5; @@ -213,12 +212,3 @@ body.platform-win32 { } } } - -// Activity Error Header - -.account-error-header.notifications-sticky { - .notifications-sticky-item { - background-color: initial; - background: linear-gradient(to top, #ca2541 0%, #d55268 100%); - } -} diff --git a/internal_packages/worker-sync/lib/nylas-sync-worker.coffee b/internal_packages/worker-sync/lib/nylas-sync-worker.coffee index fbe34d8c4..94fc7c2f9 100644 --- a/internal_packages/worker-sync/lib/nylas-sync-worker.coffee +++ b/internal_packages/worker-sync/lib/nylas-sync-worker.coffee @@ -18,7 +18,7 @@ class BackoffTimer @_timeout = null backoff: => - @_delay = Math.min(@_delay * 1.4, 5 * 1000 * 60) # Cap at 5 minutes + @_delay = Math.min(@_delay * 1.7, 5 * 1000 * 60) # Cap at 5 minutes if not NylasEnv.inSpecMode() console.log("Backing off after sync failure. Will retry in #{Math.floor(@_delay / 1000)} seconds.") @@ -30,7 +30,7 @@ class BackoffTimer , @_delay resetDelay: => - @_delay = 20 * 1000 + @_delay = 2 * 1000 getCurrentDelay: => @_delay @@ -277,7 +277,8 @@ class NylasSyncWorker _backoff: => @_resumeTimer.backoff() @_resumeTimer.start() - @_state.nextRetryTimestamp = Date.now() + @_resumeTimer.getCurrentDelay() + @_state.nextRetryDelay = @_resumeTimer.getCurrentDelay() + @_state.nextRetryTimestamp = Date.now() + @_state.nextRetryDelay updateTransferState: (model, updatedKeys) -> @_state[model] = _.extend(@_state[model], updatedKeys) diff --git a/src/flux/nylas-api.coffee b/src/flux/nylas-api.coffee index b5ccdca2f..2cc3b3cfb 100644 --- a/src/flux/nylas-api.coffee +++ b/src/flux/nylas-api.coffee @@ -256,7 +256,7 @@ class NylasAPI type: 'error' tag: '401' sticky: true - message: "Action failed: There was an error syncing with #{email}. You + message: "An mailbox action for #{email} could not be completed. You may not be able to send or receive mail.", icon: 'fa-sign-out' actions: [{ diff --git a/src/flux/stores/nylas-sync-status-store.coffee b/src/flux/stores/nylas-sync-status-store.coffee index 80addb2f7..90154f925 100644 --- a/src/flux/stores/nylas-sync-status-store.coffee +++ b/src/flux/stores/nylas-sync-status-store.coffee @@ -86,4 +86,9 @@ class NylasSyncStatusStore extends NylasStore state.nextRetryTimestamp _.compact(retryDates).sort((a, b) => a < b).pop() + nextRetryDelay: => + retryDelays = _.values(@_statesByAccount).map (state) -> + state.nextRetryDelay + _.compact(retryDelays).sort((a, b) => a < b).pop() + module.exports = new NylasSyncStatusStore() diff --git a/static/variables/ui-variables.less b/static/variables/ui-variables.less index 6ea6e109f..2353314e6 100644 --- a/static/variables/ui-variables.less +++ b/static/variables/ui-variables.less @@ -217,7 +217,7 @@ rgba(253,253,253,0.75) 100%); @background-color-info: @blue-light; @background-color-success: #00ac6f; @background-color-warning: #ff4800; -@background-color-error: #f15f4b; +@background-color-error: #ca2541; @background-color-pending: #b4babd; //== Menus