339 lines
8.3 KiB
JavaScript
339 lines
8.3 KiB
JavaScript
const {app, BrowserWindow, ipcMain, Notification, nativeImage, Tray, Menu, shell} = require("electron")
|
|
const { autoUpdater } = require("electron-updater")
|
|
const path = require("path")
|
|
const fs = require("fs")
|
|
const ipc = ipcMain
|
|
const { io } = require("socket.io-client");
|
|
const log = require("./sublog");
|
|
const { platform } = require("os");
|
|
|
|
|
|
// [Function] Main Window Function
|
|
|
|
async function createWindow() {
|
|
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
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
await win.loadFile("templates/login/login.html")
|
|
|
|
|
|
|
|
const socket = io("ws://localhost:4000", {
|
|
autoConnect: false,
|
|
reconnection: false
|
|
|
|
});
|
|
|
|
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")
|
|
win.webContents.send("connectSuccess")
|
|
|
|
}
|
|
})
|
|
|
|
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 !")
|
|
socket.connect()
|
|
})
|
|
|
|
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")
|
|
log.client("Discord Auth : Erreur lors de la connexion vers Discord !")
|
|
})
|
|
|
|
socket.on("authOpenLink", (link) => {
|
|
log.client("Discord Auth : Redirection vers le service Discord !")
|
|
shell.openExternal(link)
|
|
|
|
})
|
|
|
|
socket.on("successLogin", () => {
|
|
log.client("Discord Auth : Redirection fait avec succes !")
|
|
win.loadFile("templates/app/app.html")
|
|
askUpdateState()
|
|
win.restore()
|
|
})
|
|
|
|
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) => {
|
|
|
|
log.client("Recherche : Terminé et récupéré")
|
|
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)
|
|
|
|
})
|
|
|
|
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)
|
|
|
|
})
|
|
|
|
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)
|
|
})
|
|
|
|
ipc.on("signout", () => {
|
|
|
|
if(fs.statSync(__dirname + path.sep + "settings.json")) {
|
|
|
|
fs.rmSync(__dirname + path.sep + "settings.json")
|
|
}
|
|
|
|
win.loadFile("template/login/login.html")
|
|
socket.disconnect()
|
|
|
|
})
|
|
|
|
socket.on("registerToken", (token) => {
|
|
|
|
const settings = {}
|
|
settings["token"] = token
|
|
|
|
fs.writeFileSync( __dirname + path.sep + "settings.json", JSON.stringify(settings, null, 2))
|
|
log.client("Saving token in settings !")
|
|
})
|
|
|
|
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()
|
|
app.quit()
|
|
})
|
|
|
|
ipc.on("minimize", () => {
|
|
win.minimize()
|
|
})
|
|
|
|
ipc.on("askUpdateState", () => {
|
|
|
|
askUpdateState()
|
|
})
|
|
|
|
function askUpdateState() {
|
|
|
|
const settings = require( __dirname + path.sep + "settings.json")
|
|
socket.emit("getState", settings.token)
|
|
}
|
|
|
|
socket.on("disconnect", async () => {
|
|
await win.loadFile("templates/login/login.html")
|
|
await win.webContents.send("connectFailed")
|
|
socket.connect()
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function sts() {
|
|
|
|
const settings = require( __dirname + path.sep + "settings.json")
|
|
return settings
|
|
}
|
|
|
|
app.on("open-url", (ev, url) => {
|
|
app.quit()
|
|
})
|
|
|
|
app.whenReady().then(() => {
|
|
|
|
const icon = nativeImage.createFromPath('src/logo.png')
|
|
tray = new Tray(icon)
|
|
|
|
|
|
const contextMenu = Menu.buildFromTemplate([
|
|
{ label:"Quitter", click() { app.quit()}}
|
|
])
|
|
|
|
tray.setToolTip("Submanager")
|
|
tray.setContextMenu(contextMenu)
|
|
|
|
//[Operation] - Check settings
|
|
|
|
createWindow()
|
|
log.client("Starting Application")
|
|
|
|
app.on('activate', () => {
|
|
|
|
autoUpdater.checkForUpdates()
|
|
if(BrowserWindow.getAllWindows().length === 0) {
|
|
createWindow()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
autoUpdater.on("update-available", (_event, releaseNotes, releaseName) => {
|
|
const dialogOpts = {
|
|
type: 'info',
|
|
buttons: ['Ok'],
|
|
title: 'Mise à jour de Submanager',
|
|
message: process.platform === 'win32' ? releaseNotes : releaseName,
|
|
detail: 'Cette version va être téléchargé automatiquement !'
|
|
}
|
|
dialog.showMessageBox(dialogOpts, (response) => {
|
|
|
|
});
|
|
})
|
|
|
|
autoUpdater.on("update-downloaded", (_event, releaseNotes, releaseName) => {
|
|
const dialogOpts = {
|
|
type: 'info',
|
|
buttons: ['Restart', 'Later'],
|
|
title: 'Mise à jour de Submanager',
|
|
message: process.platform === 'win32' ? releaseNotes : releaseName,
|
|
detail: 'Une nouvelle version a été téléchargé ! Redémarrer l\'application afin d\'effectuer les changements !'
|
|
};
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
if (returnValue.response === 0) autoUpdater.quitAndInstall()
|
|
})
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
//EXPORT COMMAND : npx electron-packager . submanager-beta-1 --platform="win32" --out="C:\Users\picot\OneDrive\Bureau\"
|