record-desktop
Version:
Record gifs and take screenshots on linux, built with electron.
227 lines (177 loc) • 6.46 kB
JavaScript
;
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();
});