From 65a60f2d96989f8ebc1e0f52e4c1db0a3b72369e Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Mon, 2 May 2016 17:36:23 -0700 Subject: [PATCH] fix(tracking): Calling Actions.setMetadata from applyTransforms no longer works --- src/flux/stores/draft-store.coffee | 47 ++++++++++++++++-------------- src/pro | 2 +- src/window-event-handler.coffee | 9 ++++-- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/flux/stores/draft-store.coffee b/src/flux/stores/draft-store.coffee index a39686565..a27ee6379 100644 --- a/src/flux/stores/draft-store.coffee +++ b/src/flux/stores/draft-store.coffee @@ -381,31 +381,34 @@ class DraftStore # Run draft transformations registered by third-party plugins allowedFields = ['to', 'from', 'cc', 'bcc', 'subject', 'body'] - Promise.each @extensions(), (ext) -> - extApply = ext.applyTransformsToDraft - extUnapply = ext.unapplyTransformsToDraft - unless extApply and extUnapply - return Promise.resolve() - + session.changes.commit(noSyncback: true).then => 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)) - 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.")) - session.changes.add(_.pick(transformed, allowedFields)) + Promise.each @extensions(), (ext) -> + extApply = ext.applyTransformsToDraft + extUnapply = ext.unapplyTransformsToDraft + unless extApply and extUnapply + return Promise.resolve() - .then => - session.changes.commit(noSyncback: true) + 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)) + 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}) => @sessionForClientId(messageClientId).then (session) -> diff --git a/src/pro b/src/pro index 1c66da339..ec04ee3f5 160000 --- a/src/pro +++ b/src/pro @@ -1 +1 @@ -Subproject commit 1c66da339a724a1562354e07433170033f5c8638 +Subproject commit ec04ee3f59272cfa5de87ff465b2e675eafa19ad diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index 2b9be507b..b5700f6a1 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -42,12 +42,12 @@ class WindowEventHandler ipcRenderer.on '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 # throttled in case more work needs to be done before closing return @runUnloadCallbacks() - window.addEventListener 'unload', => + window.onunload = => NylasEnv.storeWindowDimensions() NylasEnv.saveStateAndUnloadWindow() @@ -108,10 +108,12 @@ class WindowEventHandler @unloadCallbacks.push(callback) runUnloadCallbacks: -> + hasReturned = false + unloadCallbacksRunning = 0 unloadCallbackComplete = => unloadCallbacksRunning -= 1 - if unloadCallbacksRunning is 0 + if unloadCallbacksRunning is 0 and hasReturned @runUnloadFinished() 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 # In Electron, returning false cancels the close. + hasReturned = true return (unloadCallbacksRunning is 0) runUnloadFinished: ->