diff --git a/main.js b/main.js index 5f481f0..436ebb6 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,6 @@ const {app, BrowserWindow, ipcMain} = require('electron') const {_android: android} = require('playwright'); -const startBookWithNumbers = require('./src/appointment') +const {startBookWithNumbers, scheduleBookWithNumbers} = require('./src/appointment') const path = require("path"); const homedir = require('os').homedir(); const loadIniFile = require('read-ini-file') @@ -22,6 +22,9 @@ const createWindow = () => { ipcMain.on('start-book', (event, startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) => { startBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) }) + ipcMain.on('schedule-book', (event, startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) => { + scheduleBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) + }) ipcMain.on('clearAllBrowsers', (event) => { clearAllBrowsers() }) @@ -83,6 +86,20 @@ function startBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBee }) } +function scheduleBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) { + console.log("scheduleBook: " + startNumber); + console.log("endNumber: " + endNumber); + console.log("selectedStore: " + selectedStore); + console.log("audioAnalyse: " + audioAnalyse); + //load config.ini file + let config = loadIniFile.sync(configFilePath); + console.log(config); + let contactExcelFilePath = config.DEFAULT.contact_list_file; + scheduleBookWithNumbers(startNumber, endNumber, selectedStore, contactExcelFilePath, audioAnalyse, alertBeep).then(() => { + console.log("stop") + }) +} + async function scanDevices() { exec("adb devices ", (error, stdout, stderr) => { if (error) { diff --git a/preload.js b/preload.js index 565c766..bd4f43a 100644 --- a/preload.js +++ b/preload.js @@ -2,6 +2,13 @@ const {contextBridge, ipcRenderer} = require('electron') contextBridge.exposeInMainWorld('appointment', { startBook: (startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) => ipcRenderer.send('start-book', startNumber, endNumber, selectedStore, audioAnalyse, alertBeep), + scheduleBook: (startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) => ipcRenderer.send('schedule-book', startNumber, endNumber, selectedStore, audioAnalyse, alertBeep), clearAllBrowsers: () => ipcRenderer.send('clearAllBrowsers'), scanDevices: () => ipcRenderer.invoke('scan-devices') -}) \ No newline at end of file +}) + +// contextBridge.exposeInMainWorld('appointment', { +// startBook: (startNumber, endNumber, selectedStore, audioAnalyse, alertBeep) => ipcRenderer.send('schedule-book', startNumber, endNumber, selectedStore, audioAnalyse, alertBeep), +// clearAllBrowsers: () => ipcRenderer.send('clearAllBrowsers'), +// scanDevices: () => ipcRenderer.invoke('scan-devices') +// }) \ No newline at end of file diff --git a/renderer.js b/renderer.js index ebfb1b0..2ad6c3c 100644 --- a/renderer.js +++ b/renderer.js @@ -24,6 +24,12 @@ window.addEventListener('load', () => { window.appointment.startBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBeep); }) + document.getElementById("scheduler_book_btn").addEventListener('click', () => { + let audioAnalyse = document.getElementById("audio_analyse").checked; + let alertBeep = document.getElementById("alert_beep").checked; + window.appointment.scheduleBook(startNumber, endNumber, selectedStore, audioAnalyse, alertBeep); + }) + document.getElementById("clear_all_browsers").addEventListener('click', () => { window.appointment.clearAllBrowsers(); }) diff --git a/src/appointment.js b/src/appointment.js index 2744fb7..796600d 100644 --- a/src/appointment.js +++ b/src/appointment.js @@ -3,6 +3,7 @@ const ExcelUtil = require("./excel/ExcelUtil"); const CommandorPage = require("./workers/CommandorPage"); const {MongoManager, formatDate} = require("./workers/mongo_manager"); const alert = require('alert'); +const schedule = require("node-schedule"); const mongoManager = new MongoManager(); const SEVEN_DAYS_IN_S = 3600 * 24 * 7; @@ -132,6 +133,14 @@ async function startWithList(contacts, device, selectedStore, audioAnalyse, aler }, Promise.resolve()); } +async function scheduleBookWithNumbers(startNumber, endNumber, selectedStore, pathToExcelFile = '/Users/lpan/Desktop/contact_all.xlsx', audioAnalyse = false, alertBeep = false) { + console.log("scheduleBookWithNumbers() called") + schedule.scheduleJob('45 9 * * *', function () { + console.log("start startBookWithNumbers") + startBookWithNumbers(startNumber, endNumber, selectedStore, pathToExcelFile, audioAnalyse = false, alertBeep = false) + }) +} + async function startBookWithNumbers(startNumber, endNumber, selectedStore, pathToExcelFile = '/Users/lpan/Desktop/contact_all.xlsx', audioAnalyse = false, alertBeep = false) { let allContactList = excelUtil.readContacts(pathToExcelFile); let contactList; @@ -145,27 +154,27 @@ async function startBookWithNumbers(startNumber, endNumber, selectedStore, pathT return } mongoManager.connect().then(r => { - filterAlreadyBookedContacts(contactList).then((listToBook)=>{ + filterAlreadyBookedContacts(contactList).then((listToBook) => { filterAlreadyAccepteddContacts(listToBook).then(notAcceptedContacts => { - filterBlacklistedContacts(notAcceptedContacts).then(listWithoutBlackContact => { - console.log("number of contacts to book:" + listWithoutBlackContact.length) - android.devices().then((devices) => { - if (devices.length === 0) { - alert("未找到连接的设备"); - return - } - let segmentNumber = listWithoutBlackContact.length / devices.length; - console.log("connected device number:" + devices.length) - console.log("segmentNumber:" + segmentNumber) - for (let i = 0; i < devices.length; i++) { - startWithList(listWithoutBlackContact.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i], selectedStore, audioAnalyse, alertBeep); - } - }) + filterBlacklistedContacts(notAcceptedContacts).then(listWithoutBlackContact => { + console.log("number of contacts to book:" + listWithoutBlackContact.length) + android.devices().then((devices) => { + if (devices.length === 0) { + alert("未找到连接的设备"); + return + } + let segmentNumber = listWithoutBlackContact.length / devices.length; + console.log("connected device number:" + devices.length) + console.log("segmentNumber:" + segmentNumber) + for (let i = 0; i < devices.length; i++) { + startWithList(listWithoutBlackContact.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i], selectedStore, audioAnalyse, alertBeep); + } }) - } - ) - }) - }); + }) + } + ) + }) + }); } -module.exports = startBookWithNumbers \ No newline at end of file +module.exports = {startBookWithNumbers, scheduleBookWithNumbers} \ No newline at end of file