* ci: setup workflows, dependabot, labeler and commit linting * docs: update README, community files and issue templates * chore: configure prettier, editorconfig and format codebase * chore: restore changes lost during rebase * docs: adjust url for new logo * fix: align badges * chore: resolve conflicts and re-add temp lint
173 lines
5.4 KiB
JavaScript
173 lines
5.4 KiB
JavaScript
'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;
|