From 5325287436ad084f11f459dca87e4726e5112493 Mon Sep 17 00:00:00 2001 From: Sarath M S Date: Wed, 17 Feb 2021 12:51:59 -0500 Subject: [PATCH] Use IPC to invoke task scheduling from renderer --- .vscode/launch.json | 30 ++++++++++++++++++++ main/ipcBindings.js | 20 ++++++------- main/utils/autorun/schedule.js | 22 ++++++++++++++ main/utils/{scheduler => autorun}/task.js | 0 renderer/components/settings/SetupAutorun.js | 25 ++++++++++++++++ renderer/pages/settings.js | 6 +++- 6 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 main/utils/autorun/schedule.js rename main/utils/{scheduler => autorun}/task.js (100%) create mode 100644 renderer/components/settings/SetupAutorun.js diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..fe55e15f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,30 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Electron Main", + "program": "${workspaceFolder}/main/index.js", + "request": "launch", + "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", + "skipFiles": [ + "/**" + ], + "type": "pwa-node" + }, + { + "name": "Debug Jest Tests", + "type": "node", + "request": "launch", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/jest", + "--runInBand", + "--detectOpenHandles" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "port": 9229 + } + ] + } + \ No newline at end of file diff --git a/main/ipcBindings.js b/main/ipcBindings.js index 144cee3b..f2b093af 100644 --- a/main/ipcBindings.js +++ b/main/ipcBindings.js @@ -1,4 +1,4 @@ -const { app, ipcMain, dialog } = require('electron') +const { app } = require('electron') const fs = require('fs-extra') const { listResults } = require('./actions') const { Runner } = require('./utils/ooni/run') @@ -98,17 +98,15 @@ const ipcBindingsForMain = (ipcMain) => { await onboard({ optout }) }) - ipcMain.on('autorun.schedule', async (event) => { - const { response } = await dialog.showMessageBox(event.sender, { - type: "question", - title: "Do you want OONI Probe to run automatically every day?", - message: "OONI Probe can run tests everyday and ...", - buttons: ['No', 'Yes'] + ipcMain.on('autorun.schedule', async (event, { dialogTitle, dialogMessage, btnYes, btnNo }) => { + const scheduleAutorun = require('./utils/autorun/schedule') + scheduleAutorun({ + targetWindow: event.sender, + dialogTitle, + dialogMessage, + btnYes, + btnNo }) - if (response === 1) { - const task = require('./utils/scheduler/task') - task.create() - } }) } diff --git a/main/utils/autorun/schedule.js b/main/utils/autorun/schedule.js new file mode 100644 index 00000000..64eccc4a --- /dev/null +++ b/main/utils/autorun/schedule.js @@ -0,0 +1,22 @@ +const { dialog } = require('electron') + +const scheduleAutorun = async ({ + targetWindow, + dialogTitle = 'Do you want OONI Probe to run automatically every day?', + dialogMessage = 'OONI Probe can run tests everyday and ...', + btnYes = 'Yes', + btnNo = 'No' +}) => { + const { response } = await dialog.showMessageBox(targetWindow, { + type: 'question', + title: dialogTitle, + message: dialogMessage, + buttons: [btnNo, btnYes] + }) + if (response === 1) { + const autorunTask = require('./task') + autorunTask.create() + } +} + +module.exports = scheduleAutorun \ No newline at end of file diff --git a/main/utils/scheduler/task.js b/main/utils/autorun/task.js similarity index 100% rename from main/utils/scheduler/task.js rename to main/utils/autorun/task.js diff --git a/renderer/components/settings/SetupAutorun.js b/renderer/components/settings/SetupAutorun.js new file mode 100644 index 00000000..e2614f9e --- /dev/null +++ b/renderer/components/settings/SetupAutorun.js @@ -0,0 +1,25 @@ +import React, { useCallback } from 'react' +import { ipcRenderer } from 'electron' +import { useIntl } from 'react-intl' +import { Box, Button } from 'ooni-components' + +const SetupAutorun = () => { + const intl = useIntl() + const onClick = useCallback(() => { + ipcRenderer.send('autorun.schedule', { + dialogTitle: intl.formatMessage({ id: 'Settings.Autorun.Title' }), + dialogMessage: intl.formatMessage({ id: 'Settings.Autorun.Message' }), + btnYes: intl.formatMessage({ id: 'Settings.Autorun.Button.Yes' }), + btnNo: intl.formatMessage({ id: 'Settings.Autorun.Button.No' }), + }) + }) + return ( + + + + ) +} + +export default SetupAutorun \ No newline at end of file diff --git a/renderer/pages/settings.js b/renderer/pages/settings.js index 81c4cfa7..98e78357 100644 --- a/renderer/pages/settings.js +++ b/renderer/pages/settings.js @@ -17,6 +17,7 @@ import { WebsiteCategoriesSelector } from '../components/settings/WebsiteCategor import Layout from '../components/Layout' import Sidebar from '../components/Sidebar' import { default as pkgJson } from '../../package.json' +import SetupAutorun from '../components/settings/SetupAutorun' const TopBar = styled.div` background-color: ${props => props.theme.colors.blue5}; @@ -99,7 +100,10 @@ const Settings = () => { optionKey='sharing.include_asn' /> - + {/* Privacy */} +
}> + +
OONI Probe Desktop v{pkgJson.version}