mirror of
https://github.com/cryptoadvance/specter-desktop.git
synced 2026-08-13 12:33:29 +02:00
UIUX: Several Electron improvements (#2222)
* several electrons improvements * better specterd check * copy fonts during build * copy fonts during dev build
This commit is contained in:
parent
7ec60c79ba
commit
72e151d434
5 changed files with 84 additions and 31 deletions
|
|
@ -166,8 +166,6 @@ function createWindow (specterURL) {
|
|||
mainWindow.webContents.session.setProxy({ proxyRules: appSettings.proxyURL });
|
||||
}
|
||||
|
||||
updateSpecterdStatus('Specter is running...')
|
||||
|
||||
mainWindow.loadURL(specterURL + '?mode=remote')
|
||||
// Open the DevTools.
|
||||
// mainWindow.webContents.openDevTools()
|
||||
|
|
@ -355,21 +353,43 @@ function updateSpecterdStatus(status) {
|
|||
tray.setContextMenu(Menu.buildFromTemplate(trayMenu))
|
||||
}
|
||||
|
||||
function updatingLoaderMsg(msg) {
|
||||
function updatingLoaderMsg(msg, showSpinner=false) {
|
||||
if (mainWindow) {
|
||||
let code = `
|
||||
var launchText = document.getElementById('launch-text');
|
||||
if (launchText) {
|
||||
launchText.innerHTML = '${msg}';
|
||||
}
|
||||
var spinnerElement = document.getElementById('spinner');
|
||||
if (spinnerElement) {
|
||||
if (${showSpinner} === true) {
|
||||
spinnerElement.classList.remove('hidden')
|
||||
}
|
||||
else {
|
||||
spinnerElement.classList.add('hidden')
|
||||
}
|
||||
}
|
||||
`;
|
||||
mainWindow.webContents.executeJavaScript(code);
|
||||
}
|
||||
logger.info("Updated LoaderMsg: "+msg)
|
||||
}
|
||||
|
||||
function hasSuccessfullyStarted(logs) {
|
||||
return logs.toString().includes('Serving Flask app')
|
||||
function checkSpecterd(logs, specterdStarted) {
|
||||
// There doesn't seem to be another more straightforward way to check whether specterd is running: https://github.com/nodejs/help/issues/1191
|
||||
// Setting a timeout to avoid waiting for specterd endlessly
|
||||
const timeout = 180000 // 3 minutes
|
||||
const now = Date.now()
|
||||
const timeElapsed = now - specterdStarted
|
||||
if (timeElapsed > timeout) {
|
||||
return "timeout"
|
||||
}
|
||||
if (logs.toString().includes('Serving Flask app')) {
|
||||
return 'running';
|
||||
}
|
||||
else {
|
||||
return 'not running'
|
||||
}
|
||||
}
|
||||
|
||||
function startSpecterd(specterdPath) {
|
||||
|
|
@ -378,8 +398,8 @@ function startSpecterd(specterdPath) {
|
|||
}
|
||||
let appSettings = getAppSettings()
|
||||
let hwiBridgeMode = appSettings.mode == 'hwibridge'
|
||||
updatingLoaderMsg('Launching Specter ...')
|
||||
updateSpecterdStatus('Launching Specter...')
|
||||
updatingLoaderMsg('Launching Specter ...', showSpinner=true)
|
||||
updateSpecterdStatus('Launching Specter ...')
|
||||
let specterdArgs = ["server"]
|
||||
specterdArgs.push("--no-filelog")
|
||||
if (hwiBridgeMode) specterdArgs.push('--hwibridge')
|
||||
|
|
@ -402,36 +422,69 @@ function startSpecterd(specterdPath) {
|
|||
options.env['LANG'] = 'en_US.utf-8'
|
||||
options.env['SPECTER_LOGFORMAT'] = 'SPECTERD: %(levelname)s in %(module)s: %(message)s'
|
||||
specterdProcess = spawn(specterdPath, specterdArgs, options);
|
||||
var procStdout = ""
|
||||
var procStderr = ""
|
||||
const specterdStarted = Date.now()
|
||||
|
||||
// We are checking for both, stdout and stderr, to be on the save side.
|
||||
let specterIsRunning = false
|
||||
specterdProcess.stdout.on('data', (data) => {
|
||||
procStdout += data
|
||||
logger.info("stdout-"+data.toString())
|
||||
if(hasSuccessfullyStarted(data)) {
|
||||
logger.info(`App seem to to run ...`);
|
||||
if (mainWindow) {
|
||||
logger.info(`... creating window ...`);
|
||||
createWindow(appSettings.specterURL)
|
||||
|
||||
let serverdStatus = checkSpecterd(data, specterdStarted)
|
||||
// We don't want to check the logs forever, just until specterd is up and running
|
||||
if (!specterIsRunning) {
|
||||
if(serverdStatus === 'running') {
|
||||
logger.info(`Specter server seems to run ...`);
|
||||
updateSpecterdStatus('Specter is running')
|
||||
specterIsRunning = true
|
||||
if (mainWindow) {
|
||||
logger.info('... creating Electron window for it.')
|
||||
createWindow(appSettings.specterURL)
|
||||
}
|
||||
}
|
||||
else if(serverdStatus === 'timeout') {
|
||||
showError('Specter does not seem to start. Check the logs in the menu for more details.')
|
||||
updateSpecterdStatus('Specter does not start')
|
||||
logger.error('Startup timeout for specterd exceeded')
|
||||
}
|
||||
else {
|
||||
updatingLoaderMsg('Still waiting for Specter to start ...')
|
||||
updateSpecterdStatus('Specter is starting')
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
specterdProcess.stderr.on('data', (data) => {
|
||||
procStderr += data
|
||||
logger.info("stderr-"+data.toString())
|
||||
if(hasSuccessfullyStarted(data)) {
|
||||
logger.info(`App seem to to run ...`);
|
||||
if (mainWindow) {
|
||||
logger.info(`... creating window ...`);
|
||||
createWindow(appSettings.specterURL)
|
||||
|
||||
let serverdStatus = checkSpecterd(data, specterdStarted)
|
||||
if (!specterIsRunning) {
|
||||
if(serverdStatus === 'running') {
|
||||
logger.info(`Specter server seems to run ...`);
|
||||
updateSpecterdStatus('Specter is running')
|
||||
specterIsRunning = true
|
||||
if (mainWindow) {
|
||||
logger.info('... creating Electron window for it.')
|
||||
createWindow(appSettings.specterURL)
|
||||
}
|
||||
}
|
||||
else if(serverdStatus === 'timeout') {
|
||||
showError('Specter does not seem to start. Check the logs in the menu for more details.')
|
||||
updateSpecterdStatus('Specter does not start')
|
||||
logger.error('Startup timeout for specterd exceeded')
|
||||
}
|
||||
else {
|
||||
updatingLoaderMsg('Still waiting for Specter to start ...')
|
||||
updateSpecterdStatus('Specter is starting')
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
specterdProcess.on('exit', (code) => {
|
||||
logger.error(`specterd exited with code ${code}`);
|
||||
showError(`specterd exited with code ${code}. Check the logs in the menu!`)
|
||||
showError(`Specter exited with exit code ${code}. Check the logs in the menu for more details.`)
|
||||
});
|
||||
|
||||
specterdProcess.on('error', (err) => {
|
||||
logger.error(`Error starting Specter server: ${err}`);
|
||||
showError(`Specter failed to start, due to ${err.message}. Check the logs in the menu for more details.`)
|
||||
});
|
||||
|
||||
app.on('activate', function () {
|
||||
|
|
@ -583,7 +636,7 @@ function openErrorLog() {
|
|||
}
|
||||
|
||||
function showError(error) {
|
||||
updatingLoaderMsg('Specter encounter an error:<br>' + error.toString())
|
||||
updatingLoaderMsg('Specter encountered an error:<br>' + error.toString())
|
||||
}
|
||||
|
||||
process.on('unhandledRejection', error => {
|
||||
|
|
|
|||
2
pyinstaller/electron/package-lock.json
generated
2
pyinstaller/electron/package-lock.json
generated
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "specter-desktop",
|
||||
"name": "Specter",
|
||||
"version": "v1.6.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"name": "specter-desktop",
|
||||
"name": "Specter",
|
||||
"description": "Specter Desktop Electron application",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"start": "cp ../../src/cryptoadvance/specter/static/output.css ../../src/cryptoadvance/specter/static/typography.css . && electron .",
|
||||
"start": "cp -R ../../src/cryptoadvance/specter/static/fonts ../../src/cryptoadvance/specter/static/output.css ../../src/cryptoadvance/specter/static/typography.css . && electron .",
|
||||
"pack": "electron-builder --dir",
|
||||
"dist": "electron-builder --publish=never",
|
||||
"postinstall": "electron-builder install-app-deps"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<link rel="stylesheet" type="text/css" href="./output.css">
|
||||
<body class="bg-dark-900">
|
||||
<div width="100%" height="100%" class="flex space-x-2 items-center justify-center h-screen">
|
||||
<svg id="spinner" class="text-white rounded-full bg-dark-700 w-4 h-4 animate-spin" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><!--Generated by IJSVG (https://github.com/iconjar/IJSVG)--><path d="M52.8359,43.6067l1.30463e-08,-1.88843e-08c-0.312506,0.452349 -0.932543,0.565714 -1.38489,0.253208c-0.0990138,-0.0684038 -0.184804,-0.154194 -0.253208,-0.253208l-6.9888,-9.9742l-5.91546e-08,-8.31834e-08c-0.328807,-0.46237 -0.220533,-1.10375 0.241837,-1.43255c0.168889,-0.120103 0.370155,-0.186318 0.577363,-0.189948h4.9835l3.54852e-07,0.000503677c-0.00686545,-9.94223 -8.0722,-17.9964 -18.0144,-17.9896c-4.13508,0.00285541 -8.14312,1.42919 -11.3504,4.03924l4.60883e-08,-3.91242e-08c-0.842285,0.715013 -2.10472,0.611839 -2.81974,-0.230446c-0.715013,-0.842285 -0.611839,-2.10472 0.230446,-2.81974l3.46098e-07,-2.83814e-07c9.39634,-7.70537 23.26,-6.33457 30.9654,3.06177c3.22304,3.93035 4.98589,8.85536 4.98903,13.9382h4.9935l2.44822e-09,4.33431e-11c0.567328,0.0100438 1.0191,0.478096 1.00905,1.04542c-0.0036664,0.207098 -0.0698445,0.408252 -0.189853,0.577075Zm-40.0129,-23.1717l6.9888,9.9742l-2.71216e-09,-3.81325e-09c0.32881,0.4623 0.220594,1.10362 -0.241706,1.43243c-0.168809,0.120065 -0.369975,0.186285 -0.577094,0.189969h-4.983l2.60913e-07,0.000383721c0.0068661,9.94206 8.07207,17.9961 18.0141,17.9893c4.1354,-0.00285595 8.14372,-1.42943 11.3511,-4.03989l-7.47965e-08,6.34738e-08c0.8424,-0.714877 2.10482,-0.6115 2.8197,0.2309c0.714877,0.8424 0.6115,2.10482 -0.2309,2.8197l4.04125e-07,-3.31403e-07c-9.39617,7.70531 -23.2597,6.33461 -30.965,-3.06156c-3.22311,-3.93039 -4.98597,-8.85549 -4.98903,-13.9384h-4.9947l5.45126e-08,9.68797e-10c-0.567328,-0.0100825 -1.01906,-0.478166 -1.00898,-1.04549c0.00367938,-0.207033 0.0698308,-0.408123 0.189782,-0.576906l6.9888,-9.9742l-3.21808e-08,4.66031e-08c0.312407,-0.452417 0.93242,-0.565917 1.38484,-0.25351c0.0990287,0.0683822 0.184838,0.154154 0.253263,0.253153Z" fill="currentColor" fill-rule="evenodd"></path></svg>
|
||||
<svg id="spinner" class="text-white rounded-full bg-dark-700 w-4 h-4 animate-spin hidden" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><!--Generated by IJSVG (https://github.com/iconjar/IJSVG)--><path d="M52.8359,43.6067l1.30463e-08,-1.88843e-08c-0.312506,0.452349 -0.932543,0.565714 -1.38489,0.253208c-0.0990138,-0.0684038 -0.184804,-0.154194 -0.253208,-0.253208l-6.9888,-9.9742l-5.91546e-08,-8.31834e-08c-0.328807,-0.46237 -0.220533,-1.10375 0.241837,-1.43255c0.168889,-0.120103 0.370155,-0.186318 0.577363,-0.189948h4.9835l3.54852e-07,0.000503677c-0.00686545,-9.94223 -8.0722,-17.9964 -18.0144,-17.9896c-4.13508,0.00285541 -8.14312,1.42919 -11.3504,4.03924l4.60883e-08,-3.91242e-08c-0.842285,0.715013 -2.10472,0.611839 -2.81974,-0.230446c-0.715013,-0.842285 -0.611839,-2.10472 0.230446,-2.81974l3.46098e-07,-2.83814e-07c9.39634,-7.70537 23.26,-6.33457 30.9654,3.06177c3.22304,3.93035 4.98589,8.85536 4.98903,13.9382h4.9935l2.44822e-09,4.33431e-11c0.567328,0.0100438 1.0191,0.478096 1.00905,1.04542c-0.0036664,0.207098 -0.0698445,0.408252 -0.189853,0.577075Zm-40.0129,-23.1717l6.9888,9.9742l-2.71216e-09,-3.81325e-09c0.32881,0.4623 0.220594,1.10362 -0.241706,1.43243c-0.168809,0.120065 -0.369975,0.186285 -0.577094,0.189969h-4.983l2.60913e-07,0.000383721c0.0068661,9.94206 8.07207,17.9961 18.0141,17.9893c4.1354,-0.00285595 8.14372,-1.42943 11.3511,-4.03989l-7.47965e-08,6.34738e-08c0.8424,-0.714877 2.10482,-0.6115 2.8197,0.2309c0.714877,0.8424 0.6115,2.10482 -0.2309,2.8197l4.04125e-07,-3.31403e-07c-9.39617,7.70531 -23.2597,6.33461 -30.965,-3.06156c-3.22311,-3.93039 -4.98597,-8.85549 -4.98903,-13.9384h-4.9947l5.45126e-08,9.68797e-10c-0.567328,-0.0100825 -1.01906,-0.478166 -1.00898,-1.04549c0.00367938,-0.207033 0.0698308,-0.408123 0.189782,-0.576906l6.9888,-9.9742l-3.21808e-08,4.66031e-08c0.312407,-0.452417 0.93242,-0.565917 1.38484,-0.25351c0.0990287,0.0683822 0.184838,0.154154 0.253263,0.253153Z" fill="currentColor" fill-rule="evenodd"></path></svg>
|
||||
<p id="launch-text" class="text-lg">Launching Specter Desktop...</p>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ function building_electron_app {
|
|||
cd pyinstaller/electron
|
||||
echo " --> building electron-app"
|
||||
echo " --> Copying over resources"
|
||||
cp ../../src/cryptoadvance/specter/static/output.css ../../src/cryptoadvance/specter/static/typography.css .
|
||||
cp -R ../../src/cryptoadvance/specter/static/fonts ../../src/cryptoadvance/specter/static/output.css ../../src/cryptoadvance/specter/static/typography.css .
|
||||
npm i
|
||||
npm run dist ${platform}
|
||||
cd ../..
|
||||
|
|
@ -170,4 +170,4 @@ function macos_code_sign {
|
|||
function make_release_zip {
|
||||
echo " --> Making the release-zip"
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue