fix(tracking): Calling Actions.setMetadata from applyTransforms no longer works

This commit is contained in:
Ben Gotow 2016-05-02 17:36:23 -07:00
parent b9f39cd86e
commit 65a60f2d96
3 changed files with 32 additions and 26 deletions

View file

@ -381,31 +381,34 @@ class DraftStore
# Run draft transformations registered by third-party plugins # Run draft transformations registered by third-party plugins
allowedFields = ['to', 'from', 'cc', 'bcc', 'subject', 'body'] allowedFields = ['to', 'from', 'cc', 'bcc', 'subject', 'body']
Promise.each @extensions(), (ext) -> session.changes.commit(noSyncback: true).then =>
extApply = ext.applyTransformsToDraft
extUnapply = ext.unapplyTransformsToDraft
unless extApply and extUnapply
return Promise.resolve()
draft = session.draft().clone() draft = session.draft().clone()
Promise.resolve(extUnapply({draft})).then (cleaned) =>
cleaned = draft if cleaned is 'unnecessary'
Promise.resolve(extApply({draft: cleaned})).then (transformed) =>
Promise.resolve(extUnapply({draft: transformed.clone()})).then (untransformed) =>
untransformed = cleaned if untransformed is 'unnecessary'
if not _.isEqual(_.pick(untransformed, allowedFields), _.pick(cleaned, allowedFields)) Promise.each @extensions(), (ext) ->
console.log("-- BEFORE --") extApply = ext.applyTransformsToDraft
console.log(draft.body) extUnapply = ext.unapplyTransformsToDraft
console.log("-- TRANSFORMED --") unless extApply and extUnapply
console.log(transformed.body) return Promise.resolve()
console.log("-- UNTRANSFORMED (should match BEFORE) --")
console.log(untransformed.body)
NylasEnv.reportError(new Error("An extension applied a tranform to the draft that it could not reverse."))
session.changes.add(_.pick(transformed, allowedFields))
.then => Promise.resolve(extUnapply({draft})).then (cleaned) =>
session.changes.commit(noSyncback: true) cleaned = draft if cleaned is 'unnecessary'
Promise.resolve(extApply({draft: cleaned})).then (transformed) =>
Promise.resolve(extUnapply({draft: transformed.clone()})).then (untransformed) =>
untransformed = cleaned if untransformed is 'unnecessary'
if not _.isEqual(_.pick(untransformed, allowedFields), _.pick(cleaned, allowedFields))
console.log("-- BEFORE --")
console.log(draft.body)
console.log("-- TRANSFORMED --")
console.log(transformed.body)
console.log("-- UNTRANSFORMED (should match BEFORE) --")
console.log(untransformed.body)
NylasEnv.reportError(new Error("An extension applied a tranform to the draft that it could not reverse."))
draft = transformed
.then =>
DatabaseStore.inTransaction (t) =>
t.persistModel(draft)
_onRemoveFile: ({file, messageClientId}) => _onRemoveFile: ({file, messageClientId}) =>
@sessionForClientId(messageClientId).then (session) -> @sessionForClientId(messageClientId).then (session) ->

@ -1 +1 @@
Subproject commit 1c66da339a724a1562354e07433170033f5c8638 Subproject commit ec04ee3f59272cfa5de87ff465b2e675eafa19ad

View file

@ -42,12 +42,12 @@ class WindowEventHandler
ipcRenderer.on 'scroll-touch-end', -> ipcRenderer.on 'scroll-touch-end', ->
window.dispatchEvent(new Event('scroll-touch-end')) window.dispatchEvent(new Event('scroll-touch-end'))
window.addEventListener 'beforeunload', => window.onbeforeunload = =>
# Don't hide the window here if we don't want the renderer process to be # Don't hide the window here if we don't want the renderer process to be
# throttled in case more work needs to be done before closing # throttled in case more work needs to be done before closing
return @runUnloadCallbacks() return @runUnloadCallbacks()
window.addEventListener 'unload', => window.onunload = =>
NylasEnv.storeWindowDimensions() NylasEnv.storeWindowDimensions()
NylasEnv.saveStateAndUnloadWindow() NylasEnv.saveStateAndUnloadWindow()
@ -108,10 +108,12 @@ class WindowEventHandler
@unloadCallbacks.push(callback) @unloadCallbacks.push(callback)
runUnloadCallbacks: -> runUnloadCallbacks: ->
hasReturned = false
unloadCallbacksRunning = 0 unloadCallbacksRunning = 0
unloadCallbackComplete = => unloadCallbackComplete = =>
unloadCallbacksRunning -= 1 unloadCallbacksRunning -= 1
if unloadCallbacksRunning is 0 if unloadCallbacksRunning is 0 and hasReturned
@runUnloadFinished() @runUnloadFinished()
for callback in @unloadCallbacks for callback in @unloadCallbacks
@ -122,6 +124,7 @@ class WindowEventHandler
console.warn "You registered an `onBeforeUnload` callback that does not return either exactly `true` or `false`. It returned #{returnValue}", callback console.warn "You registered an `onBeforeUnload` callback that does not return either exactly `true` or `false`. It returned #{returnValue}", callback
# In Electron, returning false cancels the close. # In Electron, returning false cancels the close.
hasReturned = true
return (unloadCallbacksRunning is 0) return (unloadCallbacksRunning is 0)
runUnloadFinished: -> runUnloadFinished: ->