film-exif/src/electron/websocket-events.js

71 lines
1.7 KiB
JavaScript

/**
* Websocket event handlers
*/
import {dialog, BrowserWindow} from 'electron';
// eslint-disable-next-line
import WebSocket from 'ws';
import {getExifTags} from './exif-helpers';
import {JSONMessage} from '../helpers/web-socket';
const wss = new WebSocket.Server({
perMessageDeflate: false,
port: 65432,
});
wss.broadcast = (data) => {
wss.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
};
wss.on('connection', ws => {
ws.send(JSONMessage('server-log', 'Connected to client!'));
ws.on('message', async (...args) => {
try {
const [type, message] = JSON.parse(args);
switch (type) {
case 'dropped-files':
const filemap = await Promise.all(
message.map(file => getExifTags(file))
);
wss.broadcast(JSONMessage('parsed-exif-tags', await filemap));
break;
case 'show-open-dialog':
const files = dialog.showOpenDialog(BrowserWindow.getFocusedWindow(), {
filters: [{
extension: ['jpg', 'jpeg', 'tif', 'tiff', 'dng'],
name: 'EXIF image types',
}, {
extensions: ['*'],
name: 'All Files',
}],
properties: [
'openFile',
'multiSelections',
],
});
wss.broadcast(JSONMessage('selected-files', files));
break;
case 'show-save-dialog':
const saveFile = dialog.showSaveDialog(BrowserWindow.getFocusedWindow());
wss.broadcast(JSONMessage('save-file-location', saveFile));
break;
case 'show-error-box':
dialog.showErrorBox('An Error has Occured', message);
break;
default:
return ws.send(JSONMessage('server-log', [type, message]));
}
} catch (e) {
console.info(args);
}
});
});