2017-09-07 07:19:48 +08:00
|
|
|
import {
|
|
|
|
Thread,
|
|
|
|
Message,
|
|
|
|
Actions,
|
|
|
|
DatabaseStore,
|
|
|
|
FeatureUsageStore,
|
|
|
|
SyncbackMetadataTask,
|
|
|
|
} from 'nylas-exports'
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
import {PLUGIN_ID} from './send-reminders-constants'
|
2017-09-07 07:19:48 +08:00
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
const FEATURE_LEXICON = {
|
|
|
|
usedUpHeader: "All Reminders Used",
|
|
|
|
usagePhrase: "add reminders to",
|
|
|
|
iconUrl: "mailspring://send-reminders/assets/ic-send-reminders-modal@2x.png",
|
|
|
|
};
|
2017-09-07 07:19:48 +08:00
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
export function reminderDateFor(draftOrThread) {
|
|
|
|
return ((draftOrThread && draftOrThread.metadataForPluginId(PLUGIN_ID)) || {}).expiration;
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
async function incrementMetadataUse(model, expiration) {
|
|
|
|
if (reminderDateFor(model)) {
|
|
|
|
return true;
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
2017-09-26 06:44:20 +08:00
|
|
|
try {
|
|
|
|
await FeatureUsageStore.asyncUseFeature(PLUGIN_ID, FEATURE_LEXICON)
|
|
|
|
} catch (error) {
|
|
|
|
if (error instanceof FeatureUsageStore.NoProAccessError) {
|
|
|
|
return false;
|
|
|
|
}
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
2017-09-26 06:44:20 +08:00
|
|
|
if (expiration) {
|
|
|
|
const seconds = Math.round(((new Date(expiration)).getTime() - Date.now()) / 1000)
|
|
|
|
Actions.recordUserEvent("Set Reminder", {
|
|
|
|
seconds: seconds,
|
|
|
|
secondsLog10: Math.log10(seconds),
|
|
|
|
});
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
2017-09-26 06:44:20 +08:00
|
|
|
return true;
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
export async function updateReminderMetadata(thread, {expiration, shouldNotify, sentHeaderMessageId, lastReplyTimestamp}) {
|
|
|
|
if (!await incrementMetadataUse(thread, expiration)) {
|
2017-09-07 07:19:48 +08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
Actions.queueTask(new SyncbackMetadataTask({
|
2017-09-26 06:44:20 +08:00
|
|
|
model: thread,
|
|
|
|
accountId: thread.accountId,
|
2017-09-07 07:19:48 +08:00
|
|
|
pluginId: PLUGIN_ID,
|
2017-09-26 06:44:20 +08:00
|
|
|
value: {expiration, shouldNotify, sentHeaderMessageId, lastReplyTimestamp},
|
2017-09-07 07:19:48 +08:00
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
export async function updateDraftReminderMetadata(draftSession, {expiration, sentHeaderMessageId}) {
|
|
|
|
if (!await incrementMetadataUse(draftSession.draft(), expiration)) {
|
|
|
|
return;
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
2017-09-26 06:44:20 +08:00
|
|
|
draftSession.changes.add({pristine: false})
|
|
|
|
draftSession.changes.addPluginMetadata(PLUGIN_ID, {expiration, sentHeaderMessageId});
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
export async function transferReminderMetadataFromDraftToThread(headerMessageId) {
|
|
|
|
const message = await DatabaseStore.findBy(Message, {headerMessageId})
|
|
|
|
if (!message) {
|
|
|
|
throw new Error("SendReminders: Could not find message to update")
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
|
|
|
|
2017-09-26 06:44:20 +08:00
|
|
|
const metadata = message.metadataForPluginId(PLUGIN_ID) || {}
|
|
|
|
if (!metadata || !metadata.expiration) {
|
|
|
|
return;
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|
2017-09-26 06:44:20 +08:00
|
|
|
|
|
|
|
const thread = await DatabaseStore.find(Thread, message.threadId);
|
|
|
|
updateReminderMetadata(thread, {
|
|
|
|
expiration: metadata.expiration,
|
|
|
|
sentHeaderMessageId: metadata.sentHeaderMessageId,
|
|
|
|
lastReplyTimestamp: new Date(thread.lastMessageReceivedTimestamp).getTime() / 1000,
|
|
|
|
shouldNotify: false,
|
|
|
|
});
|
2017-09-07 07:19:48 +08:00
|
|
|
}
|