| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- // @ts-nocheck
- import $ from 'jquery'
- import { ipcRenderer, remote, shell, webFrame } from 'electron'
- import { LoggerUtil } from '../loggerutil'
- import isDev from '../isdev'
- /**
- * 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.
- */
- const loggerUICore = new LoggerUtil('%c[UICore]', 'color: #000668; font-weight: bold')
- const loggerAutoUpdater = new LoggerUtil('%c[AutoUpdater]', 'color: #000668; font-weight: bold')
- const loggerAutoUpdaterSuccess = new LoggerUtil('%c[AutoUpdater]', 'color: #209b07; font-weight: bold')
- // Log deprecation and process warnings.
- process.traceProcessWarnings = true
- process.traceDeprecation = true
- // 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':
- loggerAutoUpdater.log('Checking for update..')
- settingsUpdateButtonStatus('Checking for Updates..', true)
- break
- case 'update-available':
- loggerAutoUpdaterSuccess.log('New update available', info.version)
-
- if(process.platform === 'darwin'){
- info.darwindownload = `https://github.com/dscalzi/HeliosLauncher/releases/download/v${info.version}/helioslauncher-setup-${info.version}.dmg`
- showUpdateUI(info)
- }
-
- populateSettingsUpdateInformation(info)
- break
- case 'update-downloaded':
- loggerAutoUpdaterSuccess.log('Update ' + info.version + ' ready to be installed.')
- settingsUpdateButtonStatus('Install Now', false, () => {
- if(!isDev){
- ipcRenderer.send('autoUpdateAction', 'installUpdateNow')
- }
- })
- showUpdateUI(info)
- break
- case 'update-not-available':
- loggerAutoUpdater.log('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'){
- loggerAutoUpdater.log('No suitable releases found.')
- } else if(info.code === 'ERR_XML_MISSED_ELEMENT'){
- loggerAutoUpdater.log('No releases found.')
- } else {
- loggerAutoUpdater.error('Error during update check..', info)
- loggerAutoUpdater.debug('Error Code:', info.code)
- }
- }
- break
- default:
- loggerAutoUpdater.log('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(){
- loggerUICore.log('UICore Initialized');
- })*/
- document.addEventListener('readystatechange', function () {
- if (document.readyState === 'interactive'){
- loggerUICore.log('UICore Initializing..')
- // Bind close button.
- // DONE
- Array.from(document.getElementsByClassName('fCb')).map((val) => {
- val.addEventListener('click', e => {
- const window = remote.getCurrentWindow()
- window.close()
- })
- })
- // Bind restore down button.
- // DONE
- 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 as HTMLElement).blur()
- })
- })
- // Bind minimize button.
- // DONE
- Array.from(document.getElementsByClassName('fMb')).map((val) => {
- val.addEventListener('click', e => {
- const window = remote.getCurrentWindow()
- window.minimize();
- (document.activeElement as HTMLElement).blur()
- })
- })
- // Remove focus from social media buttons once they're clicked.
- Array.from(document.getElementsByClassName('mediaURL')).map(val => {
- val.addEventListener('click', e => {
- (document.activeElement as HTMLElement).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()
- 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.webContents.toggleDevTools()
- }
- })
|