'use strict';
/**
* Interface Controller
*/
class InterfaceController {
constructor(props) {
this.pupPage = props.pupPage;
}
/**
* Opens the Chat Window
* @param {string} chatId ID of the chat window that will be opened
*/
async openChatWindow(chatId) {
return await this.pupPage.evaluate(async (chatId) => {
const chat = await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
return await window
.require('WAWebCmd')
.Cmd.openChatBottom({ chat: chat });
}, chatId);
}
/**
* Opens the Chat Drawer
* @param {string} chatId ID of the chat drawer that will be opened
*/
async openChatDrawer(chatId) {
await this.pupPage.evaluate(async (chatId) => {
let chat = await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
await window.require('WAWebCmd').Cmd.openDrawerMid(chat);
}, chatId);
}
/**
* Opens the Chat Search
* @param {string} chatId ID of the chat search that will be opened
*/
async openChatSearch(chatId) {
await this.pupPage.evaluate(async (chatId) => {
let chat = await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
await window.require('WAWebCmd').Cmd.chatSearch(chat);
}, chatId);
}
/**
* Opens or Scrolls the Chat Window to the position of the message
* @param {string} msgId ID of the message that will be scrolled to
*/
async openChatWindowAt(msgId) {
await this.pupPage.evaluate(async (msgId) => {
const msg =
window.require('WAWebCollections').Msg.get(msgId) ||
(
await window
.require('WAWebCollections')
.Msg.getMessagesById([msgId])
)?.messages?.[0];
const chat =
window.require('WAWebCollections').Chat.get(msg.id.remote) ??
(await window
.require('WAWebCollections')
.Chat.find(msg.id.remote));
const searchContext = await window
.require('WAWebChatMessageSearch')
.getSearchContext(chat, msg.id);
await window
.require('WAWebCmd')
.Cmd.openChatAt({ chat: chat, msgContext: searchContext });
}, msgId);
}
/**
* Opens the Message Drawer
* @param {string} msgId ID of the message drawer that will be opened
*/
async openMessageDrawer(msgId) {
await this.pupPage.evaluate(async (msgId) => {
const msg =
window.require('WAWebCollections').Msg.get(msgId) ||
(
await window
.require('WAWebCollections')
.Msg.getMessagesById([msgId])
)?.messages?.[0];
await window.require('WAWebCmd').Cmd.msgInfoDrawer(msg);
}, msgId);
}
/**
* Closes the Right Drawer
*/
async closeRightDrawer() {
await this.pupPage.evaluate(async () => {
await window
.require('WAWebDrawerManager')
.DrawerManager.closeDrawerRight();
});
}
/**
* Get all Features
*/
async getFeatures() {
return await this.pupPage.evaluate(() => {
if (!window.require('WAWebCollections').Features)
throw new Error(
'This version of Whatsapp Web does not support features',
);
return window.require('WAWebCollections').Features.F;
});
}
/**
* Check if Feature is enabled
* @param {string} feature status to check
*/
async checkFeatureStatus(feature) {
return await this.pupPage.evaluate((feature) => {
if (!window.require('WAWebCollections').Features)
throw new Error(
'This version of Whatsapp Web does not support features',
);
return window
.require('WAWebCollections')
.Features.supportsFeature(feature);
}, feature);
}
/**
* Enable Features
* @param {string[]} features to be enabled
*/
async enableFeatures(features) {
await this.pupPage.evaluate((features) => {
if (!window.require('WAWebCollections').Features)
throw new Error(
'This version of Whatsapp Web does not support features',
);
for (const feature in features) {
window
.require('WAWebCollections')
.Features.setFeature(features[feature], true);
}
}, features);
}
/**
* Disable Features
* @param {string[]} features to be disabled
*/
async disableFeatures(features) {
await this.pupPage.evaluate((features) => {
if (!window.require('WAWebCollections').Features)
throw new Error(
'This version of Whatsapp Web does not support features',
);
for (const feature in features) {
window
.require('WAWebCollections')
.Features.setFeature(features[feature], false);
}
}, features);
}
}
module.exports = InterfaceController;