mime-chat/src/session.js
2022-03-17 06:54:08 -05:00

90 lines
2.2 KiB
JavaScript

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;