Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/cstayyab/WALC
Browse files Browse the repository at this point in the history
  • Loading branch information
cstayyab committed Jul 11, 2020
2 parents e678dae + f91f910 commit ec63e7a
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 28 deletions.
6 changes: 1 addition & 5 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,11 +170,7 @@ const WhatsAppMenu = [{
checked: settings.get('darkMode.value'),
click: (menuItem, window, e) => {
settings.set('darkMode.value', menuItem.checked);
if (menuItem.checked) {
win.webContents.send("enableDarkMode");
} else {
win.webContents.send("disableDarkMode");
}
win.webContents.send("setDarkMode", menuItem.checked);
}
}];

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
}
},
"devDependencies": {
"electron": "^8.1.1",
"electron": "8.3.1",
"electron-builder": "^22.4.0",
"electron-packager": "^14.2.1",
"electron-rebuild": "^1.11.0",
Expand Down
45 changes: 23 additions & 22 deletions preload.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const { remote, ipcRenderer } = require('electron');
const Store = require('electron-store');
const electronSpellchecker = require('electron-spellchecker');
const waStore = require('./waStore');

const settings = new Store({ name: 'settings' });

Expand Down Expand Up @@ -62,7 +63,7 @@ function renderTray() {
canvas.width = logo.naturalWidth;
canvas.height = logo.naturalHeight;

if (window.Store.AppState.state !== 'CONNECTED') {
if(window.Store.State.default.state !== 'CONNECTED') {
ctx.filter = 'grayscale(100%)';
}
ctx.drawImage(logo, 0, 0);
Expand Down Expand Up @@ -91,48 +92,48 @@ function renderTray() {
function appStateChange(event, state) {
if (['OPENING', 'DISCONNECTED', 'TIMEOUT'].includes(state)) {
setTimeout(() => {
if (state === window.Store.AppState.state) {
if (state === window.Store.State.default.state) {
new Notification('WALC disconnected', {
body: "Please check your connection.",
icon: "favicon.ico"
});
}
renderTray();
}, 3000);
}, 5000);
} else if (state === 'CONNECTED') {
renderTray();
}
}

function storeOnLoad() {
if (window.Store) {
renderTray();
window.Store.Chat.on('change:unreadCount', renderTray);
window.Store.Chat.on('change:muteExpiration', renderTray);
window.Store.AppState.on('change:state', appStateChange);
} else {
setTimeout(storeOnLoad, 1000);
}
setTimeout(function() {
if(window.Store || document.getElementById('startup') === null) {
waStore(); // auto load window.Store if undefined

renderTray();
window.Store.Chat.on('change:unreadCount', renderTray);
window.Store.Chat.on('change:muteExpiration', renderTray);
window.Store.State.default.on('change:state', appStateChange);
} else {
storeOnLoad();
}
}, 3000);
}

function applySettings() {
if (settings.get('darkMode.value')) {
enableDarkMode();
function setDarkMode(enabled) {
if(enabled) {
document.body.classList.add('dark');
} else {
disableDarkMode();
document.body.classList.remove('dark');
}
}

function enableDarkMode() {
document.body.classList.add("dark");
}
function disableDarkMode() {
document.body.classList.remove("dark");
function applySettings() {
setDarkMode(settings.get('darkMode.value'));
}

window.addEventListener('load', storeOnLoad);
window.addEventListener('load', applySettings);
document.addEventListener("DOMContentLoaded", setupSpellChecker);
ipcRenderer.on('renderTray', renderTray);
ipcRenderer.on('enableDarkMode', enableDarkMode);
ipcRenderer.on('disableDarkMode', disableDarkMode);
ipcRenderer.on('setDarkMode', (ev, enabled) => setDarkMode(enabled));
103 changes: 103 additions & 0 deletions waStore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
module.exports = function() {
/**
* Auto discovery the webpack object references of instances that contains all functions used by the WAPI
* functions and creates the Store object.
* Source: https://github.com/open-wa/wa-automate-nodejs/blob/master/src/lib/wapi.js
*/
function getStore(modules) {
let foundCount = 0;
let neededObjects = [
{ id: "Store", conditions: (module) => (module.default && module.default.Chat && module.default.Msg) ? module.default : null},
{ id: "MediaCollection", conditions: (module) => (module.default && module.default.prototype && (module.default.prototype.processFiles !== undefined||module.default.prototype.processAttachments !== undefined)) ? module.default : null },
{ id: "MediaProcess", conditions: (module) => (module.BLOB) ? module : null },
{ id: "Archive", conditions: (module) => (module.setArchive) ? module : null },
{ id: "Block", conditions: (module) => (module.blockContact && module.unblockContact) ? module : null },
{ id: "ChatUtil", conditions: (module) => (module.sendClear) ? module : null },
{ id: "GroupInvite", conditions: (module) => (module.queryGroupInviteCode) ? module : null },
{ id: "Wap", conditions: (module) => (module.createGroup) ? module : null },
{ id: "ServiceWorker", conditions: (module) => (module.default && module.default.killServiceWorker) ? module : null },
{ id: "State", conditions: (module) => (module.STATE && module.STREAM) ? module : null },
{ id: "_Presence", conditions: (module) => (module.setPresenceAvailable && module.setPresenceUnavailable) ? module : null },
{ id: "WapDelete", conditions: (module) => (module.sendConversationDelete && module.sendConversationDelete.length == 2) ? module : null },
{ id: "Conn", conditions: (module) => (module.default && module.default.ref && module.default.refTTL) ? module.default : null },
{ id: "WapQuery", conditions: (module) => (module.queryExist) ? module : ((module.default && module.default.queryExist) ? module.default : null) },
{ id: "CryptoLib", conditions: (module) => (module.decryptE2EMedia) ? module : null },
{ id: "OpenChat", conditions: (module) => (module.default && module.default.prototype && module.default.prototype.openChat) ? module.default : null },
{ id: "UserConstructor", conditions: (module) => (module.default && module.default.prototype && module.default.prototype.isServer && module.default.prototype.isUser) ? module.default : null },
{ id: "SendTextMsgToChat", conditions: (module) => (module.sendTextMsgToChat) ? module.sendTextMsgToChat : null },
{ id: "ReadSeen", conditions: (module) => (module.sendSeen) ? module : null },
{ id: "sendDelete", conditions: (module) => (module.sendDelete) ? module.sendDelete : null },
{ id: "addAndSendMsgToChat", conditions: (module) => (module.addAndSendMsgToChat) ? module.addAndSendMsgToChat : null },
{ id: "sendMsgToChat", conditions: (module) => (module.sendMsgToChat) ? module.sendMsgToChat : null },
{ id: "Catalog", conditions: (module) => (module.Catalog) ? module.Catalog : null },
{ id: "bp", conditions: (module) => (module.default&&module.default.toString().includes('bp_unknown_version')) ? module.default : null },
{ id: "MsgKey", conditions: (module) => (module.default&&module.default.toString().includes('MsgKey error: obj is null/undefined')) ? module.default : null },
{ id: "Parser", conditions: (module) => (module.convertToTextWithoutSpecialEmojis) ? module.default : null },
{ id: "Builders", conditions: (module) => (module.TemplateMessage && module.HydratedFourRowTemplate) ? module : null },
{ id: "Me", conditions: (module) => (module.PLATFORMS && module.Conn) ? module.default : null },
{ id: "CallUtils", conditions: (module) => (module.sendCallEnd && module.parseCall) ? module : null },
{ id: "Identity", conditions: (module) => (module.queryIdentity && module.updateIdentity) ? module : null },
{ id: "MyStatus", conditions: (module) => (module.getStatus && module.setMyStatus) ? module : null },
{ id: "ChatStates", conditions: (module) => (module.sendChatStatePaused && module.sendChatStateRecording && module.sendChatStateComposing) ? module : null },
{ id: "GroupActions", conditions: (module) => (module.sendExitGroup && module.localExitGroup) ? module : null },
{ id: "Features", conditions: (module) => (module.FEATURE_CHANGE_EVENT && module.features) ? module : null },
{ id: "MessageUtils", conditions: (module) => (module.storeMessages && module.appendMessage) ? module : null },
{ id: "WebMessageInfo", conditions: (module) => (module.WebMessageInfo && module.WebFeatures) ? module.WebMessageInfo : null },
{ id: "createMessageKey", conditions: (module) => (module.createMessageKey && module.createDeviceSentMessage) ? module.createMessageKey : null },
{ id: "Participants", conditions: (module) => (module.addParticipants && module.removeParticipants && module.promoteParticipants && module.demoteParticipants) ? module : null },
{ id: "WidFactory", conditions: (module) => (module.isWidlike && module.createWid && module.createWidFromWidLike) ? module : null },
{ id: "Base", conditions: (module) => (module.setSubProtocol && module.binSend && module.actionNode) ? module : null },
{ id: "Versions", conditions: (module) => (module.loadProtoVersions && module.default["15"] && module.default["16"] && module.default["17"]) ? module : null },
{ id: "Sticker", conditions: (module) => (module.default && module.default.Sticker) ? module.default.Sticker : null },
{ id: "MediaUpload", conditions: (module) => (module.default && module.default.mediaUpload) ? module.default : null },
{ id: "UploadUtils", conditions: (module) => (module.default && module.default.encryptAndUpload) ? module.default : null }
];
for (let idx in modules) {
if ((typeof modules[idx] === "object") && (modules[idx] !== null)) {
let first = Object.values(modules[idx])[0];
if ((typeof first === "object") && (first.exports)) {
for (let idx2 in modules[idx]) {
let module = modules(idx2);
// console.log("TCL: getStore -> module", module ? Object.getOwnPropertyNames(module.default || module).filter(item => typeof (module.default || module)[item] === 'function').length ? module.default || module : "":'')
if (!module) {
continue;
}
neededObjects.forEach((needObj) => {
if (!needObj.conditions || needObj.foundedModule)
return;
let neededModule = needObj.conditions(module);
if (neededModule !== null) {
foundCount++;
needObj.foundedModule = neededModule;
}
});
if (foundCount == neededObjects.length) {
break;
}
}

let neededStore = neededObjects.find((needObj) => needObj.id === "Store");
window.Store = neededStore.foundedModule ? neededStore.foundedModule : {};
neededObjects.splice(neededObjects.indexOf(neededStore), 1);
neededObjects.forEach((needObj) => {
if (needObj.foundedModule) {
window.Store[needObj.id] = needObj.foundedModule;
}
});
window.Store.sendMessage = function (e) {
return window.Store.SendTextMsgToChat(this, ...arguments);
};
if(window.Store.MediaCollection) window.Store.MediaCollection.prototype.processFiles = window.Store.MediaCollection.prototype.processFiles || window.Store.MediaCollection.prototype.processAttachments;
return window.Store;
}
}
}
}

if (!window.Store||!window.Store.Msg) {
const parasite = `parasite${Date.now()}`;
// webpackJsonp([], { [parasite]: (x, y, z) => getStore(z) }, [parasite]);
if (typeof webpackJsonp === 'function') webpackJsonp([], {[parasite]: (x, y, z) => getStore(z)}, [parasite]);
else webpackJsonp.push([[parasite],{[parasite]: (x, y, z) => getStore(z)},[[parasite]]]);
}
};

0 comments on commit ec63e7a

Please sign in to comment.