mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-12-23 04:02:14 -08:00
1566ff4e4c
Added a settings tab to manage updates. On this tab you can: * Init auto update check. * View update information (version, prerelease vs release, etc). * View update changelog. * Install updates (when downloaded). The green glow on the landing page now takes users to the settings tab. Updates can be installed from there. This UI can be changed in the future if needed.
200 lines
8.0 KiB
JavaScript
200 lines
8.0 KiB
JavaScript
/**
|
|
* Core UI functions are initialized in this file. This prevents
|
|
* unexpected errors from breaking the core features. Specifically,
|
|
* actions in this file should not require the usage of any internal
|
|
* modules, excluding dependencies.
|
|
*/
|
|
// Requirements
|
|
const $ = require('jquery')
|
|
const {ipcRenderer, remote, shell, webFrame} = require('electron')
|
|
const isDev = require('electron-is-dev')
|
|
|
|
// Disable eval function.
|
|
// eslint-disable-next-line
|
|
window.eval = global.eval = function () {
|
|
throw new Error('Sorry, this app does not support window.eval().')
|
|
}
|
|
|
|
// Display warning when devtools window is opened.
|
|
remote.getCurrentWebContents().on('devtools-opened', () => {
|
|
console.log('%cThe console is dark and full of terrors.', 'color: white; -webkit-text-stroke: 4px #a02d2a; font-size: 60px; font-weight: bold')
|
|
console.log('%cIf you\'ve been told to paste something here, you\'re being scammed.', 'font-size: 16px')
|
|
console.log('%cUnless you know exactly what you\'re doing, close this window.', 'font-size: 16px')
|
|
})
|
|
|
|
// Disable zoom, needed for darwin.
|
|
webFrame.setZoomLevel(0)
|
|
webFrame.setVisualZoomLevelLimits(1, 1)
|
|
webFrame.setLayoutZoomLevelLimits(0, 0)
|
|
|
|
// Initialize auto updates in production environments.
|
|
let updateCheckListener
|
|
if(!isDev){
|
|
ipcRenderer.on('autoUpdateNotification', (event, arg, info) => {
|
|
switch(arg){
|
|
case 'checking-for-update':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Checking for update..')
|
|
settingsUpdateButtonStatus('Checking for Updates..', true)
|
|
break
|
|
case 'update-available':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'New update available', info.version)
|
|
populateSettingsUpdateInformation(info)
|
|
break
|
|
case 'update-downloaded':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Update ' + info.version + ' ready to be installed.')
|
|
settingsUpdateButtonStatus('Install Now', false, () => {
|
|
if(!isDev){
|
|
ipcRenderer.send('autoUpdateAction', 'installUpdateNow')
|
|
}
|
|
})
|
|
showUpdateUI(info)
|
|
break
|
|
case 'update-not-available':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'No new update found.')
|
|
settingsUpdateButtonStatus('Check for Updates')
|
|
break
|
|
case 'ready':
|
|
updateCheckListener = setInterval(() => {
|
|
ipcRenderer.send('autoUpdateAction', 'checkForUpdate')
|
|
}, 1800000)
|
|
ipcRenderer.send('autoUpdateAction', 'checkForUpdate')
|
|
break
|
|
case 'realerror':
|
|
if(info != null && info.code != null){
|
|
if(info.code === 'ERR_UPDATER_INVALID_RELEASE_FEED'){
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'No suitable releases found.')
|
|
} else if(info.code === 'ERR_XML_MISSED_ELEMENT'){
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'No releases found.')
|
|
} else {
|
|
console.error('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Error during update check..', info)
|
|
console.debug('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Error Code:', info.code)
|
|
}
|
|
}
|
|
break
|
|
default:
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Unknown argument', arg)
|
|
break
|
|
}
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Send a notification to the main process changing the value of
|
|
* allowPrerelease. If we are running a prerelease version, then
|
|
* this will always be set to true, regardless of the current value
|
|
* of val.
|
|
*
|
|
* @param {boolean} val The new allow prerelease value.
|
|
*/
|
|
function changeAllowPrerelease(val){
|
|
ipcRenderer.send('autoUpdateAction', 'allowPrereleaseChange', val)
|
|
}
|
|
|
|
function showUpdateUI(info){
|
|
//TODO Make this message a bit more informative `${info.version}`
|
|
document.getElementById('image_seal_container').setAttribute('update', true)
|
|
document.getElementById('image_seal_container').onclick = () => {
|
|
/*setOverlayContent('Update Available', 'A new update for the launcher is available. Would you like to install now?', 'Install', 'Later')
|
|
setOverlayHandler(() => {
|
|
if(!isDev){
|
|
ipcRenderer.send('autoUpdateAction', 'installUpdateNow')
|
|
} else {
|
|
console.error('Cannot install updates in development environment.')
|
|
toggleOverlay(false)
|
|
}
|
|
})
|
|
setDismissHandler(() => {
|
|
toggleOverlay(false)
|
|
})
|
|
toggleOverlay(true, true)*/
|
|
switchView(getCurrentView(), VIEWS.settings, 500, 500, () => {
|
|
settingsNavItemListener(document.getElementById('settingsNavUpdate'), false)
|
|
})
|
|
}
|
|
}
|
|
|
|
/* jQuery Example
|
|
$(function(){
|
|
console.log('UICore Initialized');
|
|
})*/
|
|
|
|
document.addEventListener('readystatechange', function () {
|
|
if (document.readyState === 'interactive'){
|
|
console.log('UICore Initializing..')
|
|
|
|
// Bind close button.
|
|
Array.from(document.getElementsByClassName('fCb')).map((val) => {
|
|
val.addEventListener('click', e => {
|
|
const window = remote.getCurrentWindow()
|
|
window.close()
|
|
})
|
|
})
|
|
|
|
// Bind restore down button.
|
|
Array.from(document.getElementsByClassName('fRb')).map((val) => {
|
|
val.addEventListener('click', e => {
|
|
const window = remote.getCurrentWindow()
|
|
if(window.isMaximized()){
|
|
window.unmaximize()
|
|
} else {
|
|
window.maximize()
|
|
}
|
|
document.activeElement.blur()
|
|
})
|
|
})
|
|
|
|
// Bind minimize button.
|
|
Array.from(document.getElementsByClassName('fMb')).map((val) => {
|
|
val.addEventListener('click', e => {
|
|
const window = remote.getCurrentWindow()
|
|
window.minimize()
|
|
document.activeElement.blur()
|
|
})
|
|
})
|
|
|
|
// Remove focus from social media buttons once they're clicked.
|
|
Array.from(document.getElementsByClassName('mediaURL')).map(val => {
|
|
val.addEventListener('click', e => {
|
|
document.activeElement.blur()
|
|
})
|
|
})
|
|
|
|
} else if(document.readyState === 'complete'){
|
|
|
|
//266.01
|
|
//170.8
|
|
//53.21
|
|
// Bind progress bar length to length of bot wrapper
|
|
//const targetWidth = document.getElementById("launch_content").getBoundingClientRect().width
|
|
//const targetWidth2 = document.getElementById("server_selection").getBoundingClientRect().width
|
|
//const targetWidth3 = document.getElementById("launch_button").getBoundingClientRect().width
|
|
|
|
document.getElementById('launch_details').style.maxWidth = 266.01
|
|
document.getElementById('launch_progress').style.width = 170.8
|
|
document.getElementById('launch_details_right').style.maxWidth = 170.8
|
|
document.getElementById('launch_progress_label').style.width = 53.21
|
|
|
|
}
|
|
|
|
}, false)
|
|
|
|
/**
|
|
* Open web links in the user's default browser.
|
|
*/
|
|
$(document).on('click', 'a[href^="http"]', function(event) {
|
|
event.preventDefault()
|
|
//console.log(os.homedir())
|
|
shell.openExternal(this.href)
|
|
})
|
|
|
|
/**
|
|
* Opens DevTools window if you hold (ctrl + shift + i).
|
|
* This will crash the program if you are using multiple
|
|
* DevTools, for example the chrome debugger in VS Code.
|
|
*/
|
|
document.addEventListener('keydown', function (e) {
|
|
if((e.key === 'I' || e.key === 'i') && e.ctrlKey && e.shiftKey){
|
|
let window = remote.getCurrentWindow()
|
|
window.toggleDevTools()
|
|
}
|
|
}) |