mirror of
https://github.com/cryptoadvance/specter-desktop.git
synced 2026-08-13 12:33:29 +02:00
UIUX: Making Splashscreen work in electron Appimage (#2219)
* Making Splashscreen work in electron Appimage and spinner reactive * revert spinner logic * fixing in settings as well --------- Co-authored-by: Manolis Mandrapilias <70536101+moneymanolis@users.noreply.github.com>
This commit is contained in:
parent
06c25cb5b4
commit
10359ff358
4 changed files with 10 additions and 209 deletions
|
|
@ -3,7 +3,7 @@
|
|||
"description": "Specter Desktop Electron application",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"start": "electron .",
|
||||
"start": "cp ../../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"
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="../../src/cryptoadvance/specter/static/typography.css"
|
||||
href="./typography.css"
|
||||
/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="../../src/cryptoadvance/specter/static/output.css"
|
||||
href="./output.css"
|
||||
/>
|
||||
|
||||
<body class="flex flex-col items-center">
|
||||
|
|
@ -111,208 +111,7 @@
|
|||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { dialog } = require("electron").remote;
|
||||
const { ipcRenderer } = require("electron");
|
||||
const helpers = require("./helpers");
|
||||
const getFileHash = helpers.getFileHash;
|
||||
const getAppSettings = helpers.getAppSettings;
|
||||
const appSettingsPath = helpers.appSettingsPath;
|
||||
const specterdDirPath = helpers.specterdDirPath;
|
||||
|
||||
function toggleAdvanced() {
|
||||
let advancedButton = document.getElementById("toggle_advanced");
|
||||
let advancedSettigns =
|
||||
document.getElementById("advanced_settings");
|
||||
if (advancedSettigns.style.display === "block") {
|
||||
advancedSettigns.style.display = "none";
|
||||
advancedButton.innerHTML = "Advanced ▶";
|
||||
if (isCoinSelectionActive()) {
|
||||
toggleExpand();
|
||||
}
|
||||
} else {
|
||||
advancedSettigns.style.display = "block";
|
||||
advancedButton.innerHTML = "Advanced ▼";
|
||||
}
|
||||
}
|
||||
|
||||
function toggleHWIBridgeView(isActive) {
|
||||
document.getElementById("hwibridge-mode-active").checked =
|
||||
isActive;
|
||||
document.getElementById(
|
||||
"hwibridge-mode-settings"
|
||||
).style.display = isActive ? "block" : "none";
|
||||
}
|
||||
|
||||
function signalSavePreferences() {
|
||||
ipcRenderer.send("request-mainprocess-action", {
|
||||
message: "save-preferences",
|
||||
});
|
||||
}
|
||||
|
||||
function savePreferences() {
|
||||
let specterdFile =
|
||||
document.getElementById("specterd-file").files[0];
|
||||
if (specterdFile) {
|
||||
let specterdPath = path.resolve(
|
||||
specterdDirPath,
|
||||
"specterd" +
|
||||
(specterdFile.path.endsWith(".exe") ? ".exe" : "")
|
||||
);
|
||||
fs.copyFileSync(specterdFile.path, specterdPath);
|
||||
} else if (
|
||||
document.getElementById("download-github-version-checkbox")
|
||||
.checked
|
||||
) {
|
||||
let specterdPath = path.resolve(
|
||||
specterdDirPath,
|
||||
"specterd" + (process.platform == "win32" ? ".exe" : "")
|
||||
);
|
||||
if (fs.existsSync(specterdPath)) {
|
||||
fs.unlinkSync(specterdPath);
|
||||
}
|
||||
document.getElementById("specterd-hash").value = "";
|
||||
}
|
||||
let hwiBridgeMode = document.getElementById(
|
||||
"hwibridge-mode-active"
|
||||
).checked;
|
||||
let remoteSpecterURL =
|
||||
document.getElementById("specter-url").value;
|
||||
if (hwiBridgeMode) {
|
||||
let hwiBridgeSettingsPath = path.resolve(
|
||||
require("os").homedir(),
|
||||
".specter/hwi_bridge_config.json"
|
||||
);
|
||||
let defaultHWIBridgeSettings = {
|
||||
whitelisted_domains: "http://127.0.0.1:25441/",
|
||||
};
|
||||
try {
|
||||
fs.writeFileSync(
|
||||
hwiBridgeSettingsPath,
|
||||
JSON.stringify(defaultHWIBridgeSettings),
|
||||
{ flag: "wx" }
|
||||
);
|
||||
} catch {
|
||||
// settings file already exists
|
||||
}
|
||||
let hwiBridgeSettings = require(hwiBridgeSettingsPath);
|
||||
if (hwiBridgeSettings) {
|
||||
hwiBridgeSettings.whitelisted_domains += `\n${remoteSpecterURL}`;
|
||||
}
|
||||
fs.writeFileSync(
|
||||
hwiBridgeSettingsPath,
|
||||
JSON.stringify(hwiBridgeSettings)
|
||||
);
|
||||
}
|
||||
let appSettings = getAppSettings();
|
||||
appSettings.mode = hwiBridgeMode ? "hwibridge" : "specterd";
|
||||
appSettings.specterURL = hwiBridgeMode
|
||||
? remoteSpecterURL
|
||||
: "http://localhost:25441";
|
||||
appSettings.basicAuth = document.getElementById(
|
||||
"basic-auth-checkbox"
|
||||
).checked;
|
||||
appSettings.basicAuthUser =
|
||||
document.getElementById("basic-auth-user").value;
|
||||
appSettings.basicAuthPass =
|
||||
document.getElementById("basic-auth-pass").value;
|
||||
appSettings.tor =
|
||||
document.getElementById("tor-checkbox").checked;
|
||||
appSettings.proxyURL =
|
||||
document.getElementById("proxy-url").value;
|
||||
appSettings.specterdVersion =
|
||||
document.getElementById("specterd-version").value;
|
||||
appSettings.specterdHash =
|
||||
document.getElementById("specterd-hash").value;
|
||||
appSettings.specterdCLIArgs =
|
||||
document.getElementById("specterd-cli-args").value;
|
||||
fs.writeFileSync(appSettingsPath, JSON.stringify(appSettings));
|
||||
dialog.showMessageBoxSync({
|
||||
message:
|
||||
"Specter settings were saved successfully!\nPlease reopen the app to activate the changes.",
|
||||
buttons: ["Continue"],
|
||||
});
|
||||
ipcRenderer.send("request-mainprocess-action", {
|
||||
message: "quit-app",
|
||||
});
|
||||
}
|
||||
|
||||
function toggleBasicAuth(basicAuthOn) {
|
||||
if (basicAuthOn) {
|
||||
document
|
||||
.getElementById("basic-auth-user")
|
||||
.classList.remove("hidden");
|
||||
document
|
||||
.getElementById("basic-auth-pass")
|
||||
.classList.remove("hidden");
|
||||
} else {
|
||||
document
|
||||
.getElementById("basic-auth-user")
|
||||
.classList.add("hidden");
|
||||
document
|
||||
.getElementById("basic-auth-pass")
|
||||
.classList.add("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
function toggleTorProxy(torOn) {
|
||||
if (torOn) {
|
||||
document
|
||||
.getElementById("proxy-url")
|
||||
.classList.remove("hidden");
|
||||
} else {
|
||||
document
|
||||
.getElementById("proxy-url")
|
||||
.classList.add("hidden");
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
let appSettings = getAppSettings();
|
||||
let hwiBridgeMode = appSettings.mode == "hwibridge";
|
||||
if (hwiBridgeMode) {
|
||||
document.getElementById("specter-url").value =
|
||||
appSettings.specterURL;
|
||||
}
|
||||
document.getElementById("basic-auth-user").value =
|
||||
appSettings.basicAuthUser;
|
||||
document.getElementById("basic-auth-pass").value =
|
||||
appSettings.basicAuthPass;
|
||||
document.getElementById("basic-auth-checkbox").checked =
|
||||
appSettings.basicAuth;
|
||||
toggleBasicAuth(appSettings.basicAuth);
|
||||
document.getElementById("proxy-url").value =
|
||||
appSettings.proxyURL;
|
||||
document.getElementById("tor-checkbox").checked =
|
||||
appSettings.tor;
|
||||
toggleTorProxy(appSettings.tor);
|
||||
document.getElementById("specterd-version").value =
|
||||
appSettings.specterdVersion;
|
||||
document.getElementById("specterd-hash").value =
|
||||
appSettings.specterdHash;
|
||||
document.getElementById("specterd-cli-args").value =
|
||||
appSettings.specterdCLIArgs;
|
||||
|
||||
toggleHWIBridgeView(hwiBridgeMode);
|
||||
document
|
||||
.getElementById("specterd-file")
|
||||
.addEventListener("change", (e) => {
|
||||
let specterdFile =
|
||||
document.getElementById("specterd-file").files[0];
|
||||
if (specterdFile) {
|
||||
getFileHash(
|
||||
specterdFile.path,
|
||||
function (specterdHash) {
|
||||
document.getElementById(
|
||||
"specterd-hash"
|
||||
).value = specterdHash;
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script src="./settings.js"/>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
<link rel="stylesheet" type="text/css" href="../../src/cryptoadvance/specter/static/typography.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../src/cryptoadvance/specter/static/output.css">
|
||||
<link rel="stylesheet" type="text/css" href="./typography.css">
|
||||
<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 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" 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>
|
||||
|
|
|
|||
|
|
@ -105,6 +105,8 @@ function building_electron_app {
|
|||
platform="-- --${1}" # either linux or win (maxOS is empty)
|
||||
cd pyinstaller/electron
|
||||
echo " --> building electron-app"
|
||||
echo " --> Copying over resources"
|
||||
cp ../../src/cryptoadvance/specter/static/output.css ../../src/cryptoadvance/specter/static/typography.css .
|
||||
npm i
|
||||
npm run dist ${platform}
|
||||
cd ../..
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue