From 55345ebe251cc41949362931c14bb2077f45da82 Mon Sep 17 00:00:00 2001 From: Liudas Dzisevicius Date: Sat, 20 May 2017 20:46:33 +0300 Subject: [PATCH] Fix Windows context menu (#1831) System context menu refactoring. Fix problems when update/uninstall Hyper. --- app/system-context-menu.js | 78 ++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/app/system-context-menu.js b/app/system-context-menu.js index 43237ef9..be429913 100644 --- a/app/system-context-menu.js +++ b/app/system-context-menu.js @@ -8,42 +8,70 @@ const regParts = [ {name: 'Icon', value: `${appPath}`} ]; -function isRegistered(callback) { - new Registry({ - hive: 'HKCU', - key: `${regKey}\\${regParts[0].key}` - }).get(regParts[0].name, (err, entry) => { - callback(!err && entry && entry.value === regParts[0].value); +function addValues(hyperKey, commandKey, callback) { + hyperKey.set(regParts[1].name, Registry.REG_SZ, regParts[1].value, err => { + if (err) { + console.error(err.message); + } + hyperKey.set(regParts[2].name, Registry.REG_SZ, regParts[2].value, err => { + if (err) { + console.error(err.message); + } + commandKey.set(regParts[0].name, Registry.REG_SZ, regParts[0].value, err => { + if (err) { + console.error(err.message); + } + callback(); + }); + }); }); } exports.add = function (callback) { - isRegistered(registered => { - if (!registered) { - const regPromises = []; - regParts.forEach(part => { - const reg = new Registry({hive: 'HKCU', key: part.key ? `${regKey}\\${part.key}` : regKey}); - reg.create(() => { - regPromises.push(new Promise((resolve, reject) => { - reg.set(part.name, Registry.REG_SZ, part.value, err => { - if (err === null) { - resolve(true); - } else { - return reject(err); - } - }); - })); + const hyperKey = new Registry({hive: 'HKCU', key: regKey}); + const commandKey = new Registry({hive: 'HKCU', key: `${regKey}\\${regParts[0].key}`}); + + hyperKey.keyExists((err, exists) => { + if (err) { + console.error(err.message); + } + if (exists) { + commandKey.keyExists((err, exists) => { + if (err) { + console.error(err.message); + } + if (exists) { + addValues(hyperKey, commandKey, callback); + } else { + commandKey.create(err => { + if (err) { + console.error(err.message); + } + addValues(hyperKey, commandKey, callback); + }); + } + }); + } else { + hyperKey.create(err => { + if (err) { + console.error(err.message); + } + commandKey.create(err => { + if (err) { + console.error(err.message); + } + addValues(hyperKey, commandKey, callback); }); }); - Promise.all(regPromises).then(() => callback()); } }); }; exports.remove = function (callback) { - isRegistered(registered => { - if (registered) { - new Registry({hive: 'HKCU', key: regKey}).destroy(() => callback()); + new Registry({hive: 'HKCU', key: regKey}).destroy(err => { + if (err) { + console.error(err.message); } + callback(); }); };