From 73653d69c3860ad2606466c2517893a413503a11 Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Mon, 11 Aug 2014 17:46:34 +0100 Subject: [PATCH] Simplified CEF callbacks with Promise wrapper. Hooray for promises! --- resources/report/js/plugin.js | 13 +- resources/report/js/script.js | 275 +++++++++++----------------------- 2 files changed, 91 insertions(+), 197 deletions(-) diff --git a/resources/report/js/plugin.js b/resources/report/js/plugin.js index acddec48..c2c3b6bf 100644 --- a/resources/report/js/plugin.js +++ b/resources/report/js/plugin.js @@ -101,21 +101,14 @@ function Plugin(obj) { } Plugin.prototype.getConflictingPlugins = function() { - var request = { + var request = JSON.stringify({ name: 'getConflictingPlugins', args: [ this.name ] - }; - - var request_id = window.cefQuery({ - request: JSON.stringify(request), - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } }); + + loot.query(request).catch(processCefError); } Plugin.prototype.createCard = function() { diff --git a/resources/report/js/script.js b/resources/report/js/script.js index 7de67a5e..e8db818e 100644 --- a/resources/report/js/script.js +++ b/resources/report/js/script.js @@ -23,6 +23,24 @@ */ 'use strict'; var loot = {}; + +/* Returns a cefQuery as a Promise. */ +loot.query = function(request) { + return new Promise(function(resolve, reject) { + window.cefQuery({ + request: request, + persistent: false, + onSuccess: resolve, + onFailure: function(errorCode, errorMessage) { + reject(Error('Error code: ' + errorCode + '; ' + errorMessage)) + } + }); + }) +} +function processCefError(err) { + showMessageBox('error', 'Error', err.message); +} + var marked; function isStorageSupported() { try { @@ -180,14 +198,7 @@ function showMessageBox(type, title, text) { dialog.showModal(type, title, text); } function openLogLocation(evt) { - var request_id = window.cefQuery({ - request: 'openLogLocation', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('openLogLocation').catch(processCefError); } function updateSelectedGame() { /* Highlight game in menu. Could use fa-chevron-right instead. */ @@ -243,93 +254,47 @@ function changeGame(evt) { /* Now send off a CEF query with the folder name of the new game. */ - var request = { + var request = JSON.stringify({ name: 'changeGame', args: [ evt.currentTarget.getAttribute('data-target') ] - }; - - // Create and send a new query. - var request_id = window.cefQuery({ - request: JSON.stringify(request), - persistent: false, - onSuccess: function(response) { - - /* First clear the UI of all existing game-specific data. Also - clear the card and li variables for each plugin object. */ - loot.games[index].plugins.forEach(function(plugin){ - plugin.card.parentElement.removeChild(plugin.card); - plugin.card = undefined; - plugin.li.parentElement.removeChild(plugin.li); - plugin.li = undefined; - }); - var globalMessages = document.getElementById('generalMessages').getElementsByTagName('ul')[0]; - while (globalMessages.firstElementChild) { - globalMessages.removeChild(globalMessages.firstElementChild); - } - - /* Now update interface for new data. */ - updateInterfaceWithGameInfo(response); - - /* Now update game menu to highlight the newly selected game. */ - updateSelectedGame(); - }, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } }); + loot.query(request).then(function(result){ + /* First clear the UI of all existing game-specific data. Also + clear the card and li variables for each plugin object. */ + loot.games[index].plugins.forEach(function(plugin){ + plugin.card.parentElement.removeChild(plugin.card); + plugin.card = undefined; + plugin.li.parentElement.removeChild(plugin.li); + plugin.li = undefined; + }); + var globalMessages = document.getElementById('generalMessages').getElementsByTagName('ul')[0]; + while (globalMessages.firstElementChild) { + globalMessages.removeChild(globalMessages.firstElementChild); + } + + /* Now update interface for new data. */ + updateInterfaceWithGameInfo(result); + + /* Now update game menu to highlight the newly selected game. */ + updateSelectedGame(); + }).catch(processCefError); } function openReadme(evt) { - // Create and send a new query. - var request_id = window.cefQuery({ - request: 'openReadme', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('openReadme').catch(processCefError); } function updateMasterlist(evt) { - var request_id = window.cefQuery({ - request: 'updateMasterlist', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('updateMasterlist').catch(processCefError); } function sortPlugins(evt) { - var request_id = window.cefQuery({ - request: 'sortPlugins', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('sortPlugins').catch(processCefError); } function applySort(evt) { - var request_id = window.cefQuery({ - request: 'applySort', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('applySort').catch(processCefError); } function cancelSort(evt) { - var request_id = window.cefQuery({ - request: 'cancelSort', - persistent: false, - onSuccess: function(response) {}, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('cancelSort').catch(processCefError); } function redatePlugins(evt) { if (evt.target.classList.contains('disabled')) { @@ -510,30 +475,20 @@ function hideHoverText(evt) { } function startSearch(evt) { if (evt.target.value == '') { - var request_id = window.cefQuery({ - request: 'cancelFind', - persistent: false, - onSuccess: function(response) { evt.target.focus(); }, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } - }); + loot.query('cancelFind').then(function(result){ + evt.target.focus(); + }).catch(processCefError); } else { - var request = { + var request = JSON.stringify({ name: 'find', args: [ evt.target.value ] - }; - - var request_id = window.cefQuery({ - request: JSON.stringify(request), - persistent: false, - onSuccess: function(response) { evt.target.focus(); }, - onFailure: function(error_code, error_message) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); - } }); + + loot.query(request).then(function(result){ + evt.target.focus(); + }).catch(processCefError); } } @@ -607,96 +562,44 @@ function setupEventHandlers() { searchBox.addEventListener('search', startSearch, false); window.addEventListener('keyup', focusSearch, false); } -function processCefError(errorCode, errorMessage) { - showMessageBox('error', "Error", "Error code: " + error_code + "; " + error_message); -} function initVars() { - // Create and send a new query. - var request_id = window.cefQuery({ - request: 'getVersion', - persistent: false, - onSuccess: function(response) { - try { - loot.version = JSON.parse(response); + loot.query('getVersion').then(function(result){ + try { + loot.version = JSON.parse(result); - document.getElementById('LOOTVersion').textContent = loot.version; - } catch (e) { - console.log(e); - console.log('Response: ' + response); + document.getElementById('LOOTVersion').textContent = loot.version; + } catch (e) { + console.log(e); + console.log('Response: ' + result); + } + }).catch(processCefError); + + loot.query('getLanguages').then(function(result){ + try { + loot.languages = JSON.parse(result); + + /* Now fill in language options. */ + var settingsLangSelect = document.getElementById('languageSelect'); + var messageLangSelect = document.getElementById('messageRow').content.querySelector('.language'); + for (var i = 0; i < loot.languages.length; ++i) { + var option = document.createElement('option'); + option.value = loot.languages[i].locale; + option.textContent = loot.languages[i].name; + settingsLangSelect.appendChild(option); + messageLangSelect.appendChild(option.cloneNode(true)); } - }, - onFailure: processCefError - }); - var request_id = window.cefQuery({ - request: 'getLanguages', - persistent: false, - onSuccess: function(response) { - try { - loot.languages = JSON.parse(response); + } catch (e) { + console.log(e); + console.log('Response: ' + result); + } + }).catch(processCefError); - /* Now fill in language options. */ - var settingsLangSelect = document.getElementById('languageSelect'); - var messageLangSelect = document.getElementById('messageRow').content.querySelector('.language'); - for (var i = 0; i < loot.languages.length; ++i) { - var option = document.createElement('option'); - option.value = loot.languages[i].locale; - option.textContent = loot.languages[i].name; - settingsLangSelect.appendChild(option); - messageLangSelect.appendChild(option.cloneNode(true)); - } - } catch (e) { - console.log(e); - console.log('Response: ' + response); - } - }, - onFailure: processCefError - }); - - var parallelPromises = []; - - parallelPromises.push(new Promise(function(resolve, reject) { - var request_id = window.cefQuery({ - request: 'getGameTypes', - persistent: false, - onSuccess: resolve, - onFailure: function(errorCode, errorMessage) { - reject(Error('Error code: ' + error_code + '; ' + error_message)) - } - }); - })); - - parallelPromises.push(new Promise(function(resolve, reject) { - var request_id = window.cefQuery({ - request: 'getInstalledGames', - persistent: false, - onSuccess: resolve, - onFailure: function(errorCode, errorMessage) { - reject(Error('Error code: ' + error_code + '; ' + error_message)) - } - }); - })); - - parallelPromises.push(new Promise(function(resolve, reject) { - var request_id = window.cefQuery({ - request: 'getGameData', - persistent: false, - onSuccess: resolve, - onFailure: function(errorCode, errorMessage) { - reject(Error('Error code: ' + error_code + '; ' + error_message)) - } - }); - })); - - parallelPromises.push(new Promise(function(resolve, reject) { - var request_id = window.cefQuery({ - request: 'getSettings', - persistent: false, - onSuccess: resolve, - onFailure: function(errorCode, errorMessage) { - reject(Error('Error code: ' + error_code + '; ' + error_message)) - } - }); - })); + var parallelPromises = [ + loot.query('getGameTypes'), + loot.query('getInstalledGames'), + loot.query('getGameData'), + loot.query('getSettings'), + ]; Promise.all(parallelPromises).then(function(results) { try { @@ -768,9 +671,7 @@ function initVars() { gameSelect.value = loot.settings.game; document.getElementById('languageSelect').value = loot.settings.language; document.getElementById('debugVerbositySelect').value = loot.settings.debugVerbosity; - }).catch(function(err) { - console.log(err); - }); + }).catch(processCefError); } function getPriorityString(plugin) {