diff --git a/appointment.js b/appointment.js new file mode 100644 index 0000000..fd0dbb4 --- /dev/null +++ b/appointment.js @@ -0,0 +1,56 @@ +const {_android: android} = require('playwright'); +const ExcelUtil = require("./src/excel/ExcelUtil"); +const CommandorPage = require("./src/workers/CommandorPage"); +const {MongoManager, formatDate} = require("./src/workers/mongo_manager"); + +const mongoManager = new MongoManager(); + +let excelUtil = new ExcelUtil(); +let contactList = excelUtil.readContacts() +mongoManager.connect().then(r => + + android.devices().then((devices) => { + let segmentNumber = contactList.length / devices.length; + for (let i = 0; i < devices.length; i++) { + startWithList(contactList.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i]); + } + })) + +// Connect to the device. + +async function needToBook(contact, mongoManager) { + let collectionName = formatDate(new Date()) + let alreadBooked = await mongoManager.getAllSuccessfulItemsForDay(collectionName) + let toReturn = true; + await alreadBooked.forEach((bookedItem) => { + if (bookedItem.email === contact.mail) { + toReturn = false; + } + } + ) + return toReturn +} + +async function startBook(contactPojo, device) { + console.log(`Model: ${device.model()}`); + console.log(`Serial: ${device.serial()}`); + if (await needToBook(contactPojo, mongoManager)) { + let commandor = new CommandorPage(contactPojo, device, mongoManager); + //read contacts form excel + return await commandor.loadPage(); + } else { + console.log("do not send request --> skip") + } +} + + +async function startWithList(contacts, device) { + await contacts.reduce(async (promise, contactPojo) => { + // This line will wait for the last async function to finish. + // The first iteration uses an already resolved Promise + // so, it will immediately continue. + await promise; + const contents = await startBook(contactPojo, device); + console.log(contents); + }, Promise.resolve()); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..e6accd8 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + 爱马仕约会 + + +

Hello World!

+We are using Node.js , +Chromium , +and Electron . + + \ No newline at end of file diff --git a/main.js b/main.js index fd0dbb4..068dfdd 100644 --- a/main.js +++ b/main.js @@ -1,56 +1,25 @@ -const {_android: android} = require('playwright'); -const ExcelUtil = require("./src/excel/ExcelUtil"); -const CommandorPage = require("./src/workers/CommandorPage"); -const {MongoManager, formatDate} = require("./src/workers/mongo_manager"); +const {app, BrowserWindow} = require('electron') +const path = require("path"); -const mongoManager = new MongoManager(); - -let excelUtil = new ExcelUtil(); -let contactList = excelUtil.readContacts() -mongoManager.connect().then(r => - - android.devices().then((devices) => { - let segmentNumber = contactList.length / devices.length; - for (let i = 0; i < devices.length; i++) { - startWithList(contactList.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i]); +const createWindow = () => { + const win = new BrowserWindow({ + width: 800, + height: 600, + webPreferences: { + preload: path.join(__dirname, 'preload.js') } - })) + }); -// Connect to the device. - -async function needToBook(contact, mongoManager) { - let collectionName = formatDate(new Date()) - let alreadBooked = await mongoManager.getAllSuccessfulItemsForDay(collectionName) - let toReturn = true; - await alreadBooked.forEach((bookedItem) => { - if (bookedItem.email === contact.mail) { - toReturn = false; - } - } - ) - return toReturn + win.loadFile('index.html'); } -async function startBook(contactPojo, device) { - console.log(`Model: ${device.model()}`); - console.log(`Serial: ${device.serial()}`); - if (await needToBook(contactPojo, mongoManager)) { - let commandor = new CommandorPage(contactPojo, device, mongoManager); - //read contacts form excel - return await commandor.loadPage(); - } else { - console.log("do not send request --> skip") - } -} +app.whenReady().then(() => { + createWindow(); + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) createWindow() + }) +}) - -async function startWithList(contacts, device) { - await contacts.reduce(async (promise, contactPojo) => { - // This line will wait for the last async function to finish. - // The first iteration uses an already resolved Promise - // so, it will immediately continue. - await promise; - const contents = await startBook(contactPojo, device); - console.log(contents); - }, Promise.resolve()); -} +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') app.quit() +}) \ No newline at end of file diff --git a/package.json b/package.json index 1fdac37..6d5a13b 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,16 @@ { + "main": "main.js", + "version": "0.1", + "author": "Lei PAN", + "description": "爱马仕约会", "scripts": { - "start": "node main.js" + "start": "electron ." }, "dependencies": { + "@nodegui/nodegui": "^0.57.1", "axios": "^0.27.2", "beepbeep": "^1.3.0", + "electron": "^20.1.3", "mongodb": "^4.9.1", "mongoose": "^6.5.4", "node-xlsx": "^0.21.0", diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..a069b42 --- /dev/null +++ b/preload.js @@ -0,0 +1,10 @@ +window.addEventListener('DOMContentLoaded', () => { + const replaceText = (selector, text) => { + const element = document.getElementById(selector) + if (element) element.innerText = text + } + + for (const dependency of ['chrome', 'node', 'electron']) { + replaceText(`${dependency}-version`, process.versions[dependency]) + } +}) \ No newline at end of file