Fix Windows context menu (#1831)

System context menu refactoring.
Fix problems when update/uninstall Hyper.
This commit is contained in:
Liudas Dzisevicius 2017-05-20 20:46:33 +03:00 committed by CHaBou
parent edd8667801
commit 55345ebe25

View file

@ -8,42 +8,70 @@ const regParts = [
{name: 'Icon', value: `${appPath}`} {name: 'Icon', value: `${appPath}`}
]; ];
function isRegistered(callback) { function addValues(hyperKey, commandKey, callback) {
new Registry({ hyperKey.set(regParts[1].name, Registry.REG_SZ, regParts[1].value, err => {
hive: 'HKCU', if (err) {
key: `${regKey}\\${regParts[0].key}` console.error(err.message);
}).get(regParts[0].name, (err, entry) => { }
callback(!err && entry && entry.value === regParts[0].value); 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) { exports.add = function (callback) {
isRegistered(registered => { const hyperKey = new Registry({hive: 'HKCU', key: regKey});
if (!registered) { const commandKey = new Registry({hive: 'HKCU', key: `${regKey}\\${regParts[0].key}`});
const regPromises = [];
regParts.forEach(part => { hyperKey.keyExists((err, exists) => {
const reg = new Registry({hive: 'HKCU', key: part.key ? `${regKey}\\${part.key}` : regKey}); if (err) {
reg.create(() => { console.error(err.message);
regPromises.push(new Promise((resolve, reject) => { }
reg.set(part.name, Registry.REG_SZ, part.value, err => { if (exists) {
if (err === null) { commandKey.keyExists((err, exists) => {
resolve(true); if (err) {
} else { console.error(err.message);
return reject(err); }
} 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) { exports.remove = function (callback) {
isRegistered(registered => { new Registry({hive: 'HKCU', key: regKey}).destroy(err => {
if (registered) { if (err) {
new Registry({hive: 'HKCU', key: regKey}).destroy(() => callback()); console.error(err.message);
} }
callback();
}); });
}; };