2016-02-24 14:55:47 +08:00
|
|
|
import request from 'request';
|
2016-02-20 04:30:24 +08:00
|
|
|
import {ComponentRegistry, ExtensionRegistry, DatabaseStore, Message, Actions} from 'nylas-exports';
|
|
|
|
import OpenTrackingButton from './open-tracking-button';
|
|
|
|
import OpenTrackingIcon from './open-tracking-icon';
|
2016-02-24 07:22:55 +08:00
|
|
|
import OpenTrackingMessageStatus from './open-tracking-message-status';
|
2016-02-20 04:30:24 +08:00
|
|
|
import OpenTrackingComposerExtension from './open-tracking-composer-extension';
|
2016-02-24 14:55:47 +08:00
|
|
|
import {PLUGIN_ID, PLUGIN_URL} from './open-tracking-constants'
|
2016-02-20 04:30:24 +08:00
|
|
|
|
|
|
|
const post = Promise.promisify(request.post, {multiArgs: true});
|
2016-02-24 14:55:47 +08:00
|
|
|
|
2016-02-20 04:30:24 +08:00
|
|
|
|
|
|
|
function afterDraftSend({draftClientId}) {
|
|
|
|
// only run this handler in the main window
|
|
|
|
if (!NylasEnv.isMainWindow()) return;
|
|
|
|
|
|
|
|
// query for the message
|
|
|
|
DatabaseStore.findBy(Message, {clientId: draftClientId}).then((message) => {
|
|
|
|
// grab message metadata, if any
|
|
|
|
const metadata = message.metadataForPluginId(PLUGIN_ID);
|
|
|
|
|
|
|
|
// get the uid from the metadata, if present
|
|
|
|
if (metadata) {
|
|
|
|
const uid = metadata.uid;
|
|
|
|
|
|
|
|
// set metadata against the message
|
2016-02-24 10:51:05 +08:00
|
|
|
Actions.setMetadata(message, PLUGIN_ID, {open_count: 0, open_data: []});
|
2016-02-20 04:30:24 +08:00
|
|
|
|
|
|
|
// post the uid and message id pair to the plugin server
|
|
|
|
const data = {uid: uid, message_id: message.id, thread_id: 1};
|
2016-02-25 04:00:40 +08:00
|
|
|
const serverUrl = `${PLUGIN_URL}/plugins/register-message`;
|
2016-02-20 04:30:24 +08:00
|
|
|
return post({
|
|
|
|
url: serverUrl,
|
|
|
|
body: JSON.stringify(data),
|
|
|
|
}).then(([response, responseBody]) => {
|
|
|
|
if (response.statusCode !== 200) {
|
|
|
|
throw new Error();
|
|
|
|
}
|
|
|
|
return responseBody;
|
|
|
|
}).catch(error => {
|
|
|
|
NylasEnv.showErrorDialog("There was a problem contacting the Open Tracking server! This message will not have open tracking :(");
|
|
|
|
Promise.reject(error);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
export function activate() {
|
|
|
|
ComponentRegistry.register(OpenTrackingButton, {role: 'Composer:ActionButton'});
|
|
|
|
ComponentRegistry.register(OpenTrackingIcon, {role: 'ThreadListIcon'});
|
2016-02-24 07:22:55 +08:00
|
|
|
ComponentRegistry.register(OpenTrackingMessageStatus, {role: 'MessageHeaderStatus'});
|
2016-02-20 04:30:24 +08:00
|
|
|
ExtensionRegistry.Composer.register(OpenTrackingComposerExtension);
|
|
|
|
this._unlistenSendDraftSuccess = Actions.sendDraftSuccess.listen(afterDraftSend);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function serialize() {}
|
|
|
|
|
|
|
|
export function deactivate() {
|
|
|
|
ComponentRegistry.unregister(OpenTrackingButton);
|
|
|
|
ComponentRegistry.unregister(OpenTrackingIcon);
|
2016-02-24 17:04:57 +08:00
|
|
|
ComponentRegistry.unregister(OpenTrackingMessageStatus);
|
2016-02-20 04:30:24 +08:00
|
|
|
ExtensionRegistry.Composer.unregister(OpenTrackingComposerExtension);
|
|
|
|
this._unlistenSendDraftSuccess()
|
|
|
|
}
|