diff --git a/src/client/assets/css/checkingUpdate.css b/src/client/assets/css/checkingUpdate.css new file mode 100644 index 0000000..f8decbb --- /dev/null +++ b/src/client/assets/css/checkingUpdate.css @@ -0,0 +1,68 @@ +* { + box-sizing: border-box; +} + +html{ + height: 100%; +} + +body{ + background-color: black; + background-image: url("../images/background.jpg"); + background-size: cover; + background-repeat: no-repeat; + margin:0; + height:100%; + font-family: "Roboto", sans-serif; + color: black; +} + +.dots-3 { + width: 60px; + aspect-ratio: 2; + --_g: no-repeat radial-gradient(circle closest-side,#000 90%,#0000); + background: + var(--_g) 0% 50%, + var(--_g) 50% 50%, + var(--_g) 100% 50%; + background-size: calc(100%/3) 50%; + animation: d3 1s infinite linear; + position: relative; + left: 50%; + transform: translateX(-50%); +} + +@keyframes d3 { + 20%{background-position:0% 0%, 50% 50%,100% 50%} + 40%{background-position:0% 100%, 50% 0%,100% 50%} + 60%{background-position:0% 50%, 50% 100%,100% 0%} + 80%{background-position:0% 50%, 50% 50%,100% 100%} +} + +#fullscreen { + position: absolute; + top: 28px; + width: 100%; + height: calc(100% - 28px); + background-color: rgba(0, 0, 0, 0.6); + z-index: 10; +} + +#close { + position: absolute; + top: 28px; + left: 5px; + color: white; + cursor: pointer; +} + +#fullscreen-content { + position: relative; + top: 50%; + transform: translateY(-50%); + width: 100%; + background: white; + max-height: 80vh; + text-align: center; + padding: 25px 0; +} \ No newline at end of file diff --git a/src/client/assets/js/checkingUpdate.js b/src/client/assets/js/checkingUpdate.js new file mode 100644 index 0000000..5b5ebb1 --- /dev/null +++ b/src/client/assets/js/checkingUpdate.js @@ -0,0 +1,25 @@ +const vue = require('vue/dist/vue.cjs.js') +app = vue.createApp({ + data() { + return { + displayFullscreen: "block", + fullscreenText: "Checking for updates..." + } + }, + mounted() { + }, + methods: { + sendCheckingUpdate() { + ipcRenderer.send("checking-update"); + }, + closeFullscreen () { + this.displayFullscreen = "none" + } + }, +}); + +app.mount("#vue"); + +ipcRenderer.on("update-available", (event, arg) => { + this.fullscreenText = "Mise à jour disponible, téléchargement..." +}); \ No newline at end of file diff --git a/src/client/assets/js/index.js b/src/client/assets/js/index.js index 54e9acd..509b37a 100644 --- a/src/client/assets/js/index.js +++ b/src/client/assets/js/index.js @@ -1,5 +1,6 @@ const os = require('os') const totalMem = os.totalmem() / (1.049 * Math.pow(10, 6)) +const vue = require('vue/dist/vue.cjs.js') app = vue.createApp({ data() { diff --git a/src/client/assets/js/login.js b/src/client/assets/js/login.js index 8715678..5ea9a4a 100644 --- a/src/client/assets/js/login.js +++ b/src/client/assets/js/login.js @@ -1,3 +1,4 @@ +const vue = require('vue/dist/vue.cjs.js') app = vue.createApp({ data() { return { diff --git a/src/client/assets/js/preload.js b/src/client/assets/js/preload.js index 76c5a59..4fd6d9a 100644 --- a/src/client/assets/js/preload.js +++ b/src/client/assets/js/preload.js @@ -1,6 +1,5 @@ 'use strict'; const { ipcRenderer } = require('electron'); -const vue = require('vue/dist/vue.cjs.js') let app; window.addEventListener("DOMContentLoaded", () => { const minimizeButton = document.getElementById("minimize-btn") diff --git a/src/client/checkingUpdate.html b/src/client/checkingUpdate.html new file mode 100644 index 0000000..2054d00 --- /dev/null +++ b/src/client/checkingUpdate.html @@ -0,0 +1,36 @@ + + + + + Altarik Launcher + + + + + + + + +
+ +
+
close
+
+

{{ fullscreenText }}

+
+
+
+
+ + + + + diff --git a/src/server/main.js b/src/server/main.js index 15ddea5..99ab923 100644 --- a/src/server/main.js +++ b/src/server/main.js @@ -1,6 +1,9 @@ const { app, BrowserWindow, Menu, ipcMain, autoUpdater, dialog } = require('electron') const logger = require('electron-log') const { join } = require('path') +const updater = require('./updater.js') +let updaterInstance = null + if (require('electron-squirrel-startup')) { require("./install.js").handleSquirrelEvent(app) @@ -26,8 +29,9 @@ function createWindow () { frame: false }) //Menu.setApplicationMenu(null) - win.loadFile('src/client/login.html').then(() => { - require('./updater.js').configUpdater(app, autoUpdater, dialog, logger, showNotification) + win.loadFile('src/client/checkingUpdate.html').then(() => { + updaterInstance = new updater.Updater(app, win, autoUpdater, dialog, logger, showNotification) + updaterInstance.configUpdater() }) win.on("close", () => { app.quit() @@ -90,4 +94,8 @@ ipcMain.on("disconnect", () => { ipcMain.on("pageReady", (event) => { event.sender.send("nick", { name: minecraft.auth.name }) minecraft.getModsInformations(event) +}) + +ipcMain.on("checking-update", () => { + updaterInstance.checkForUpdates(win, showNotification) }) \ No newline at end of file diff --git a/src/server/updater.js b/src/server/updater.js index 72bec7e..523b6f6 100644 --- a/src/server/updater.js +++ b/src/server/updater.js @@ -2,52 +2,65 @@ const isDev = require('electron-is-dev') const pkg = require('../../package.json') const server = 'https://update.electronjs.org' -function configUpdater(app, autoUpdater, dialog, logger, showNotification) { - logger.info(`electron version: ${process.versions['electron']}`) - logger.info(`chrome version: ${process.versions['chrome']}`) - logger.info(`Node version: ${process.versions['node']}`) - logger.info(`platform: ${process.platform}`) - logger.info(`arch: ${process.arch}`) - if(isDev) { - logger.info(`developpement version ${app.getVersion()}`) - return +class Updater { + + constructor(app, win, autoUpdater, dialog, logger, ipcMain) { + this.app = app + this.win = win + this.autoUpdater = autoUpdater + this.dialog = dialog + this.logger = logger + this.ipcMain = ipcMain } - logger.info(`production version ${app.getVersion()}`) - - const feed = `${server}/${pkg.repository}/${process.platform}-${process.arch}/${app.getVersion()}` - autoUpdater.setFeedURL(feed) - logger.info("Checking for update...") - autoUpdater.checkForUpdates() - autoUpdater.on('update-downloaded', (_event, releaseNotes, releaseName) => { - const dialogOpts = { - type: 'info', - buttons: ['Rédémarrer', 'Plus tard'], - title: 'Une mise à jour du launcher est disponible', - message: process.platform === 'win32' ? releaseNotes : releaseName, - detail: 'Une nouvelle version du launcher a été téléchargé. Redémarrez l\'application pour appliquer les mises à jour.' + configUpdater() { + this.logger.info(`electron version: ${process.versions['electron']}`) + this.logger.info(`chrome version: ${process.versions['chrome']}`) + this.logger.info(`Node version: ${process.versions['node']}`) + this.logger.info(`platform: ${process.platform}`) + this.logger.info(`arch: ${process.arch}`) + if(isDev) { + this.logger.info(`developpement version ${this.app.getVersion()}`) + this.win.loadFile('src/client/login.html') + return } - - dialog.showMessageBox(dialogOpts).then((returnValue) => { - if (returnValue.response === 0) { - logger.info("Leaving application to install update...") - autoUpdater.quitAndInstall() - } + this.logger.info(`production version ${this.app.getVersion()}`) + + const feed = `${server}/${pkg.repository}/${process.platform}-${process.arch}/${this.app.getVersion()}` + this.autoUpdater.setFeedURL(feed) + + // TODO : replace dialog by automatic restart + this.autoUpdater.on('update-downloaded', (_event, releaseNotes, releaseName) => { + this.logger.info(`update downloaded ${releaseName}`) + this.logger.info("Leaving application to install update...") + this.autoUpdater.quitAndInstall() }) - }) + + } - autoUpdater.on('error', message => { - showNotification("Impossible de mettre à jour le launcher", "vérifier votre connexion", "warning") - logger.error('There was a problem updating the application') - logger.error(message) - }) + checkForUpdates(win, showNotification) { + this.logger.info("Checking for update...") + this.autoUpdater.checkForUpdates() + this.autoUpdater.on('error', message => { + this.logger.error('There was a problem updating the application') + this.logger.error(message) + win.loadFile('src/client/login.html').then(() => { + showNotification("Une erreur est survenue lors de la vérification de la mise à jour", "Veuillez vérifier votre connexion internet et réessayer", "error") + }) + }) + + this.autoUpdater.on('update-available', () => { + this.logger.info("update available, downloading...") + win.webContents.send("update-available") + }) + this.autoUpdater.on("update-not-available", () => { + this.logger.info("update not available") + win.loadFile('src/client/login.html') + }) + } - autoUpdater.on('update-available', () => { - showNotification("Mise à jour", "Téléchargement de la mise à jour", "warning") - logger.info("update available, downloading...") - }) } module.exports = { - configUpdater + Updater }