49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								const electron = require('electron');
							 | 
						||
| 
								 | 
							
								const fs = require('fs');
							 | 
						||
| 
								 | 
							
								const path = require('path');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let blobId = 0;
							 | 
						||
| 
								 | 
							
								let blobRequests = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								electron.ipcRenderer.on('blob-loaded', (event, args) => {
							 | 
						||
| 
								 | 
							
									const blobRequest = blobRequests[args.id];
							 | 
						||
| 
								 | 
							
									delete blobRequests[args.id];
							 | 
						||
| 
								 | 
							
									blobRequest.done(new Uint8Array(args.data));
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								electron.ipcRenderer.on('blob-failed', (event, args) => {
							 | 
						||
| 
								 | 
							
									const blobRequest = blobRequests[args.id];
							 | 
						||
| 
								 | 
							
									delete blobRequests[args.id];
							 | 
						||
| 
								 | 
							
									blobRequest.failed({url: args.url, error: args.error});
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								electron.contextBridge.exposeInMainWorld(
							 | 
						||
| 
								 | 
							
									'electron', {
							 | 
						||
| 
								 | 
							
										{Expose}
							 | 
						||
| 
								 | 
							
										showWindow: (title, x, y, width, height) => {
							 | 
						||
| 
								 | 
							
											if (electron.webFrame.setZoomLevelLimits != null) { // TODO: Figure out why this check is sometimes required
							 | 
						||
| 
								 | 
							
												electron.webFrame.setZoomLevelLimits(1, 1);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											const options = {
							 | 
						||
| 
								 | 
							
												title: title,
							 | 
						||
| 
								 | 
							
												x: x,
							 | 
						||
| 
								 | 
							
												y: y,
							 | 
						||
| 
								 | 
							
												width: width,
							 | 
						||
| 
								 | 
							
												height: height,
							 | 
						||
| 
								 | 
							
											};
							 | 
						||
| 
								 | 
							
											electron.ipcRenderer.send('show-window', options);
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										loadBlob: (desc, done, failed) => {
							 | 
						||
| 
								 | 
							
											const options = {
							 | 
						||
| 
								 | 
							
												file: desc.files[0],
							 | 
						||
| 
								 | 
							
												id: blobId++
							 | 
						||
| 
								 | 
							
											};
							 | 
						||
| 
								 | 
							
											blobRequests[options.id] = {
							 | 
						||
| 
								 | 
							
												done: done,
							 | 
						||
| 
								 | 
							
												failed: failed
							 | 
						||
| 
								 | 
							
											};
							 | 
						||
| 
								 | 
							
											electron.ipcRenderer.send('load-blob', options);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								);
							 |