UNPKG

record-desktop

Version:

Record gifs and take screenshots on linux, built with electron.

227 lines (177 loc) 6.46 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.setIcon = exports.notify = exports.emit = undefined; var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _browserWindow = require('browser-window'); var _browserWindow2 = _interopRequireDefault(_browserWindow); var _electronSaveFile = require('electron-save-file'); var _electronSaveFile2 = _interopRequireDefault(_electronSaveFile); var _nodeNotifier = require('node-notifier'); var _nodeNotifier2 = _interopRequireDefault(_nodeNotifier); var _config = require('./config'); var config = _interopRequireWildcard(_config); var _electron = require('electron'); var _constants = require('./../shared/constants'); var _shortcuts = require('./shortcuts'); var registerShortcuts = _interopRequireWildcard(_shortcuts); var _utils = require('./utils'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } if (process.env.NODE_ENV !== 'development') { process.env.NODE_ENV = 'production'; } var emit = exports.emit = function emit(event, body) { return mainWindow.webContents.send(event, body); }; var notify = exports.notify = function notify(text, err) { (0, _utils.log)(text, err || ''); if (config.getHasNotifications()) { _nodeNotifier2.default.notify({ title: 'record-desktop', message: text + (err ? ' ' + err.message : '') }); } }; var mainWindow = void 0; var indexProd = 'file://' + _path2.default.resolve(__dirname, '..', 'public', 'index.html'); var indexDev = 'file://' + _path2.default.resolve(__dirname, '..', 'public', 'index-dev.html'); var indexHtml = process.env.NODE_ENV === 'production' ? indexProd : indexDev; var indexIdle = 'file://' + _path2.default.resolve(__dirname, '..', 'public', 'index-idle.html'); var getMainWindow = function getMainWindow() { var hasShortcuts = registerShortcuts.hasShortcuts(); var initUrl = indexHtml + '#' + (hasShortcuts ? '' : 'settings'); if (mainWindow) { return mainWindow; } else if (process.env.NODE_ENV === 'production') { var ret = new _browserWindow2.default({ width: 800, height: 900, show: !hasShortcuts }); ret.loadURL(initUrl); return ret; } else { var _ret = new _browserWindow2.default({ width: 1200, height: 400 }); _ret.loadURL(initUrl); _ret.openDevTools(); return _ret; } }; var appIcon = void 0; var defaultIcon = _path2.default.resolve(__dirname + '/../icon.png'); var recordingIcon = _path2.default.resolve(__dirname + '/../icon-recording.png'); var setIcon = exports.setIcon = function setIcon(isRecording) { return appIcon.setImage(isRecording ? recordingIcon : defaultIcon); }; process.title = 'record-desktop'; process.on('unhandledRejection', function (err) { (0, _utils.log)(err.stack); notify(err.stack); }); _electron.app.on('ready', function () { mainWindow = getMainWindow(); var offloadContent = function offloadContent() { mainWindow.loadURL(indexIdle); }; mainWindow.on('minimize', function () { var mainWindow = getMainWindow(); mainWindow.setSkipTaskbar(true); mainWindow.hide(); offloadContent(); (0, _utils.log)('minimize'); }); mainWindow.on('restore', function () { var mainWindow = getMainWindow(); mainWindow.setSkipTaskbar(false); (0, _utils.log)('restore'); }); mainWindow.on('closed', function () { return mainWindow = appIcon = null; }); appIcon = new _electron.Tray(defaultIcon); appIcon.on('click', function () { var mainWindow = getMainWindow(); (0, _utils.log)('click appIcon ' + mainWindow.isVisible()); if (!mainWindow.isVisible()) { mainWindow.show(); mainWindow.loadURL(indexHtml + '#'); } else { mainWindow.hide(); offloadContent(); } }); var updateTrayMenu = function updateTrayMenu() { return (0, _utils.getFiles)(config.getFolder()).then(function (files) { appIcon.setContextMenu(_electron.Menu.buildFromTemplate([{ label: 'Latest', submenu: files.slice(0, 5).map(function (file) { return { label: file.filename, submenu: [{ label: 'Upload to imgur', click: function click() { return (0, _utils.uploadFile)(file.url); } }, { label: 'Delete', click: function click() { return (0, _utils.deleteFile)(file.url); } }, { label: 'Save as', click: function click() { return (0, _electronSaveFile2.default)(file.url); } }] }; }) }, { label: 'Browse Images', click: function click() { mainWindow.show(); mainWindow.loadURL(indexHtml + '#'); } }, { label: 'Open a folder', click: function click() { return (0, _utils.openFile)(config.getFolder()); } }, { type: 'separator' }, { label: 'Settings', click: function click() { mainWindow.show(); mainWindow.loadURL(indexHtml + '#settings'); } }, { label: 'Exit', click: function click() { return _electron.app.quit(); } }])); }).catch(function (err) { return console.log(err.stack); }); }; updateTrayMenu(); config.eventEmitter.on(_constants.NEW_FILE, function () { updateTrayMenu(); emit(_constants.NEW_FILE); }); _electron.ipcMain.on(_constants.OPEN_FILE, function (event, data) { (0, _utils.openFile)(data); }); _electron.ipcMain.on(_constants.COPY_TO_CLIPBOARD, function (event, data) { (0, _utils.copyToClipboard)(data); }); _electron.ipcMain.on(_constants.DELETE_FILE, function (event, data) { (0, _utils.deleteFile)(data); updateTrayMenu(); }); _electron.ipcMain.on(_constants.UPLOAD, function (event, data) { (0, _utils.uploadFile)(data); }); registerShortcuts.registerAll(); }); _electron.app.on('will-quit', function () { mainWindow = appIcon = null; _electron.globalShortcut.unregisterAll(); });