const { Notification, ipcMain } = require("electron"); const store = require("./utils/store"); const { backgroundMitt, ipcEmit } = require("./utils/emitter"); const { connectToPlatform, disconnectFromPlatform } = require("./io"); const { initAudio, terminateAudio, playback, streamState } = require("./audio"); const util = require('util'); let ui; const messageQueue = []; let processContentId; /* Possible messages: * - New UI (set ui) * - New message (add message to ui.messages) * - New content (add content to existing message) * - Update person * - Notification */ backgroundMitt.on("message", (message) => messageQueue.push(message)); function handleMessageQueue() { if (!streamState.pb && !streamState.rec) { const update = messageQueue.shift(); if (update) { if (update.person) { ui = update; } else if (update.name) { ui.person = update; } else if (update.modifier) { ui.messages.push(update); } else if (update.category) { search(update.message).content.push(update); } else if (update.title) { new Notification(update).show(); return; } else if (update.context) { search(update.message).context = update.context; } else if (update.text) /* Update the text of last message */ { search(update.message).content.at(-1).text = update.text; } ipcEmit("message", update); } } } const search = (id) => ui.messages.find(m => m.id == id); function launchSession(account) { connectToPlatform(account); initAudio(); processContentId = setInterval(handleMessageQueue, 100); } function endSession() { clearInterval(processContentId); terminateAudio(); disconnectFromPlatform(); ui = null; } ipcMain.on("messenger", () => { if (ui) { ipcEmit("message", ui); } }); exports.launchSession = launchSession; exports.endSession = endSession;