mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-17 19:26: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.on('loading_screen', (percent, message) => {
|
||||
console.log('LOADING SCREEN', percent, message);
|
||||
});
|
||||
|
||||
client.on('qr', (qr) => {
|
||||
// NOTE: This event will not be fired if a session is specified.
|
||||
console.log('QR RECEIVED', qr);
|
||||
|
||||
4
index.d.ts
vendored
4
index.d.ts
vendored
@@ -241,6 +241,9 @@ declare namespace WAWebJS {
|
||||
message: Message
|
||||
) => 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 */
|
||||
on(event: 'qr', listener: (
|
||||
/** qr code string
|
||||
@@ -463,6 +466,7 @@ declare namespace WAWebJS {
|
||||
GROUP_LEAVE = 'group_leave',
|
||||
GROUP_UPDATE = 'group_update',
|
||||
QR_RECEIVED = 'qr',
|
||||
LOADING_SCREEN = 'loading_screen',
|
||||
DISCONNECTED = 'disconnected',
|
||||
STATE_CHANGED = 'change_state',
|
||||
BATTERY_CHANGED = 'change_battery',
|
||||
|
||||
@@ -115,6 +115,52 @@ class Client extends EventEmitter {
|
||||
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_QRCODE_SELECTOR = 'div[data-ref] canvas';
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ exports.Events = {
|
||||
GROUP_LEAVE: 'group_leave',
|
||||
GROUP_UPDATE: 'group_update',
|
||||
QR_RECEIVED: 'qr',
|
||||
LOADING_SCREEN: 'loading_screen',
|
||||
DISCONNECTED: 'disconnected',
|
||||
STATE_CHANGED: 'change_state',
|
||||
BATTERY_CHANGED: 'change_battery',
|
||||
|
||||
Reference in New Issue
Block a user