Restart button added to plugin update notifications

Summary:
Simple implementation of restart button on auto-update notifications. Should make the flow a bit more convenient.

Changelog: Added button "Restart Flipper" to plugin auto-update notifications.

Reviewed By: passy

Differential Revision: D22528729

fbshipit-source-id: 6da6b858baed1e0f3cae57f1a614907b61899d10
This commit is contained in:
Anton Nikolaev
2020-07-15 02:51:26 -07:00
committed by Facebook GitHub Bot
parent 6fe477f19b
commit 3e87715a8f

View File

@@ -146,63 +146,71 @@ export default (store: Store, logger: Logger) => {
blacklistedCategories, blacklistedCategories,
} = notifications; } = notifications;
activeNotifications.forEach((n: PluginNotification) => { activeNotifications
if ( .map((n) => ({
!isHeadless() && ...n,
store.getState().connections.selectedPlugin !== 'notifications' && notification: {
!knownNotifications.has(n.notification.id) &&
blacklistedPlugins.indexOf(n.pluginId) === -1 &&
(!n.notification.category ||
blacklistedCategories.indexOf(n.notification.category) === -1)
) {
const prevNotificationTime: number =
lastNotificationTime.get(n.pluginId) || 0;
lastNotificationTime.set(n.pluginId, new Date().getTime());
knownNotifications.add(n.notification.id);
if (
new Date().getTime() - prevNotificationTime <
NOTIFICATION_THROTTLE
) {
// Don't send a notification if the plugin has sent a notification
// within the NOTIFICATION_THROTTLE.
return;
}
const plugin = getPlugin(n.pluginId);
ipcRenderer.send('sendNotification', {
payload: {
title: n.notification.title,
body: textContent(n.notification.message),
actions: [
{
type: 'button',
text: 'Show',
},
{
type: 'button',
text: 'Hide similar',
},
{
type: 'button',
text: `Hide all ${
plugin != null ? getPluginTitle(plugin) : ''
}`,
},
],
closeButtonText: 'Hide',
},
closeAfter: 10000,
pluginNotification: n,
});
logger.track('usage', 'native-notification', {
...n.notification, ...n.notification,
message: message: textContent(n.notification.message),
typeof n.notification.message === 'string' },
? n.notification.message }))
: '<ReactNode>', .forEach((n: PluginNotification) => {
}); if (
} !isHeadless() &&
}); store.getState().connections.selectedPlugin !== 'notifications' &&
!knownNotifications.has(n.notification.id) &&
blacklistedPlugins.indexOf(n.pluginId) === -1 &&
(!n.notification.category ||
blacklistedCategories.indexOf(n.notification.category) === -1)
) {
const prevNotificationTime: number =
lastNotificationTime.get(n.pluginId) || 0;
lastNotificationTime.set(n.pluginId, new Date().getTime());
knownNotifications.add(n.notification.id);
if (
new Date().getTime() - prevNotificationTime <
NOTIFICATION_THROTTLE
) {
// Don't send a notification if the plugin has sent a notification
// within the NOTIFICATION_THROTTLE.
return;
}
const plugin = getPlugin(n.pluginId);
ipcRenderer.send('sendNotification', {
payload: {
title: n.notification.title,
body: n.notification.message,
actions: [
{
type: 'button',
text: 'Show',
},
{
type: 'button',
text: 'Hide similar',
},
{
type: 'button',
text: `Hide all ${
plugin != null ? getPluginTitle(plugin) : ''
}`,
},
],
closeButtonText: 'Hide',
},
closeAfter: 10000,
pluginNotification: n,
});
logger.track('usage', 'native-notification', {
...n.notification,
message:
typeof n.notification.message === 'string'
? n.notification.message
: '<ReactNode>',
});
}
});
}, },
); );
}; };