diff --git a/spec-nylas/tasks/syncback-draft-spec.coffee b/spec-nylas/tasks/syncback-draft-spec.coffee index fe9cdb0af..a400bd777 100644 --- a/spec-nylas/tasks/syncback-draft-spec.coffee +++ b/spec-nylas/tasks/syncback-draft-spec.coffee @@ -7,6 +7,7 @@ Message = require '../../src/flux/models/message' Account = require '../../src/flux/models/account' Contact = require '../../src/flux/models/contact' {APIError} = require '../../src/flux/errors' +AccountStore = require '../../src/flux/stores/account-store' DatabaseStore = require '../../src/flux/stores/database-store' TaskQueue = require '../../src/flux/stores/task-queue' @@ -30,10 +31,10 @@ remoteDraft = -> new Message _.extend {}, testData, {clientId: "local-id", serve describe "SyncbackDraftTask", -> beforeEach -> - spyOn(DatabaseStore, "run").andCallFake (query) -> - if query._klass is Account - return Promise.resolve(new Account(clientId: 'local-abc123', serverId: 'abc123')) + spyOn(AccountStore, "itemWithEmailAddress").andCallFake (email) -> + return new Account(clientId: 'local-abc123', serverId: 'abc123') + spyOn(DatabaseStore, "run").andCallFake (query) -> clientId = query.matcherValueForModelKey('clientId') if clientId is "localDraftId" then Promise.resolve(localDraft()) else if clientId is "remoteDraftId" then Promise.resolve(remoteDraft()) diff --git a/src/flux/stores/account-store.coffee b/src/flux/stores/account-store.coffee index b266eff2c..af7753580 100644 --- a/src/flux/stores/account-store.coffee +++ b/src/flux/stores/account-store.coffee @@ -1,5 +1,6 @@ Actions = require '../actions' Account = require '../models/account' +Utils = require '../models/utils' DatabaseStore = require './database-store' _ = require 'underscore' @@ -87,6 +88,11 @@ class AccountStore items: => @_accounts + # Public: Returns the {Account} for the given email address, or null. + itemWithEmailAddress: (email) => + _.find @_accounts, (account) -> + Utils.emailIsEquivalent(email, account.emailAddress) + # Public: Returns the currently active {Account}. current: => @_accounts[@_index] || null diff --git a/src/flux/tasks/syncback-draft.coffee b/src/flux/tasks/syncback-draft.coffee index 65bddaf3c..d1b71f41d 100644 --- a/src/flux/tasks/syncback-draft.coffee +++ b/src/flux/tasks/syncback-draft.coffee @@ -1,6 +1,7 @@ _ = require 'underscore' Actions = require '../actions' +AccountStore = require '../stores/account-store' DatabaseStore = require '../stores/database-store' TaskQueueStatusStore = require '../stores/task-queue-status-store' NylasAPI = require '../nylas-api' @@ -102,18 +103,17 @@ class SyncbackDraftTask extends Task DatabaseStore.findBy(Message, clientId: @draftClientId).include(Message.attributes.body) checkDraftFromMatchesAccount: (draft) -> - DatabaseStore.findBy(Account, [Account.attributes.emailAddress.equal(draft.from[0].email)]).then (account) => - promise = Promise.resolve(draft) - - if draft.accountId isnt account.id - DestroyDraftTask = require './destroy-draft' - destroy = new DestroyDraftTask(draftId: existingAccountDraft.id) - promise = TaskQueueStatusStore.waitForPerformLocal(destroy).then => - @detatchFromRemoteID(existingAccountDraft, acct.id).then (newAccountDraft) => - Promise.resolve(newAccountDraft) - Actions.queueTask(destroy) - - promise + account = AccountStore.itemWithEmailAddress(draft.from[0].email) + if draft.accountId is account.id + return Promise.resolve(draft) + else + DestroyDraftTask = require './destroy-draft' + destroy = new DestroyDraftTask(draftId: existingAccountDraft.id) + promise = TaskQueueStatusStore.waitForPerformLocal(destroy).then => + @detatchFromRemoteID(existingAccountDraft, acct.id).then (newAccountDraft) => + Promise.resolve(newAccountDraft) + Actions.queueTask(destroy) + return promise detatchFromRemoteID: (draft, newAccountId = null) -> return Promise.resolve() unless draft