mcopy/app/lib/display/index.js

127 lines
2.3 KiB
JavaScript

'use strict';
const path = require('path');
const { BrowserWindow } = require('electron');
const exec = require('exec');
const spawn = require('spawn');
const delay = require('delay');
let wv;
let cp;
let system = {};
let digitalWindow;
let TMPDIR;
class WebView {
constructor() {
}
async open () {
digitalWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true,
allowRunningInsecureContent: false,
'unsafe-eval' : false
},
width: 800,
height: 600,
minWidth : 800,
minHeight : 600//,
//icon: path.join(__dirname, '../../assets/icons/icon.png')
});
digitalWindow.loadURL('file://' + __dirname + '../../../display.html');
if (process.argv.indexOf('-d') !== -1 || process.argv.indexOf('--dev') !== -1) {
digitalWindow.webContents.openDevTools();
}
digitalWindow.on('closed', () => {
digitalWindow = null
});
}
async fullScreen () {
return digitalWindow.setFullScreen(true);
}
async setImage (src) {
return digitalWindow.webContents.send('display', { src });
}
async setMeter () {
return digitalWindow.webContents.send('display', { meter : true });
}
async setGrid () {
return digitalWindow.webContents.send('display', { grid : true });
}
async close () {
if (digitalWindow) {
digitalWindow.close();
}
return true
}
async move () {
}
}
function padded_frame (i) {
let len = (i + '').length;
let str = i + '';
for (let x = 0; x < 5 - len; x++) {
str = '0' + str;
}
return str;
}
async function display_eog (src) {
//timeout 3 eog --fullscreen ${src}
cp = spawn('eog', ['--fullscreen', src]);
}
async function display_wv (src) {
await wv.open();
await wv.fullScreen();
await delay(200);
await wv.setImage(src);
}
async function end () {
if (system.platform !== 'nix') {
await wv.close();
} else {
if (cp) cp.kill()
}
}
async function start (frame) {
let padded = padded_frame(frame);
let ext = 'tif';
let tmppath;
if (system.platform !== 'nix') {
ext = 'png';
}
tmppath = path.join(TMPDIR, `export-${padded}.${ext}`);
if (system.platform !== 'nix') {
display_wv(tmppath);
} else {
display_eog(tmppath);
}
}
module.exports = function (sys) {
system = sys;
TMPDIR = path.join(system.tmp, 'mcopy_digital');
if (system.platform !== 'nix') {
wv = new WebView();
} else {
//child process
}
return {
start,
end
}
}