73 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			73 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								const {app, BrowserWindow} = require('electron')
							 | 
						||
| 
								 | 
							
								const e = require('express')
							 | 
						||
| 
								 | 
							
								const path = require('path')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function createWindow () {
							 | 
						||
| 
								 | 
							
								  const mainWindow = new BrowserWindow({
							 | 
						||
| 
								 | 
							
								    width: 800,
							 | 
						||
| 
								 | 
							
								    height: 600
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  let grantedDeviceThroughPermHandler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  mainWindow.webContents.session.on('select-usb-device', (event, details, callback) => {
							 | 
						||
| 
								 | 
							
								    //Add events to handle devices being added or removed before the callback on
							 | 
						||
| 
								 | 
							
								    //`select-usb-device` is called.
							 | 
						||
| 
								 | 
							
								    mainWindow.webContents.session.on('usb-device-added', (event, device) => {    
							 | 
						||
| 
								 | 
							
								      console.log('usb-device-added FIRED WITH', device)
							 | 
						||
| 
								 | 
							
								      //Optionally update details.deviceList
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								    mainWindow.webContents.session.on('usb-device-removed', (event, device) => {
							 | 
						||
| 
								 | 
							
								      console.log('usb-device-removed FIRED WITH', device)
							 | 
						||
| 
								 | 
							
								      //Optionally update details.deviceList
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    event.preventDefault()
							 | 
						||
| 
								 | 
							
								    if (details.deviceList && details.deviceList.length > 0) {
							 | 
						||
| 
								 | 
							
								      const deviceToReturn  = details.deviceList.find((device) => {
							 | 
						||
| 
								 | 
							
								        if (!grantedDeviceThroughPermHandler || (device.deviceId != grantedDeviceThroughPermHandler.deviceId)) {
							 | 
						||
| 
								 | 
							
								          return true
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      if (deviceToReturn) {
							 | 
						||
| 
								 | 
							
								        callback(deviceToReturn.deviceId)        
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        callback()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  mainWindow.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
							 | 
						||
| 
								 | 
							
								    if (permission === 'usb' && details.securityOrigin === 'file:///') {
							 | 
						||
| 
								 | 
							
								      return true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  mainWindow.webContents.session.setDevicePermissionHandler((details) => {
							 | 
						||
| 
								 | 
							
								    if (details.deviceType === 'usb' && details.origin === 'file://') {
							 | 
						||
| 
								 | 
							
								      if (!grantedDeviceThroughPermHandler) {        
							 | 
						||
| 
								 | 
							
								        grantedDeviceThroughPermHandler = details.device
							 | 
						||
| 
								 | 
							
								        return true
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        return false
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  mainWindow.loadFile('index.html')
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								app.whenReady().then(() => {
							 | 
						||
| 
								 | 
							
								  createWindow()
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  app.on('activate', function () {
							 | 
						||
| 
								 | 
							
								    if (BrowserWindow.getAllWindows().length === 0) createWindow()
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								app.on('window-all-closed', function () {
							 | 
						||
| 
								 | 
							
								  if (process.platform !== 'darwin') app.quit()
							 | 
						||
| 
								 | 
							
								})
							 |