main.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. const { app, BrowserWindow } = require('electron')
  2. function createWindow () {
  3. const mainWindow = new BrowserWindow({
  4. width: 800,
  5. height: 600
  6. })
  7. let grantedDeviceThroughPermHandler
  8. mainWindow.webContents.session.on('select-usb-device', (event, details, callback) => {
  9. // Add events to handle devices being added or removed before the callback on
  10. // `select-usb-device` is called.
  11. mainWindow.webContents.session.on('usb-device-added', (event, device) => {
  12. console.log('usb-device-added FIRED WITH', device)
  13. // Optionally update details.deviceList
  14. })
  15. mainWindow.webContents.session.on('usb-device-removed', (event, device) => {
  16. console.log('usb-device-removed FIRED WITH', device)
  17. // Optionally update details.deviceList
  18. })
  19. event.preventDefault()
  20. if (details.deviceList && details.deviceList.length > 0) {
  21. const deviceToReturn = details.deviceList.find((device) => {
  22. return !grantedDeviceThroughPermHandler || (device.deviceId !== grantedDeviceThroughPermHandler.deviceId)
  23. })
  24. if (deviceToReturn) {
  25. callback(deviceToReturn.deviceId)
  26. } else {
  27. callback()
  28. }
  29. }
  30. })
  31. mainWindow.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
  32. if (permission === 'usb' && details.securityOrigin === 'file:///') {
  33. return true
  34. }
  35. })
  36. mainWindow.webContents.session.setDevicePermissionHandler((details) => {
  37. if (details.deviceType === 'usb' && details.origin === 'file://') {
  38. if (!grantedDeviceThroughPermHandler) {
  39. grantedDeviceThroughPermHandler = details.device
  40. return true
  41. } else {
  42. return false
  43. }
  44. }
  45. })
  46. mainWindow.webContents.session.setUSBProtectedClassesHandler((details) => {
  47. return details.protectedClasses.filter((usbClass) => {
  48. // Exclude classes except for audio classes
  49. return usbClass.indexOf('audio') === -1
  50. })
  51. })
  52. mainWindow.loadFile('index.html')
  53. }
  54. app.whenReady().then(() => {
  55. createWindow()
  56. app.on('activate', function () {
  57. if (BrowserWindow.getAllWindows().length === 0) createWindow()
  58. })
  59. })
  60. app.on('window-all-closed', function () {
  61. if (process.platform !== 'darwin') app.quit()
  62. })