xVASynth-TTS / main.js
Pendrokar's picture
xVASynth v3 code for English
19c8b95
raw
history blame
3.99 kB
const PRODUCTION = process.mainModule.filename.includes("resources")
const path = PRODUCTION ? "resources/app" : "."
const remoteMain = require("@electron/remote/main")
remoteMain.initialize()
const fs = require("fs")
const {shell, app, BrowserWindow, ipcMain, Menu} = require("electron")
const {spawn} = require("child_process")
let pythonProcess
if (PRODUCTION) {
// pythonProcess = spawn(`${path}/cpython/server.exe`, {stdio: "ignore"})
} else {
pythonProcess = spawn("python", [`${path}/server.py`], {stdio: "ignore"})
}
let mainWindow
let discordClient
let discordClientStart = Date.now()
const createWindow = () => {
mainWindow = new BrowserWindow({
width: 1200,
height: 1000,
minHeight: 800,
minWidth: 1300,
frame: false,
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true,
contextIsolation: false
},
icon: `${__dirname}/assets/x-icon.png`,
// show: false,
})
remoteMain.enable(mainWindow.webContents)
app.on('browser-window-created', (_, window) => {
require("@electron/remote/main").enable(mainWindow.webContents)
})
mainWindow.loadFile("index.html")
mainWindow.shell = shell
mainWindow.on("ready-to-show", () => {
mainWindow.show()
})
mainWindow.on("closed", () => mainWindow = null)
}
ipcMain.on("resize", (event, arg) => {
mainWindow.setSize(arg.width, arg.height)
})
ipcMain.on("updatePosition", (event, arg) => {
const bounds = mainWindow.getBounds()
bounds.x = parseInt(arg.details[0])
bounds.y = parseInt(arg.details[1])
mainWindow.setBounds(bounds)
})
ipcMain.on("updateDiscord", (event, arg) => {
// Disconnect if turned off
if (!Object.keys(arg).includes("details")) {
if (discordClient) {
try {
discordClient.disconnect()
} catch (e) {}
}
discordClient = undefined
return
}
if (!discordClient) {
discordClient = require('discord-rich-presence')('885096702648938546')
}
discordClient.updatePresence({
state: 'Generating AI voice acting',
details: arg.details,
startTimestamp: discordClientStart,
largeImageKey: 'xvasynth_512_512',
largeImageText: "xVASynth",
smallImageKey: 'xvasynth_512_512',
smallImageText: "xVASynth",
instance: true,
})
})
ipcMain.on("show-context-menu-editor", (event) => {
const template = [
{
label: 'Copy ARPAbet [v3]',
click: () => { event.sender.send('context-menu-command', 'context-copy-editor') }
},
]
const menu = Menu.buildFromTemplate(template)
menu.popup(BrowserWindow.fromWebContents(event.sender))
})
ipcMain.on("show-context-menu", (event) => {
const template = [
{
label: 'Copy',
click: () => { event.sender.send('context-menu-command', 'context-copy') }
},
{
label: 'Paste',
click: () => { event.sender.send('context-menu-command', 'context-paste') }
},
// { type: 'separator' },
]
const menu = Menu.buildFromTemplate(template)
menu.popup(BrowserWindow.fromWebContents(event.sender))
})
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", createWindow)
// Quit when all windows are closed.
app.on("window-all-closed", () => {
// On OS X it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== "darwin") {
app.quit()
}
})
app.on("activate", () => {
// On OS X it"s common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (mainWindow === null) {
createWindow()
}
})