mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-02-23 15:46:28 +08:00
fix(drafts): Fix syncback issue caused by bad Account database query
This commit is contained in:
parent
7702a115b0
commit
aa58743b38
3 changed files with 22 additions and 15 deletions
|
@ -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())
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
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)
|
||||
|
||||
promise
|
||||
return promise
|
||||
|
||||
detatchFromRemoteID: (draft, newAccountId = null) ->
|
||||
return Promise.resolve() unless draft
|
||||
|
|
Loading…
Reference in a new issue