mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-10-31 19:36:39 -07:00
40de1e3cd3
Added News UI and implemented functionality. Removed westeroscraft.xml as we don't need to cache it. Updated westeroscraft.json. Updated Electron to v2.0.0
171 lines
6.9 KiB
JavaScript
171 lines
6.9 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.
|
|
// TODO Make this the case after implementation is done.
|
|
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..')
|
|
break
|
|
case 'update-available':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'New update available', info.version)
|
|
break
|
|
case 'update-downloaded':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'Update ' + info.version + ' ready to be installed.')
|
|
showUpdateUI(info)
|
|
break
|
|
case 'update-not-available':
|
|
console.log('%c[AutoUpdater]', 'color: #a02d2a; font-weight: bold', 'No new update found.')
|
|
break
|
|
case 'ready':
|
|
updateCheckListener = setInterval(() => {
|
|
ipcRenderer.send('autoUpdateAction', 'checkForUpdate')
|
|
}, 1800000)
|
|
ipcRenderer.send('autoUpdateAction', 'checkForUpdate')
|
|
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
|
|
}
|
|
})
|
|
ipcRenderer.send('autoUpdateAction', 'initAutoUpdater')
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
/* 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()
|
|
})
|
|
})
|
|
|
|
} 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()
|
|
}
|
|
}) |