Skip to content

Commit 55345eb

Browse files
Specrochabou
authored andcommitted
Fix Windows context menu (vercel#1831)
System context menu refactoring. Fix problems when update/uninstall Hyper.
1 parent edd8667 commit 55345eb

File tree

1 file changed

+53
-25
lines changed

1 file changed

+53
-25
lines changed

app/system-context-menu.js

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,70 @@ const regParts = [
88
{name: 'Icon', value: `${appPath}`}
99
];
1010

11-
function isRegistered(callback) {
12-
new Registry({
13-
hive: 'HKCU',
14-
key: `${regKey}\\${regParts[0].key}`
15-
}).get(regParts[0].name, (err, entry) => {
16-
callback(!err && entry && entry.value === regParts[0].value);
11+
function addValues(hyperKey, commandKey, callback) {
12+
hyperKey.set(regParts[1].name, Registry.REG_SZ, regParts[1].value, err => {
13+
if (err) {
14+
console.error(err.message);
15+
}
16+
hyperKey.set(regParts[2].name, Registry.REG_SZ, regParts[2].value, err => {
17+
if (err) {
18+
console.error(err.message);
19+
}
20+
commandKey.set(regParts[0].name, Registry.REG_SZ, regParts[0].value, err => {
21+
if (err) {
22+
console.error(err.message);
23+
}
24+
callback();
25+
});
26+
});
1727
});
1828
}
1929

2030
exports.add = function (callback) {
21-
isRegistered(registered => {
22-
if (!registered) {
23-
const regPromises = [];
24-
regParts.forEach(part => {
25-
const reg = new Registry({hive: 'HKCU', key: part.key ? `${regKey}\\${part.key}` : regKey});
26-
reg.create(() => {
27-
regPromises.push(new Promise((resolve, reject) => {
28-
reg.set(part.name, Registry.REG_SZ, part.value, err => {
29-
if (err === null) {
30-
resolve(true);
31-
} else {
32-
return reject(err);
33-
}
34-
});
35-
}));
31+
const hyperKey = new Registry({hive: 'HKCU', key: regKey});
32+
const commandKey = new Registry({hive: 'HKCU', key: `${regKey}\\${regParts[0].key}`});
33+
34+
hyperKey.keyExists((err, exists) => {
35+
if (err) {
36+
console.error(err.message);
37+
}
38+
if (exists) {
39+
commandKey.keyExists((err, exists) => {
40+
if (err) {
41+
console.error(err.message);
42+
}
43+
if (exists) {
44+
addValues(hyperKey, commandKey, callback);
45+
} else {
46+
commandKey.create(err => {
47+
if (err) {
48+
console.error(err.message);
49+
}
50+
addValues(hyperKey, commandKey, callback);
51+
});
52+
}
53+
});
54+
} else {
55+
hyperKey.create(err => {
56+
if (err) {
57+
console.error(err.message);
58+
}
59+
commandKey.create(err => {
60+
if (err) {
61+
console.error(err.message);
62+
}
63+
addValues(hyperKey, commandKey, callback);
3664
});
3765
});
38-
Promise.all(regPromises).then(() => callback());
3966
}
4067
});
4168
};
4269

4370
exports.remove = function (callback) {
44-
isRegistered(registered => {
45-
if (registered) {
46-
new Registry({hive: 'HKCU', key: regKey}).destroy(() => callback());
71+
new Registry({hive: 'HKCU', key: regKey}).destroy(err => {
72+
if (err) {
73+
console.error(err.message);
4774
}
75+
callback();
4876
});
4977
};

0 commit comments

Comments
 (0)