manager/main.js

437 lines
11 KiB
JavaScript
Raw Normal View History

2023-04-26 21:26:20 +00:00
const {app, BrowserWindow, ipcMain, Notification, nativeImage, Tray, Menu, shell} = require("electron")
2023-04-24 15:51:18 +00:00
const path = require("path")
const fs = require("fs")
const ipc = ipcMain
2023-04-26 21:26:20 +00:00
const { io } = require("socket.io-client");
2023-04-29 18:05:31 +00:00
const log = require("./sub-log");
2023-04-29 16:19:45 +00:00
const updater = require("./updatetools")
2023-04-24 15:51:18 +00:00
// [Function] Main Window Function
2023-04-27 14:54:48 +00:00
// BUILDER "build": "
2023-04-26 21:37:15 +00:00
2023-04-26 21:26:20 +00:00
async function createWindow() {
2023-04-24 15:51:18 +00:00
const win = new BrowserWindow({
width: 300,
height: 500,
minWidth: 300,
minHeight: 500,
resizable: false,
movable: true,
closable: true,
frame: false,
icon: path.join(__dirname, './src/logo.ico'),
title: "Submanager",
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
devTools: true
}
})
2023-04-29 16:19:45 +00:00
if(process.env.DEV != "true") {
updater.checkUpdate()
} else {
2023-04-24 15:51:18 +00:00
2023-04-29 16:19:45 +00:00
log.update("Desactivation des mises a jour -> DEV MOD ENABLE")
}
2023-04-24 15:51:18 +00:00
2023-04-26 21:26:20 +00:00
await win.loadFile("templates/login/login.html")
2023-04-27 10:10:23 +00:00
var socket = null
2023-04-26 21:26:20 +00:00
2023-04-27 10:10:23 +00:00
if(process.env.DEV == "true") {
2023-04-26 21:26:20 +00:00
2023-04-27 10:10:23 +00:00
socket = io("ws://localhost:4000", {
autoConnect: false,
reconnection: false
});
log.client("DEVELOPMENT MODE --- QUIT IMMEDIATELY")
} else {
socket = io("ws://alpha.raphix.fr:4000", {
autoConnect: false,
reconnection: false
})
2023-04-28 15:29:41 +00:00
2023-04-27 10:10:23 +00:00
}
2023-04-26 21:26:20 +00:00
2023-04-27 10:10:23 +00:00
2023-04-26 21:26:20 +00:00
socket.connect()
socket.on("connect", () => {
log.client("Connexion au serveur ... Finish !")
if(!fs.existsSync( __dirname + path.sep + "settings.json")) {
win.webContents.send("connectSuccess")
} else {
const settings = require( __dirname + path.sep + "settings.json")
if(settings.token) {
log.client("Auth : Connexion avec le Token Discord !")
socket.emit("authByToken", settings.token)
} else {
win.webContents.send("connectSuccess")
}
}
})
socket.on("authByTokenAnswer", (resp, token) => {
if(resp == true) {
win.loadFile("templates/app/app.html")
} else {
fs.rmSync( __dirname + path.sep + "settings.json")
2023-04-28 15:29:41 +00:00
win.webContents.send("connectFailed")
2023-04-26 21:26:20 +00:00
}
})
socket.io.on("error", () => {
log.client("Erreur lors de la connexion entre le serveur et le client !")
win.webContents.send("connectFailed")
})
ipc.on("retryLogin", () => {
log.client("Reconnexion au serveur ... Progressing !")
2023-04-29 12:43:58 +00:00
socket.close()
2023-04-26 21:26:20 +00:00
socket.connect()
2023-04-29 12:43:58 +00:00
})
ipc.on("stateOfConnection", () => {
if(socket.disconnected == true) {
socket.connect()
} else {
if(!fs.existsSync( __dirname + path.sep + "settings.json")) {
win.webContents.send("connectSuccess")
} else {
const settings = require( __dirname + path.sep + "settings.json")
if(settings.token) {
log.client("Auth : Connexion avec le Token Discord !")
socket.emit("authByToken", settings.token)
} else {
win.webContents.send("connectSuccess")
}
}
}
2023-04-26 21:26:20 +00:00
})
ipc.on("discordlogin", () => {
socket.emit("authNeedLogin")
log.client("Discord Auth : Demande du Token vers le serveur !")
win.minimize()
})
socket.on("authFailed", () => {
win.webContents.send("discordFailed")
2023-04-27 10:10:23 +00:00
win.restore()
2023-04-26 21:26:20 +00:00
log.client("Discord Auth : Erreur lors de la connexion vers Discord !")
})
2023-04-29 12:43:58 +00:00
socket.on("checkFailed", () => {
win.webContents.send("discordCheckFailed")
win.restore()
log.client("Discord Auth : Erreur lors de la vérification de Discord !")
})
2023-04-26 21:26:20 +00:00
socket.on("authOpenLink", (link) => {
log.client("Discord Auth : Redirection vers le service Discord !")
shell.openExternal(link)
})
2023-04-27 10:10:23 +00:00
socket.on("successLogin", (token) => {
const settings = {}
settings["token"] = token
2023-04-28 15:29:41 +00:00
fs.writeFile(__dirname + path.sep + "settings.json", JSON.stringify(settings, null, 2), (err) => {
log.client("Saving token in settings !")
log.client("Discord Auth : Redirection fait avec succes !")
win.loadFile("templates/app/app.html")
askUpdateState()
win.restore()
})
2023-04-26 21:26:20 +00:00
})
socket.on("updateState", (data) => {
log.client("State : Update en cours !")
win.webContents.send("updateData", data)
})
socket.on("actualize", (data) => {
log.client("Actualisation : Update en cours !")
win.webContents.send("actualize", data)
})
socket.on("findResult", (data) => {
2023-04-27 10:10:23 +00:00
log.client("Recherche : Termine et recupere")
2023-04-26 21:26:20 +00:00
win.webContents.send("findResult", data)
})
ipc.on("play", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Play / Pause Requested !")
socket.emit("play", settings.token)
})
2023-04-28 15:29:41 +00:00
ipc.on("loop", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Loop Requested !")
socket.emit("loop", settings.token)
})
2023-04-26 21:26:20 +00:00
ipc.on("forward", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Forward Requested !")
socket.emit("forward", settings.token)
})
ipc.on("backward", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Backward Requsted !")
socket.emit("backward", settings.token)
})
ipc.on("exitBot", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Exit Bot Requsted !")
socket.emit("exit", settings.token)
})
ipc.on("deleteQueue", (ev, identifier) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Delete Track queue Bot Requsted !")
socket.emit("deleteQueue", settings.token, identifier)
})
2023-04-30 17:00:04 +00:00
ipc.on("moveQueue", (ev, identifier) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Move queue Bot Requsted !")
socket.emit("moveQueue", settings.token, identifier)
})
2023-04-26 21:26:20 +00:00
ipc.on("findReq", (ev, value) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Find search Bot Requsted !")
socket.emit("find", settings.token, value)
})
ipc.on("addQueue", (ev, url) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Add song Bot Requsted !")
socket.emit("addQueue", settings.token, url)
})
ipc.on("listClear", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Clear Queue Bot Requsted !")
socket.emit("listClear", settings.token)
})
2023-04-28 15:29:41 +00:00
ipc.on("restart", () => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Restart Bot Requsted !")
socket.emit("restart", settings.token)
})
ipc.on("seek", (ev, pos) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Seek Bot Requsted !")
socket.emit("seek", settings.token, pos)
})
ipc.on("volume", (ev, pos) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Control : Volume Bot Requsted !")
socket.emit("volume", settings.token, pos)
})
2023-04-26 21:26:20 +00:00
ipc.on("signout", () => {
if(fs.statSync(__dirname + path.sep + "settings.json")) {
fs.rmSync(__dirname + path.sep + "settings.json")
}
2023-05-01 21:41:37 +00:00
2023-04-26 21:26:20 +00:00
win.loadFile("template/login/login.html")
socket.disconnect()
})
2023-05-01 21:41:37 +00:00
2023-04-30 17:00:04 +00:00
ipc.on("report", (ev, report) => {
const settings = require( __dirname + path.sep + "settings.json")
log.client("Report : Envoi d'un rapport !")
report["version"] = require("./package.json").version
socket.emit("report", settings.token, report)
})
socket.on("reportAns", (ans) => {
win.webContents.send("reportForm", ans)
})
2023-04-30 21:42:49 +00:00
ipc.on("forceUpdate", () => {
if(process.env.DEV != "true") {
updater.update()
} else {
log.update("ABORT : MODE DEV ENABLE")
}
})
2023-04-26 21:26:20 +00:00
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient('submanager', process.execPath, [path.resolve(process.argv[1])])
}
} else {
app.setAsDefaultProtocolClient('submanager')
}
ipc.on("close", () => {
socket.disconnect()
2023-04-24 15:51:18 +00:00
app.quit()
})
2023-04-26 21:26:20 +00:00
ipc.on("minimize", () => {
win.minimize()
})
ipc.on("askUpdateState", () => {
2023-04-30 17:00:04 +00:00
askUpdateState()
2023-04-26 21:26:20 +00:00
})
2023-04-28 15:29:41 +00:00
async function askUpdateState() {
2023-04-26 21:26:20 +00:00
const settings = require( __dirname + path.sep + "settings.json")
2023-04-28 15:29:41 +00:00
console.log(settings.token)
await socket.emit("getState", settings.token)
2023-04-26 21:26:20 +00:00
}
socket.on("disconnect", async () => {
await win.loadFile("templates/login/login.html")
await win.webContents.send("connectFailed")
2023-04-29 12:43:58 +00:00
2023-04-26 21:26:20 +00:00
});
2023-04-24 15:51:18 +00:00
}
2023-04-26 21:26:20 +00:00
function sts() {
const settings = require( __dirname + path.sep + "settings.json")
return settings
}
app.on("open-url", (ev, url) => {
app.quit()
})
2023-04-24 15:51:18 +00:00
app.whenReady().then(() => {
2023-04-30 17:00:04 +00:00
const icon = nativeImage.createFromPath(__dirname + path.sep + 'src' + path.sep + "logo.ico")
2023-04-24 15:51:18 +00:00
tray = new Tray(icon)
const contextMenu = Menu.buildFromTemplate([
{ label:"Quitter", click() { app.quit()}}
])
tray.setToolTip("Submanager")
tray.setContextMenu(contextMenu)
//[Operation] - Check settings
2023-04-29 16:19:45 +00:00
log.client("Submanager - Version : " + require("./package.json").version + " - Raphix")
2023-04-26 21:26:20 +00:00
log.client("Starting Application")
2023-04-29 16:19:45 +00:00
createWindow()
2023-04-24 15:51:18 +00:00
app.on('activate', () => {
2023-04-26 21:26:20 +00:00
autoUpdater.checkForUpdates()
2023-04-24 15:51:18 +00:00
if(BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})
2023-04-26 21:26:20 +00:00
//EXPORT COMMAND : npx electron-packager . submanager-beta-1 --platform="win32" --out="C:\Users\picot\OneDrive\Bureau\"