/
githubmirror
/
atom
Обзор
Документация
Войти
/
githubmirror
/
atom
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v1.59.0
src/main-process/win-shell.js
104 строки
3 KB
Rafael Oleza
Make get-app-name module compatible with the renderer process
04 июл 2019, 16:21
04 июл 2019, 16:21
f0a4dcd
Код
Авторство
О чём код?
const Registry = require('winreg'); const Path = require('path'); const getAppName = require('../get-app-name'); const appName = getAppName(); const exeName = Path.basename(process.execPath); const appPath = `"${process.execPath}"`; const fileIconPath = `"${Path.join( process.execPath, '..', 'resources', 'cli', 'file.ico' )}"`; class ShellOption { constructor(key, parts) { this.isRegistered = this.isRegistered.bind(this); this.register = this.register.bind(this); this.deregister = this.deregister.bind(this); this.update = this.update.bind(this); this.key = key; this.parts = parts; } isRegistered(callback) { new Registry({ hive: 'HKCU', key: `${this.key}\\${this.parts[0].key}` }).get(this.parts[0].name, (err, val) => callback(err == null && val != null && val.value === this.parts[0].value) ); } register(callback) { let doneCount = this.parts.length; this.parts.forEach(part => { let reg = new Registry({ hive: 'HKCU', key: part.key != null ? `${this.key}\\${part.key}` : this.key }); return reg.create(() => reg.set(part.name, Registry.REG_SZ, part.value, () => { if (--doneCount === 0) return callback(); }) ); }); } deregister(callback) { this.isRegistered(isRegistered => { if (isRegistered) { new Registry({ hive: 'HKCU', key: this.key }).destroy(() => callback(null, true) ); } else { callback(null, false); } }); } update(callback) { new Registry({ hive: 'HKCU', key: `${this.key}\\${this.parts[0].key}` }).get(this.parts[0].name, (err, val) => { if (err != null || val == null) { callback(err); } else { this.register(callback); } }); } } exports.appName = appName; exports.fileHandler = new ShellOption( `\\Software\\Classes\\Applications\\${exeName}`, [ { key: 'shell\\open\\command', name: '', value: `${appPath} "%1"` }, { key: 'shell\\open', name: 'FriendlyAppName', value: `${appName}` }, { key: 'DefaultIcon', name: '', value: `${fileIconPath}` } ] ); let contextParts = [ { key: 'command', name: '', value: `${appPath} "%1"` }, { name: '', value: `Open with ${appName}` }, { name: 'Icon', value: `${appPath}` } ]; exports.fileContextMenu = new ShellOption( `\\Software\\Classes\\*\\shell\\${appName}`, contextParts ); exports.folderContextMenu = new ShellOption( `\\Software\\Classes\\Directory\\shell\\${appName}`, contextParts ); exports.folderBackgroundContextMenu = new ShellOption( `\\Software\\Classes\\Directory\\background\\shell\\${appName}`, JSON.parse(JSON.stringify(contextParts).replace('%1', '%V')) );