power-monitor.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use strict';
  2. import { createLazyInstance } from '../utils';
  3. const { EventEmitter } = require('events');
  4. const { createPowerMonitor, PowerMonitor } = process.electronBinding('power_monitor');
  5. // PowerMonitor is an EventEmitter.
  6. Object.setPrototypeOf(PowerMonitor.prototype, EventEmitter.prototype);
  7. const powerMonitor = createLazyInstance(createPowerMonitor, PowerMonitor, true);
  8. if (process.platform === 'linux') {
  9. // In order to delay system shutdown when e.preventDefault() is invoked
  10. // on a powerMonitor 'shutdown' event, we need an org.freedesktop.login1
  11. // shutdown delay lock. For more details see the "Taking Delay Locks"
  12. // section of https://www.freedesktop.org/wiki/Software/systemd/inhibit/
  13. //
  14. // So here we watch for 'shutdown' listeners to be added or removed and
  15. // set or unset our shutdown delay lock accordingly.
  16. const { app } = require('electron');
  17. app.whenReady().then(() => {
  18. powerMonitor.on('newListener', (event: string) => {
  19. // whenever the listener count is incremented to one...
  20. if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
  21. powerMonitor.blockShutdown();
  22. }
  23. });
  24. powerMonitor.on('removeListener', (event: string) => {
  25. // whenever the listener count is decremented to zero...
  26. if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
  27. powerMonitor.unblockShutdown();
  28. }
  29. });
  30. });
  31. }
  32. module.exports = powerMonitor;