mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-20 12:39:20 +00:00
feat: [Updated] Loading screen listener with percent and message (#1563)
* last update * eslint fix * headless fix * Update index.d.ts Co-authored-by: stefanfuchs <stefan1234@gmail.com> * Update index.d.ts - Add 'LOADING_SCREEN' type to Enum Co-authored-by: stefanfuchs <stefan1234@gmail.com> Co-authored-by: Rajeh Taher <rajeh@reforward.dev>
This commit is contained in:
@@ -7,6 +7,10 @@ const client = new Client({
|
|||||||
|
|
||||||
client.initialize();
|
client.initialize();
|
||||||
|
|
||||||
|
client.on('loading_screen', (percent, message) => {
|
||||||
|
console.log('LOADING SCREEN', percent, message);
|
||||||
|
});
|
||||||
|
|
||||||
client.on('qr', (qr) => {
|
client.on('qr', (qr) => {
|
||||||
// NOTE: This event will not be fired if a session is specified.
|
// NOTE: This event will not be fired if a session is specified.
|
||||||
console.log('QR RECEIVED', qr);
|
console.log('QR RECEIVED', qr);
|
||||||
|
|||||||
4
index.d.ts
vendored
4
index.d.ts
vendored
@@ -241,6 +241,9 @@ declare namespace WAWebJS {
|
|||||||
message: Message
|
message: Message
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when loading screen is appearing */
|
||||||
|
on(event: 'loading_screen', listener: (percent: string, message: string) => void): this
|
||||||
|
|
||||||
/** Emitted when the QR code is received */
|
/** Emitted when the QR code is received */
|
||||||
on(event: 'qr', listener: (
|
on(event: 'qr', listener: (
|
||||||
/** qr code string
|
/** qr code string
|
||||||
@@ -463,6 +466,7 @@ declare namespace WAWebJS {
|
|||||||
GROUP_LEAVE = 'group_leave',
|
GROUP_LEAVE = 'group_leave',
|
||||||
GROUP_UPDATE = 'group_update',
|
GROUP_UPDATE = 'group_update',
|
||||||
QR_RECEIVED = 'qr',
|
QR_RECEIVED = 'qr',
|
||||||
|
LOADING_SCREEN = 'loading_screen',
|
||||||
DISCONNECTED = 'disconnected',
|
DISCONNECTED = 'disconnected',
|
||||||
STATE_CHANGED = 'change_state',
|
STATE_CHANGED = 'change_state',
|
||||||
BATTERY_CHANGED = 'change_battery',
|
BATTERY_CHANGED = 'change_battery',
|
||||||
|
|||||||
@@ -115,6 +115,52 @@ class Client extends EventEmitter {
|
|||||||
referer: 'https://whatsapp.com/'
|
referer: 'https://whatsapp.com/'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await page.evaluate(`function getElementByXpath(path) {
|
||||||
|
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
|
||||||
|
}`);
|
||||||
|
|
||||||
|
let lastPercent = null,
|
||||||
|
lastPercentMessage = null;
|
||||||
|
|
||||||
|
await page.exposeFunction('loadingScreen', async (percent, message) => {
|
||||||
|
if (lastPercent !== percent || lastPercentMessage !== message) {
|
||||||
|
this.emit(Events.LOADING_SCREEN, percent, message);
|
||||||
|
lastPercent = percent;
|
||||||
|
lastPercentMessage = message;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.evaluate(
|
||||||
|
async function (selectors) {
|
||||||
|
var observer = new MutationObserver(function () {
|
||||||
|
let progressBar = window.getElementByXpath(
|
||||||
|
selectors.PROGRESS
|
||||||
|
);
|
||||||
|
let progressMessage = window.getElementByXpath(
|
||||||
|
selectors.PROGRESS_MESSAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
if (progressBar) {
|
||||||
|
window.loadingScreen(
|
||||||
|
progressBar.value,
|
||||||
|
progressMessage.innerText
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
observer.observe(document, {
|
||||||
|
attributes: true,
|
||||||
|
childList: true,
|
||||||
|
characterData: true,
|
||||||
|
subtree: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PROGRESS: '//*[@id=\'app\']/div/div/div[2]/progress',
|
||||||
|
PROGRESS_MESSAGE: '//*[@id=\'app\']/div/div/div[3]',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const INTRO_IMG_SELECTOR = '[data-testid="intro-md-beta-logo-dark"], [data-testid="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
const INTRO_IMG_SELECTOR = '[data-testid="intro-md-beta-logo-dark"], [data-testid="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||||
const INTRO_QRCODE_SELECTOR = 'div[data-ref] canvas';
|
const INTRO_QRCODE_SELECTOR = 'div[data-ref] canvas';
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ exports.Events = {
|
|||||||
GROUP_LEAVE: 'group_leave',
|
GROUP_LEAVE: 'group_leave',
|
||||||
GROUP_UPDATE: 'group_update',
|
GROUP_UPDATE: 'group_update',
|
||||||
QR_RECEIVED: 'qr',
|
QR_RECEIVED: 'qr',
|
||||||
|
LOADING_SCREEN: 'loading_screen',
|
||||||
DISCONNECTED: 'disconnected',
|
DISCONNECTED: 'disconnected',
|
||||||
STATE_CHANGED: 'change_state',
|
STATE_CHANGED: 'change_state',
|
||||||
BATTERY_CHANGED: 'change_battery',
|
BATTERY_CHANGED: 'change_battery',
|
||||||
|
|||||||
Reference in New Issue
Block a user