From 5f8b8311f634c67dcff5620a818c7c83aa527d27 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Tue, 25 Apr 2023 14:58:52 +0200
Subject: [PATCH 01/26] Fix windows core installation and starting bugs
---
electron.js | 124 +++++++++++++++++++++++++++++-----------------------
1 file changed, 70 insertions(+), 54 deletions(-)
diff --git a/electron.js b/electron.js
index f011ab1b..e11bdcb2 100644
--- a/electron.js
+++ b/electron.js
@@ -8,7 +8,7 @@ const fs = require('fs')
const electronDl = require('electron-dl')
const extract = require('extract-zip')
const fetch = require('node-fetch')
-const child = require('child_process').execFile
+const execFile = require('child_process').execFile
const exec = require('child_process').exec
const spawn = require('child_process').spawn
@@ -19,6 +19,7 @@ electronDl()
process.env['APP_PATH'] = app.getAppPath()
const homePath = app.getPath('home')
+const downloadPath = app.getPath('downloads')
autoUpdater.autoDownload = false
autoUpdater.autoInstallOnAppQuit = false
@@ -30,9 +31,8 @@ log.info('App Platform is', process.platform)
log.info('Platform arch is', process.arch)
const winjar = String.raw`C:\Program Files\Qortal\qortal.jar`
-const windir = String.raw`C:\Qortal`
const winurl = "https://github.com/Qortal/qortal/releases/latest/download/qortal.exe"
-const winexe = "C:\\Qortal\\qortal.exe"
+const winexe = downloadPath + "\\qortal.exe"
const startWinCore = "C:\\Program Files\\Qortal\\qortal.exe"
const zipdir = homePath
@@ -84,6 +84,46 @@ const isRunning = (query, cb) => {
})
}
+async function checkWin() {
+ if (fs.existsSync(winjar)) {
+ isRunning('qortal.exe', (status) => {
+ if (status == true) {
+ log.info("Core is running, perfect !")
+ } else {
+ const dialogOpts = {
+ type: 'info',
+ buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
+ title: i18n.__("electron_translate_15"),
+ message: i18n.__("electron_translate_16"),
+ detail: i18n.__("electron_translate_17")
+ }
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ spawn(startWinCore, { detached: true })
+ } else {
+ return
+ }
+ })
+ }
+ })
+ } else {
+ const dialogOpts = {
+ type: 'info',
+ buttons: [i18n.__("electron_translate_18"), i18n.__("electron_translate_19")],
+ title: i18n.__("electron_translate_20"),
+ message: i18n.__("electron_translate_21"),
+ detail: i18n.__("electron_translate_22")
+ }
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ downloadWindows()
+ } else {
+ return
+ }
+ })
+ }
+}
+
async function downloadWindows() {
let winLoader = new BrowserWindow({
width: 500,
@@ -97,17 +137,34 @@ async function downloadWindows() {
winLoader.show()
await electronDl.download(myWindow, winurl, {
- directory: windir,
- onProgress: function () { log.info("Starting Download Windows Installer") }
+ directory: downloadPath,
+ onProgress: function () { log.info("Starting Download Qortal Core Installer") }
})
winLoader.destroy()
- child(winexe, function (err, data) {
- if (err) {
- log.info(err)
- return
+
+ const coreInstall = execFile(winexe, (e, stdout, stderr) => {
+ if (e) {
+ log.info(e)
+ removeQortalExe()
+ } else {
+ log.info('Qortal Core Installation Done', stdout, stderr)
+ removeQortalExe()
}
- log.info(data.toString())
})
+
+ coreInstall.stdin.end()
+}
+
+async function removeQortalExe() {
+ try {
+ await fs.rmSync(winexe, {
+ force: true,
+ })
+ } catch (err) {
+ log.info('renove error', err)
+ }
+
+ checkWin()
}
async function checkPort() {
@@ -123,6 +180,8 @@ async function checkPort() {
async function checkResponseStatus(res) {
if (res.ok) {
return
+ } else if (process.platform === 'win32') {
+ await checkWin()
} else {
await javaversion()
}
@@ -721,50 +780,7 @@ const createTray = () => {
async function checkAll() {
if (process.platform === 'win32') {
app.setAppUserModelId("org.qortal.QortalUI")
- if (fs.existsSync(winjar)) {
- isRunning('qortal.exe', (status) => {
- if (status == true) {
- log.info("Core is running, perfect !")
- } else {
- log.info("Core is not running, starting it !")
- const dialogOpts = {
- type: 'info',
- buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
- title: i18n.__("electron_translate_15"),
- message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17")
- }
- dialog.showMessageBox(dialogOpts).then((returnValue) => {
- if (returnValue.response === 0) {
- child(startWinCore, function (err, data) {
- if (err) {
- log.info(err)
- return
- }
- log.info(data.toString())
- })
- } else {
- return
- }
- })
- }
- })
- } else {
- const dialogOpts = {
- type: 'info',
- buttons: [i18n.__("electron_translate_18"), i18n.__("electron_translate_19")],
- title: i18n.__("electron_translate_20"),
- message: i18n.__("electron_translate_21"),
- detail: i18n.__("electron_translate_22")
- }
- dialog.showMessageBox(dialogOpts).then((returnValue) => {
- if (returnValue.response === 0) {
- downloadWindows()
- } else {
- return
- }
- })
- }
+ await checkPort()
} else if (process.platform === 'darwin') {
await checkPort()
} else if (process.platform === 'linux') {
From b1b8cd9d5ba602fbd9b890e3f29c80c431dd1d03 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Tue, 25 Apr 2023 18:54:02 +0200
Subject: [PATCH 02/26] Added nohup to start core
---
electron.js | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/electron.js b/electron.js
index e11bdcb2..7c20dfd2 100644
--- a/electron.js
+++ b/electron.js
@@ -575,7 +575,7 @@ async function startQortal() {
if (fs.existsSync(linjavax64bindir)) {
try {
await spawn(
- linjavax64binfile, ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', linjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -584,7 +584,7 @@ async function startQortal() {
} else {
try {
await spawn(
- 'java', ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -595,7 +595,7 @@ async function startQortal() {
if (fs.existsSync(linjavaarm64bindir)) {
try {
await spawn(
- linjavaarm64binfile, ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', linjavaarm64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -604,7 +604,7 @@ async function startQortal() {
} else {
try {
await spawn(
- 'java', ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -615,7 +615,7 @@ async function startQortal() {
if (fs.existsSync(linjavaarmbindir)) {
try {
await spawn(
- linjavaarmbinfile, ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', linjavaarmbinfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -624,7 +624,7 @@ async function startQortal() {
} else {
try {
await spawn(
- 'java', ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -637,7 +637,7 @@ async function startQortal() {
if (fs.existsSync(macjavax64bindir)) {
try {
await spawn(
- macjavax64binfile, ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', macjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -646,7 +646,7 @@ async function startQortal() {
} else {
try {
await spawn(
- 'java', ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -657,7 +657,7 @@ async function startQortal() {
if (fs.existsSync(macjavaaarch64bindir)) {
try {
await spawn(
- macjavaaarch64binfile, ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', macjavaaarch64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
@@ -666,7 +666,7 @@ async function startQortal() {
} else {
try {
await spawn(
- 'java', ['-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
{ cwd: qortaldir }
)
} catch (err) {
From 664a671feeec0de5e65d87254d8950285565b893 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Tue, 25 Apr 2023 19:20:20 +0200
Subject: [PATCH 03/26] Bump version 4.0.1
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 0d128650..407d3433 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "qortal-ui",
- "version": "4.0.0",
+ "version": "4.0.1",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
From af52bb27d3a266c51329919e3f5f1a73ee1c354e Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Wed, 26 Apr 2023 10:46:52 +0200
Subject: [PATCH 04/26] Fix avatar on new accounts
---
qortal-ui-core/src/components/wallet-profile.js | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/qortal-ui-core/src/components/wallet-profile.js b/qortal-ui-core/src/components/wallet-profile.js
index 874a5951..07990d7b 100644
--- a/qortal-ui-core/src/components/wallet-profile.js
+++ b/qortal-ui-core/src/components/wallet-profile.js
@@ -124,10 +124,14 @@ class WalletProfile extends connect(store)(LitElement) {
}
getAvatar() {
- const avatarNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
- const avatarUrl = avatarNode.protocol + '://' + avatarNode.domain + ':' + avatarNode.port
- const url = `${avatarUrl}/arbitrary/THUMBNAIL/${this.accountInfo.names[0].name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
- return html`
`
+ if (this.accountInfo.names.length === 0) {
+ return html`
`
+ } else {
+ const avatarNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
+ const avatarUrl = avatarNode.protocol + '://' + avatarNode.domain + ':' + avatarNode.port
+ const url = `${avatarUrl}/arbitrary/THUMBNAIL/${this.accountInfo.names[0].name}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
+ return html`
`
+ }
}
getApiKey() {
From 8984aeea8404b4be08bbc0ad8366718a7f83f4f2 Mon Sep 17 00:00:00 2001
From: Exlo <46317321+Exlo84@users.noreply.github.com>
Date: Fri, 28 Apr 2023 10:39:04 +0200
Subject: [PATCH 05/26] Create no.json
---
locales/no.json | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 locales/no.json
diff --git a/locales/no.json b/locales/no.json
new file mode 100644
index 00000000..06bfc8e7
--- /dev/null
+++ b/locales/no.json
@@ -0,0 +1,31 @@
+{
+ "__locale_name__": "Norwegian",
+
+ "electron_translate_1": "Vis Qortal UI",
+ "electron_translate_2": "Avslutt",
+ "electron_translate_3": "Oppdatering er tilgjengelig",
+ "electron_translate_4": "En ny versjon av Qortal UI er tilgjengelig. Ønsker du å laste den ned?",
+ "electron_translate_5": "INSTALLER NÅ",
+ "electron_translate_6": "KANSKJE SENERE",
+ "electron_translate_7": "Oppdateringen er klar for installering",
+ "electron_translate_8": "En ny versjon av Qortal UI er lastet ned.",
+ "electron_translate_9": "Klikk INSTALLER NÅ for å installere oppdateringen, eller KANSKJE SENERE for å ikke oppdatere brukergrensesnittet.",
+ "electron_translate_10": "Midlertidig oppdateringsfeil, vil prøve igjen senere",
+ "electron_translate_11": "LAST NED OPPDATERING",
+ "electron_translate_12": "Den vil lastes ned ⌛️ i bakgrunnen!",
+ "electron_translate_13": "START QORTAL CORE",
+ "electron_translate_14": "NEI TAKK",
+ "electron_translate_15": "Qortal Core kjører ikke på dette systemet",
+ "electron_translate_16": "Qortal UI har oppdaget at Qortal Core ikke kjører på dette systemet",
+ "electron_translate_17": "Klikk START QORTAL CORE for å starte Qortal Core på dette systemet, eller klikk NEI TAKK for å hoppe over å starte på dette systemet",
+ "electron_translate_18": "LAST NED QORTAL CORE",
+ "electron_translate_19": "NEI TAKK",
+ "electron_translate_20": "Qortal Core er ikke oppdaget",
+ "electron_translate_21": "Qortal UI har oppdaget at Qortal Core ikke er installert (i standard plassering) på dette systemet.",
+ "electron_translate_22": "Klikk LAST NED QORTAL CORE for å laste ned og installere Core (til standard plassering), eller klikk NEI TAKK for å hoppe over nedlasting og installering.",
+ "electron_translate_23": "LAST NED JAVA",
+ "electron_translate_24": "NEI TAKK",
+ "electron_translate_25": "Java er ikke installert.",
+ "electron_translate_26": "Qortal UI har oppdaget at Java ikke er installert på systemet ditt.",
+ "electron_translate_27": "Klikk på LAST NED JAVA for å laste ned og installere Java, eller på NEI TAKK for å ikke laste ned og installere det."
+}
\ No newline at end of file
From 9b58a4ca7eeb1b92d08246361fa2a0c09aebf509 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Fri, 28 Apr 2023 14:57:57 +0200
Subject: [PATCH 06/26] Fix ask for save location
---
.../login-view/create-account-section.js | 33 ++++++++++--
.../components/settings-view/export-keys.js | 30 ++++++++++-
.../components/settings-view/security-view.js | 30 ++++++++++-
.../functional-components/settings-page.js | 33 +++++++++---
.../plugins/core/wallet/wallet-app.src.js | 52 +++++++++++++++----
5 files changed, 155 insertions(+), 23 deletions(-)
diff --git a/qortal-ui-core/src/components/login-view/create-account-section.js b/qortal-ui-core/src/components/login-view/create-account-section.js
index 48c27985..69491c76 100644
--- a/qortal-ui-core/src/components/login-view/create-account-section.js
+++ b/qortal-ui-core/src/components/login-view/create-account-section.js
@@ -7,7 +7,6 @@ import { createWallet } from '../../../../qortal-ui-crypto/api/createWallet.js'
import { doLogin, doLogout, doSelectAddress } from '../../redux/app/app-actions.js'
import { doStoreWallet } from '../../redux/user/user-actions.js'
import { checkApiKey } from '../../apiKeyUtils.js'
-import FileSaver from 'file-saver'
import ripple from '../../functional-components/loading-ripple.js'
import snackbar from '../../functional-components/snackbar.js'
import '../../functional-components/random-sentence-generator.js'
@@ -587,17 +586,45 @@ class CreateAccountSection extends connect(store)(LitElement) {
}
async downloadBackup(wallet) {
+ let backupname = ""
const state = store.getState()
const data = await wallet.generateSaveWalletData(this._pass, state.config.crypto.kdfThreads, () => { })
const dataString = JSON.stringify(data)
const blob = new Blob([dataString], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `qortal_backup_${wallet.addresses[0].address}.json`)
+ backupname = "qortal_backup_" + wallet.addresses[0].address + ".json"
+ this.saveFileToDisk(blob, backupname)
}
downloadSeedphrase() {
+ let seedname = ""
const seed = this.shadowRoot.getElementById('randSentence').parsedString
const blob = new Blob([seed], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `qortal_seedphrase.txt`)
+ seedname = "qortal_seedphrase_" + wallet.addresses[0].address + ".txt"
+ this.saveFileToDisk(blob, seedname)
+ }
+
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ let snack4string = get("general.save")
+ snackbar.add({
+ labelText: `${snack4string} ${fileName} ✅`,
+ dismiss: true
+ })
+ } catch (error) {
+ console.log(error)
+ }
}
}
diff --git a/qortal-ui-core/src/components/settings-view/export-keys.js b/qortal-ui-core/src/components/settings-view/export-keys.js
index 1456ce3a..dc7d623c 100644
--- a/qortal-ui-core/src/components/settings-view/export-keys.js
+++ b/qortal-ui-core/src/components/settings-view/export-keys.js
@@ -2,11 +2,11 @@ import { LitElement, html, css } from 'lit'
import { connect } from 'pwa-helpers'
import { store } from '../../store.js'
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
+import snackbar from '../../functional-components/snackbar.js'
import '@material/mwc-dialog'
import '@material/mwc-button'
import '@material/mwc-icon'
-import FileSaver from 'file-saver'
class ExportKeys extends connect(store)(LitElement) {
static get properties() {
@@ -222,11 +222,37 @@ class ExportKeys extends connect(store)(LitElement) {
}
async exportKey(cMasterKey, cName, cAddress) {
+ let exportname = ""
const myPrivateMasterKey = cMasterKey
const myCoinName = cName
const myCoinAddress = cAddress
const blob = new Blob([`${myPrivateMasterKey}`], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `Private_Master_Key_${myCoinName}_${myCoinAddress}.txt`)
+ exportname = "Private_Master_Key_" + myCoinName + "_" + myCoinAddress + ".txt"
+ this.saveFileToDisk(blob, exportname)
+ }
+
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ let snack4string = get("general.save")
+ snackbar.add({
+ labelText: `${snack4string} ${fileName} ✅`,
+ dismiss: true
+ })
+ } catch (error) {
+ console.log(error)
+ }
}
stateChanged(state) {
diff --git a/qortal-ui-core/src/components/settings-view/security-view.js b/qortal-ui-core/src/components/settings-view/security-view.js
index aaee8212..918e6321 100644
--- a/qortal-ui-core/src/components/settings-view/security-view.js
+++ b/qortal-ui-core/src/components/settings-view/security-view.js
@@ -3,12 +3,12 @@ import { connect } from 'pwa-helpers'
import { store } from '../../store.js'
import { allowQAPPAutoAuth, removeQAPPAutoAuth, removeQAPPAutoLists, allowQAPPAutoLists } from '../../redux/app/app-actions.js'
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
+import snackbar from '../../functional-components/snackbar.js'
import '@material/mwc-checkbox'
import '@material/mwc-textfield'
import '@material/mwc-icon'
import '@vaadin/password-field/vaadin-password-field.js'
-import FileSaver from 'file-saver'
class SecurityView extends connect(store)(LitElement) {
static get properties() {
@@ -155,13 +155,39 @@ class SecurityView extends connect(store)(LitElement) {
}
async downloadBackup() {
+ let backupname = ''
this.backupErrorMessage = ''
const state = store.getState()
const password = this.shadowRoot.getElementById('downloadBackupPassword').value
const data = await state.app.wallet.generateSaveWalletData(password, state.config.crypto.kdfThreads, () => { })
const dataString = JSON.stringify(data)
const blob = new Blob([dataString], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `qortal_backup_${state.app.selectedAddress.address}.json`)
+ backupname = "qortal_backup_" + state.app.selectedAddress.address + ".json"
+ this.saveFileToDisk(blob, backupname)
+ }
+
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ let snack4string = get("general.save")
+ snackbar.add({
+ labelText: `${snack4string} ${fileName} ✅`,
+ dismiss: true
+ })
+ } catch (error) {
+ console.log(error)
+ }
}
}
diff --git a/qortal-ui-core/src/functional-components/settings-page.js b/qortal-ui-core/src/functional-components/settings-page.js
index 253b2cd7..5e951730 100644
--- a/qortal-ui-core/src/functional-components/settings-page.js
+++ b/qortal-ui-core/src/functional-components/settings-page.js
@@ -3,7 +3,6 @@ import { connect } from 'pwa-helpers'
import { store } from '../store.js'
import { doAddNode, doSetNode, doLoadNodeConfig } from '../redux/app/app-actions.js'
import { get, translate, translateUnsafeHTML } from 'lit-translate'
-import FileSaver from 'file-saver'
import snackbar from './snackbar.js'
import '../components/language-selector.js'
import '../custom-elements/frag-file-input.js'
@@ -320,16 +319,36 @@ class SettingsPage extends connect(store)(LitElement) {
}
exportQortalNodesList() {
+ let nodelist = ""
const qortalNodesList = JSON.stringify(localStorage.getItem("myQortalNodes"))
const qortalNodesListSave = JSON.parse((qortalNodesList) || "[]")
const blob = new Blob([qortalNodesListSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `qortal.nodes`)
+ nodelist = "qortal.nodes"
+ this.saveFileToDisk(blob, nodelist)
+ }
- let snack4string = get("settings.snack4")
- snackbar.add({
- labelText: `${snack4string} qortal.nodes`,
- dismiss: true
- })
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ let snack4string = get("settings.snack4")
+ snackbar.add({
+ labelText: `${snack4string} qortal.nodes`,
+ dismiss: true
+ })
+ } catch (error) {
+ console.log(error)
+ }
}
renderImportNodesListButton() {
diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
index 51336f37..903ed5fb 100644
--- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
+++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
@@ -11,7 +11,6 @@ import '../components/ButtonIconCopy.js'
import '../components/QortalQrcodeGenerator.js'
import '../components/frag-file-input.js'
import '../components/time-elements/index.js'
-import FileSaver from 'file-saver'
import '@material/mwc-button'
import '@material/mwc-checkbox'
import '@material/mwc-dialog'
@@ -3723,52 +3722,66 @@ class MultiWallet extends LitElement {
}
exportQortAddressbook() {
+ let bookname = ""
const qortBookData = JSON.stringify(localStorage.getItem("addressbookQort"))
const qortBookSave = JSON.parse((qortBookData) || "[]")
const blob = new Blob([qortBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `qortal_addressbook.qort.json`)
+ bookname = "qortal_addressbook.qort.json"
+ this.saveFileToDisk(blob, bookname)
}
exportBtcAddressbook() {
+ let bookname = ""
const btcBookData = JSON.stringify(localStorage.getItem("addressbookBtc"))
const btcBookSave = JSON.parse((btcBookData) || "[]")
const blob = new Blob([btcBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `bitcoin_addressbook.btc.json`)
+ bookname = "bitcoin_addressbook.btc.json"
+ this.saveFileToDisk(blob, bookname)
}
exportLtcAddressbook() {
+ let bookname = ""
const ltcBookData = JSON.stringify(localStorage.getItem("addressbookLtc"))
const ltcBookSave = JSON.parse((ltcBookData) || "[]")
const blob = new Blob([ltcBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `litecoin_addressbook.ltc.json`)
+ bookname = "litecoin_addressbook.ltc.json"
+ this.saveFileToDisk(blob, bookname)
}
exportDogeAddressbook() {
+ let bookname = ""
const dogeBookData = JSON.stringify(localStorage.getItem("addressbookDoge"))
const dogeBookSave = JSON.parse((dogeBookData) || "[]")
const blob = new Blob([dogeBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `dogecoin_addressbook.doge.json`)
+ bookname = "dogecoin_addressbook.doge.json"
+ this.saveFileToDisk(blob, bookname)
}
exportDgbAddressbook() {
+ let bookname = ""
const dgbBookData = JSON.stringify(localStorage.getItem("addressbookDgb"))
const dgbBookSave = JSON.parse((dgbBookData) || "[]")
const blob = new Blob([dgbBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `digibyte_addressbook.dgb.json`)
+ bookname = "digibyte_addressbook.dgb.json"
+ this.saveFileToDisk(blob, bookname)
}
exportRvnAddressbook() {
+ let bookname = ""
const rvnBookData = JSON.stringify(localStorage.getItem("addressbookRvn"))
const rvnBookSave = JSON.parse((rvnBookData) || "[]")
const blob = new Blob([rvnBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `ravencoin_addressbook.rvn.json`)
+ bookname = "ravencoin_addressbook.rvn.json"
+ this.saveFileToDisk(blob, bookname)
}
exportArrrAddressbook() {
+ let bookname = ""
const arrrBookData = JSON.stringify(localStorage.getItem("addressbookArrr"))
const arrrBookSave = JSON.parse((arrrBookData) || "[]")
const blob = new Blob([arrrBookSave], { type: 'text/plain;charset=utf-8' })
- FileSaver.saveAs(blob, `piratechain_addressbook.arrr.json`)
+ bookname = "piratechain_addressbook.arrr.json"
+ this.saveFileToDisk(blob, bookname)
}
importQortAddressbook(file) {
@@ -4947,7 +4960,7 @@ class MultiWallet extends LitElement {
} else if ( this._selectedWallet === "btc" ) {
return html` this.exportBtcAddressbook()}> ${translate("walletpage.wchange54")}`
} else if ( this._selectedWallet === "ltc" ) {
- return html` this.exportKLtcAddressbook()}> ${translate("walletpage.wchange54")}`
+ return html` this.exportLtcAddressbook()}> ${translate("walletpage.wchange54")}`
} else if ( this._selectedWallet === "doge" ) {
return html` this.exportDogeAddressbook()}> ${translate("walletpage.wchange54")}`
} else if ( this._selectedWallet === "dgb" ) {
@@ -5780,6 +5793,27 @@ class MultiWallet extends LitElement {
})
}
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ let snack4string = get("general.save")
+ parentEpml.request('showSnackBar', `${snack4string} ${fileName} ✅`)
+ } catch (error) {
+ console.log(error)
+ }
+ }
+
isEmptyArray(arr) {
if (!arr) {
return true
From 8409695acd83a3f32fc310a30b4008b03d0fb404 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 29 Apr 2023 08:39:48 +0200
Subject: [PATCH 07/26] start core in own shell
---
electron.js | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/electron.js b/electron.js
index 7c20dfd2..aae3c452 100644
--- a/electron.js
+++ b/electron.js
@@ -575,8 +575,8 @@ async function startQortal() {
if (fs.existsSync(linjavax64bindir)) {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', linjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', linjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -584,8 +584,8 @@ async function startQortal() {
} else {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -595,8 +595,8 @@ async function startQortal() {
if (fs.existsSync(linjavaarm64bindir)) {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', linjavaarm64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', linjavaarm64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -604,8 +604,8 @@ async function startQortal() {
} else {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -615,8 +615,8 @@ async function startQortal() {
if (fs.existsSync(linjavaarmbindir)) {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', linjavaarmbinfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', linjavaarmbinfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -624,8 +624,8 @@ async function startQortal() {
} else {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -637,8 +637,8 @@ async function startQortal() {
if (fs.existsSync(macjavax64bindir)) {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', macjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', macjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -646,8 +646,8 @@ async function startQortal() {
} else {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -657,8 +657,8 @@ async function startQortal() {
if (fs.existsSync(macjavaaarch64bindir)) {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', macjavaaarch64binfile, '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', macjavaaarch64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
@@ -666,8 +666,8 @@ async function startQortal() {
} else {
try {
await spawn(
- 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-Xss1250k', '-Xmx2200m', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
- { cwd: qortaldir }
+ 'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
+ { cwd: qortaldir, shell: true, detached: true }
)
} catch (err) {
log.info('Start qortal error', err)
From 35593404f5c22264e91e4f55179682cf2f9ef08e Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 29 Apr 2023 10:12:44 +0200
Subject: [PATCH 08/26] remove file-saver
---
.../plugins/core/components/ChatScroller.js | 23 +++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index 598ea10c..520a21ae 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -20,7 +20,6 @@ import '@material/mwc-dialog';
import '@material/mwc-icon';
import { EmojiPicker } from 'emoji-picker-js';
import { generateHTML } from '@tiptap/core';
-import { saveAs } from 'file-saver';
import axios from "axios";
import StarterKit from '@tiptap/starter-kit'
import Underline from '@tiptap/extension-underline';
@@ -476,12 +475,32 @@ class MessageTemplate extends LitElement {
.then(response =>{
let filename = attachment.attachmentName;
let blob = new Blob([response.data], { type:"application/octet-stream" });
- saveAs(blob , filename);
+ this.saveFileToDisk(blob , filename);
})
} catch (error) {
console.error(error);
}
}
+
+ async saveFileToDisk(blob, fileName) {
+ try {
+ const fileHandle = await self.showSaveFilePicker({
+ suggestedName: fileName,
+ types: [{
+ description: "File",
+ }]
+ })
+ const writeFile = async (fileHandle, contents) => {
+ const writable = await fileHandle.createWritable()
+ await writable.write(contents)
+ await writable.close()
+ }
+ writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
+ } catch (error) {
+ console.log(error)
+ }
+ }
+
firstUpdated(){
const autoSeeChatList = window.parent.reduxStore.getState().app.autoLoadImageChats
if(autoSeeChatList.includes(this.chatId) || this.listSeenMessages.includes(this.messageObj.signature)){
From 4ca3de1c2b7a682ef96edbbe5aadbcdd060a55d8 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 29 Apr 2023 10:14:09 +0200
Subject: [PATCH 09/26] remove file-saver
---
qortal-ui-plugins/plugins/core/components/ChatPage.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index b9da91f2..19534afd 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -10,7 +10,6 @@ import Highlight from '@tiptap/extension-highlight'
import {unsafeHTML} from 'lit/directives/unsafe-html.js';
import { Editor, Extension } from '@tiptap/core'
import * as zip from "@zip.js/zip.js";
-import { saveAs } from 'file-saver';
import './ChatGifs/ChatGifs.js';
import localForage from "localforage";
From 36f0e1bd6d5b9a6d1d86281439277faff34c3c7d Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 29 Apr 2023 17:37:41 +0200
Subject: [PATCH 10/26] Update dependencies
---
package.json | 2 +-
qortal-ui-core/package.json | 21 ++++++++++-----------
qortal-ui-plugins/package.json | 19 +++++++++----------
3 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/package.json b/package.json
index 407d3433..f7611aa5 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
"os-locale": "3.0.0"
},
"devDependencies": {
- "electron": "24.1.2",
+ "electron": "24.1.3",
"electron-builder": "23.6.0",
"electron-packager": "17.1.1",
"shelljs": "0.8.5"
diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json
index 1ad7c948..b2d153bb 100644
--- a/qortal-ui-core/package.json
+++ b/qortal-ui-core/package.json
@@ -17,12 +17,12 @@
"author": "QORTAL ",
"license": "GPL-3.0",
"dependencies": {
- "@hapi/hapi": "21.3.1",
+ "@hapi/hapi": "21.3.2",
"@hapi/inert": "7.1.0",
- "sass": "1.62.0"
+ "sass": "1.62.1"
},
"devDependencies": {
- "@babel/core": "7.21.4",
+ "@babel/core": "7.21.5",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@@ -60,22 +60,21 @@
"@rollup/plugin-node-resolve": "15.0.2",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.4.1",
- "@vaadin/button": "24.0.3",
- "@vaadin/grid": "24.0.3",
- "@vaadin/icons": "24.0.3",
- "@vaadin/password-field": "24.0.3",
- "@vaadin/tooltip": "24.0.3",
+ "@vaadin/button": "24.0.4",
+ "@vaadin/grid": "24.0.4",
+ "@vaadin/icons": "24.0.4",
+ "@vaadin/password-field": "24.0.4",
+ "@vaadin/tooltip": "24.0.4",
"asmcrypto.js": "2.3.2",
"bcryptjs": "2.4.3",
"epml": "0.3.3",
- "file-saver": "2.0.5",
- "lit": "2.7.2",
+ "lit": "2.7.3",
"lit-translate": "2.0.1",
"localforage": "1.10.0",
"pwa-helpers": "0.9.1",
"redux": "4.2.1",
"redux-thunk": "2.4.2",
- "rollup": "3.20.7",
+ "rollup": "3.21.1",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0"
diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json
index 29093e3f..c99d8248 100644
--- a/qortal-ui-plugins/package.json
+++ b/qortal-ui-plugins/package.json
@@ -41,11 +41,11 @@
"prosemirror-schema-list": "1.2.2",
"prosemirror-state": "1.4.2",
"prosemirror-transform": "1.7.1",
- "prosemirror-view": "1.30.2",
+ "prosemirror-view": "1.31.0",
"short-unique-id": "4.4.4"
},
"devDependencies": {
- "@babel/core": "7.21.4",
+ "@babel/core": "7.21.5",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@@ -72,21 +72,20 @@
"@rollup/plugin-node-resolve": "15.0.2",
"@rollup/plugin-replace": "5.0.2",
"@rollup/plugin-terser": "0.4.1",
- "@vaadin/avatar": "24.0.3",
- "@vaadin/button": "24.0.3",
- "@vaadin/grid": "24.0.3",
- "@vaadin/icons": "24.0.3",
- "@vaadin/tooltip": "24.0.3",
+ "@vaadin/avatar": "24.0.4",
+ "@vaadin/button": "24.0.4",
+ "@vaadin/grid": "24.0.4",
+ "@vaadin/icons": "24.0.4",
+ "@vaadin/tooltip": "24.0.4",
"@zip.js/zip.js": "2.7.6",
"axios": "1.3.5",
"epml": "0.3.3",
- "file-saver": "2.0.5",
"highcharts": "10.3.3",
"html-escaper": "3.0.3",
- "lit": "2.7.2",
+ "lit": "2.7.3",
"lit-translate": "2.0.1",
"passive-events-support": "1.0.33",
- "rollup": "3.20.7",
+ "rollup": "3.21.1",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2"
From 8952736357571c7b78ea73021ed3ff7401bd6b99 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sun, 30 Apr 2023 02:46:54 +0200
Subject: [PATCH 11/26] Remove blocked items from list
---
qortal-ui-plugins/plugins/core/q-app/q-apps.src.js | 4 ++--
qortal-ui-plugins/plugins/core/qdn/websites.src.js | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js b/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
index b50c038c..342380ee 100644
--- a/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
+++ b/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
@@ -696,7 +696,7 @@ class QApps extends LitElement {
getArbitraryResources = async () => {
const resources = await parentEpml.request('apiCall', {
- url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false`
+ url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false&excludeblocked=true`
})
this.resources = resources
}
@@ -732,7 +732,7 @@ class QApps extends LitElement {
async getData(offset) {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
- let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=APP&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true`
+ let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=APP&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true`
const jsonOffsetRes = await fetch(jsonOffsetUrl)
const jsonOffsetData = await jsonOffsetRes.json()
diff --git a/qortal-ui-plugins/plugins/core/qdn/websites.src.js b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
index b5d1e276..86646ee2 100644
--- a/qortal-ui-plugins/plugins/core/qdn/websites.src.js
+++ b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
@@ -541,7 +541,7 @@ class Websites extends LitElement {
getArbitraryResources = async () => {
const resources = await parentEpml.request('apiCall', {
- url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false`
+ url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=false&includemetadata=false&excludeblocked=true`
})
this.resources = resources
}
@@ -577,7 +577,7 @@ class Websites extends LitElement {
async getData(offset) {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
- let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=WEBSITE&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true`
+ let jsonOffsetUrl = `${nodeUrl}/arbitrary/resources?service=WEBSITE&default=true&limit=20&offset=${offset}&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true`
const jsonOffsetRes = await fetch(jsonOffsetUrl)
const jsonOffsetData = await jsonOffsetRes.json()
From f0897e2982ab5cd64cd7a2fe89b3e6d3a128a4d5 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sun, 30 Apr 2023 09:18:14 +0200
Subject: [PATCH 12/26] Fix page counter
---
.../plugins/core/q-app/q-apps.src.js | 20 ++++++++++++-------
.../plugins/core/qdn/websites.src.js | 14 +++++++++----
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js b/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
index 342380ee..fd90bb76 100644
--- a/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
+++ b/qortal-ui-plugins/plugins/core/q-app/q-apps.src.js
@@ -760,7 +760,7 @@ class QApps extends LitElement {
} else {
offset = 0
}
- this.getData(offset);
+ this.getData(offset)
const selectedPage = parseInt(this.pagesControl.querySelector('[selected]').textContent)
this.updateItemsFromPage(selectedPage - 1)
})
@@ -776,7 +776,7 @@ class QApps extends LitElement {
} else {
offset = 0
}
- this.getData(offset);
+ this.getData(offset)
this.updateItemsFromPage(parseInt(e.target.textContent))
})
if (pageNumber === page) {
@@ -793,7 +793,7 @@ class QApps extends LitElement {
} else {
offset = 0
}
- this.getData(offset);
+ this.getData(offset)
const selectedPage = parseInt(this.pagesControl.querySelector('[selected]').textContent)
this.updateItemsFromPage(selectedPage + 1)
})
@@ -831,6 +831,12 @@ class QApps extends LitElement {
await this.updateItemsFromPage(1, true)
}
+ async refreshapps() {
+ await this.getData(0)
+ await this.getArbitraryResources()
+ await this.updateItemsFromPage(1, true)
+ }
+
doSearch(e) {
this.searchResult()
}
@@ -1008,7 +1014,7 @@ class QApps extends LitElement {
this.followedNames.push(name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.getArbitraryResources()
+ this.refreshapps()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err3string = get("appspage.schange22")
@@ -1037,7 +1043,7 @@ class QApps extends LitElement {
this.followedNames = this.followedNames.filter(item => item != name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.getArbitraryResources()
+ this.refreshapps()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err4string = get("appspage.schange23")
@@ -1067,7 +1073,7 @@ class QApps extends LitElement {
this.blockedNames.push(name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.getArbitraryResources()
+ this.refreshapps()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err5string = get("appspage.schange24")
@@ -1096,7 +1102,7 @@ class QApps extends LitElement {
this.blockedNames = this.blockedNames.filter(item => item != name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.getArbitraryResources()
+ this.refreshapps()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err6string = get("appspage.schange25")
diff --git a/qortal-ui-plugins/plugins/core/qdn/websites.src.js b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
index 86646ee2..e412bd92 100644
--- a/qortal-ui-plugins/plugins/core/qdn/websites.src.js
+++ b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
@@ -676,6 +676,12 @@ class Websites extends LitElement {
await this.updateItemsFromPage(1, true)
}
+ async refreshWebsites() {
+ await this.getData(0)
+ await this.getArbitraryResources()
+ await this.updateItemsFromPage(1, true)
+ }
+
doSearch(e) {
this.searchResult()
}
@@ -753,7 +759,7 @@ class Websites extends LitElement {
this.followedNames.push(name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.getArbitraryResources()
+ this.refreshWebsites()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err3string = get("websitespage.schange22")
@@ -783,7 +789,7 @@ class Websites extends LitElement {
this.followedNames = this.followedNames.filter(item => item != name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.getArbitraryResources()
+ this.refreshWebsites()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err4string = get("websitespage.schange23")
@@ -816,7 +822,7 @@ class Websites extends LitElement {
this.blockedNames.push(name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.getArbitraryResources()
+ this.refreshWebsites()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err5string = get("websitespage.schange24")
@@ -846,7 +852,7 @@ class Websites extends LitElement {
this.blockedNames = this.blockedNames.filter(item => item != name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.getArbitraryResources()
+ this.refreshWebsites()
this.updateComplete.then(() => this.requestUpdate())
} else {
let err6string = get("websitespage.schange25")
From 5d6fdc53754162543261db358916d1abeaf402a4 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Mon, 1 May 2023 13:35:45 +0200
Subject: [PATCH 13/26] Added checkbox for start core
---
electron.js | 77 +++++++++++++++++++++++++++++++++++++---------
locales/bg.json | 8 ++++-
locales/de.json | 8 ++++-
locales/en.json | 8 ++++-
locales/es.json | 10 ++++--
locales/fr.json | 8 ++++-
locales/it.json | 8 ++++-
locales/ko.json | 8 ++++-
locales/nl.json | 8 ++++-
locales/no.json | 8 ++++-
locales/pt.json | 8 ++++-
locales/pt_BR.json | 8 ++++-
locales/ru_RU.json | 8 ++++-
locales/tr.json | 8 ++++-
locales/uk.json | 8 ++++-
locales/zh_CN.json | 8 ++++-
locales/zh_TW.json | 8 ++++-
package.json | 3 +-
18 files changed, 177 insertions(+), 33 deletions(-)
diff --git a/electron.js b/electron.js
index aae3c452..c3c92fb7 100644
--- a/electron.js
+++ b/electron.js
@@ -6,6 +6,7 @@ const path = require('path')
const i18n = require('./lib/i18n.js')
const fs = require('fs')
const electronDl = require('electron-dl')
+const Store = require('electron-store')
const extract = require('extract-zip')
const fetch = require('node-fetch')
const execFile = require('child_process').execFile
@@ -20,15 +21,21 @@ process.env['APP_PATH'] = app.getAppPath()
const homePath = app.getPath('home')
const downloadPath = app.getPath('downloads')
+const store = new Store()
autoUpdater.autoDownload = false
autoUpdater.autoInstallOnAppQuit = false
autoUpdater.logger = log
autoUpdater.logger.transports.file.level = 'info'
+if(!store.has('askingCore')) {
+ store.set('askingCore', false)
+}
+
log.info('App starting...')
log.info('App Platform is', process.platform)
log.info('Platform arch is', process.arch)
+log.info("ASKING CORE", store.get('askingCore'))
const winjar = String.raw`C:\Program Files\Qortal\qortal.jar`
const winurl = "https://github.com/Qortal/qortal/releases/latest/download/qortal.exe"
@@ -90,20 +97,26 @@ async function checkWin() {
if (status == true) {
log.info("Core is running, perfect !")
} else {
- const dialogOpts = {
- type: 'info',
- buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
- title: i18n.__("electron_translate_15"),
- message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17")
- }
- dialog.showMessageBox(dialogOpts).then((returnValue) => {
- if (returnValue.response === 0) {
- spawn(startWinCore, { detached: true })
- } else {
- return
+ if (!store.get('askingCore')) {
+ const dialogOpts = {
+ type: 'info',
+ buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
+ title: i18n.__("electron_translate_15"),
+ message: i18n.__("electron_translate_16"),
+ detail: i18n.__("electron_translate_17"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: false
}
- })
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ spawn(startWinCore, { detached: true })
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ }
}
})
} else {
@@ -460,12 +473,16 @@ function checkQortal() {
buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
title: i18n.__("electron_translate_15"),
message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17")
+ detail: i18n.__("electron_translate_17"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: false
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) {
startQortal()
+ store.set('askingCore', returnValue.checkboxChecked)
} else {
+ store.set('askingCore', returnValue.checkboxChecked)
return
}
})
@@ -555,12 +572,16 @@ async function checkAndStart() {
buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
title: i18n.__("electron_translate_15"),
message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17")
+ detail: i18n.__("electron_translate_17"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: false
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) {
startQortal()
+ store.set('askingCore', returnValue.checkboxChecked)
} else {
+ store.set('askingCore', returnValue.checkboxChecked)
return
}
})
@@ -756,6 +777,32 @@ const createTray = () => {
{
type: 'separator',
},
+ {
+ label: i18n.__("electron_translate_31"),
+ click: function () {
+ const dialogOpts = {
+ type: 'info',
+ noLink: true,
+ buttons: [i18n.__("electron_translate_29"), i18n.__("electron_translate_30")],
+ title: i18n.__("electron_translate_31"),
+ message: i18n.__("electron_translate_32"),
+ detail: i18n.__("electron_translate_33"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: store.get('askingCore')
+ }
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ },
+ },
+ {
+ type: 'separator',
+ },
{
label: i18n.__("electron_translate_1"),
click: function () {
diff --git a/locales/bg.json b/locales/bg.json
index 1bb52192..e2439bed 100644
--- a/locales/bg.json
+++ b/locales/bg.json
@@ -27,5 +27,11 @@
"electron_translate_24": "НЕ БЛАГОДАРЯ",
"electron_translate_25": "Java не е инсталирана.",
"electron_translate_26": "Qortal UI откри, че Java не е инсталирана на вашата система.",
- "electron_translate_27": "Щракнете върху ИЗТЕГЛЯНЕ на JAVA, за да изтеглите и инсталирате Java, или върху НЕ, БЛАГОДАРЯ, за да не я изтеглите и инсталирате."
+ "electron_translate_27": "Щракнете върху ИЗТЕГЛЯНЕ на JAVA, за да изтеглите и инсталирате Java, или върху НЕ, БЛАГОДАРЯ, за да не я изтеглите и инсталирате.",
+ "electron_translate_28": "Никога повече не ме питай",
+ "electron_translate_29": "ПРОМЯНА НА НАСТРОЙКАТА",
+ "electron_translate_30": "ОТКАЗ",
+ "electron_translate_31": "Стартиране на основните настройки",
+ "electron_translate_32": "Промяна на текущото състояние на запитване за стартиране на ядрото, ако то не работи",
+ "electron_translate_33": "(Поставете отметка или премахнете отметката от квадратчето никога повече да не ме питате)"
}
\ No newline at end of file
diff --git a/locales/de.json b/locales/de.json
index 135b0bd1..730b0744 100644
--- a/locales/de.json
+++ b/locales/de.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NEIN DANKE",
"electron_translate_25": "Java ist nicht installiert.",
"electron_translate_26": "Qortal UI hat festgestellt, dass Java nicht auf Ihrem System installiert ist.",
- "electron_translate_27": "Klicken Sie auf JAVA HERUNTERLADEN, um Java herunterzuladen und zu installieren, oder auf NEIN DANKE, um es nicht herunterzuladen und zu installieren."
+ "electron_translate_27": "Klicken Sie auf JAVA HERUNTERLADEN, um Java herunterzuladen und zu installieren, oder auf NEIN DANKE, um es nicht herunterzuladen und zu installieren.",
+ "electron_translate_28": "Frag mich nie wieder",
+ "electron_translate_29": "EINSTELLUNG ÄNDERN",
+ "electron_translate_30": "ABBRECHEN",
+ "electron_translate_31": "Core-Einstellungen starten",
+ "electron_translate_32": "Ändern Sie den aktuellen Status der Aufforderung, den Core zu starten, wenn er nicht läuft",
+ "electron_translate_33": "(Aktivieren oder deaktivieren Sie das Kontrollkästchen Frag mich nie wieder)"
}
\ No newline at end of file
diff --git a/locales/en.json b/locales/en.json
index 19db1fd3..935e6256 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NO THANKS",
"electron_translate_25": "Java is not installed.",
"electron_translate_26": "Qortal UI has detected that java is not installed on your system.",
- "electron_translate_27": "Click on DOWNLOAD JAVA to download and install java or on NO THANKS to not download and install it."
+ "electron_translate_27": "Click on DOWNLOAD JAVA to download and install java or on NO THANKS to not download and install it.",
+ "electron_translate_28": "Never ask me again",
+ "electron_translate_29": "CHANGE SETTING",
+ "electron_translate_30": "CANCEL",
+ "electron_translate_31": "Start Core Setiings",
+ "electron_translate_32": "Change the current status of asking to start the core if it is not running",
+ "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)"
}
\ No newline at end of file
diff --git a/locales/es.json b/locales/es.json
index db652389..681156f5 100644
--- a/locales/es.json
+++ b/locales/es.json
@@ -26,6 +26,12 @@
"electron_translate_23": "DESCARGAR JAVA",
"electron_translate_24": "NO GRACIAS",
"electron_translate_25": "Java no está instalado.",
- "electron_translate_26": "La interfaz de usuario de Qortal ha detectado que Java no está instalado en su sistema".,
- "electron_translate_27": "Haz clic en DESCARGAR JAVA para descargar e instalar Java o en NO GRACIAS para no descargarlo e instalarlo".
+ "electron_translate_26": "La interfaz de usuario de Qortal ha detectado que Java no está instalado en su sistema.",
+ "electron_translate_27": "Haz clic en DESCARGAR JAVA para descargar e instalar Java o en NO GRACIAS para no descargarlo e instalarlo.",
+ "electron_translate_28": "Nunca me vuelvas a preguntar",
+ "electron_translate_29": "CAMBIAR CONFIGURACIÓN",
+ "electron_translate_30": "CANCELAR",
+ "electron_translate_31": "Iniciar configuración básica",
+ "electron_translate_32": "Cambiar el estado actual de solicitar iniciar el núcleo si no se está ejecutando",
+ "electron_translate_33": "(Marque o desmarque la casilla de verificación Nunca volver a preguntarme)"
}
\ No newline at end of file
diff --git a/locales/fr.json b/locales/fr.json
index 8ba1ade2..ea306fee 100644
--- a/locales/fr.json
+++ b/locales/fr.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NON MERCI",
"electron_translate_25": "Java n'est pas installé.",
"electron_translate_26": "L'interface utilisateur Qortal a détecté que Java n'est pas installé sur votre système.",
- "electron_translate_27": "Cliquez sur TÉLÉCHARGER JAVA pour télécharger et installer java ou sur NON MERCI pour ne pas le télécharger et l'installer."
+ "electron_translate_27": "Cliquez sur TÉLÉCHARGER JAVA pour télécharger et installer java ou sur NON MERCI pour ne pas le télécharger et l'installer.",
+ "electron_translate_28": "Ne me demande plus jamais",
+ "electron_translate_29": "MODIFIER LE PARAMÈTRE",
+ "electron_translate_30": "ANNULER",
+ "electron_translate_31": "Démarrer les paramètres de base",
+ "electron_translate_32": "Modifier l'état actuel de la demande de démarrage du noyau s'il n'est pas en cours d'exécution",
+ "electron_translate_33": "(Cochez ou décochez la case Ne plus jamais me demander)"
}
\ No newline at end of file
diff --git a/locales/it.json b/locales/it.json
index a3684fb3..62d138d4 100644
--- a/locales/it.json
+++ b/locales/it.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NO GRAZIE",
"electron_translate_25": "Java non è installato.",
"electron_translate_26": "Qortal UI ha rilevato che java non è installato sul tuo sistema.",
- "electron_translate_27": "Clicca su SCARICA JAVA per scaricare e installare java o su NO GRAZIE per non scaricarlo e installarlo."
+ "electron_translate_27": "Clicca su SCARICA JAVA per scaricare e installare java o su NO GRAZIE per non scaricarlo e installarlo.",
+ "electron_translate_28": "Non chiedermelo mai più",
+ "electron_translate_29": "MODIFICA IMPOSTAZIONE",
+ "electron_translate_30": "ANNULLA",
+ "electron_translate_31": "Avvia impostazioni di base",
+ "electron_translate_32": "Cambia lo stato attuale della richiesta di avvio del core se non è in esecuzione",
+ "electron_translate_33": "(Seleziona o deseleziona la casella di controllo Non chiedermelo più)"
}
\ No newline at end of file
diff --git a/locales/ko.json b/locales/ko.json
index dc1d8ec1..69750644 100644
--- a/locales/ko.json
+++ b/locales/ko.json
@@ -27,5 +27,11 @@
"electron_translate_24": "고마워요",
"electron_translate_25": "자바가 설치되지 않았습니다.",
"electron_translate_26": "Qortal UI에서 시스템에 Java가 설치되어 있지 않음을 감지했습니다.",
- "electron_translate_27": "Java를 다운로드하여 설치하려면 JAVA 다운로드를 클릭하고, 다운로드 및 설치하지 않으려면 NO THANKS를 클릭하십시오."
+ "electron_translate_27": "Java를 다운로드하여 설치하려면 JAVA 다운로드를 클릭하고, 다운로드 및 설치하지 않으려면 NO THANKS를 클릭하십시오.",
+ "electron_translate_28": "다시 묻지 않음",
+ "electron_translate_29": "설정 변경",
+ "electron_translate_30": "취소",
+ "electron_translate_31": "핵심 설정 시작",
+ "electron_translate_32": "코어가 실행 중이 아닌 경우 코어 시작을 요청하는 현재 상태 변경",
+ "electron_translate_33": "(다시 묻지 않음 확인란 선택 또는 선택 취소)"
}
\ No newline at end of file
diff --git a/locales/nl.json b/locales/nl.json
index b9fe7571..26164260 100644
--- a/locales/nl.json
+++ b/locales/nl.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NEE BEDANKT",
"electron_translate_25": "Java is niet geïnstalleerd.",
"electron_translate_26": "Qortal UI heeft gedetecteerd dat java niet op uw systeem is geïnstalleerd.",
- "electron_translate_27": "Klik op DOWNLOAD JAVA om java te downloaden en te installeren of op NO BEDANKT om het niet te downloaden en te installeren."
+ "electron_translate_27": "Klik op DOWNLOAD JAVA om java te downloaden en te installeren of op NO BEDANKT om het niet te downloaden en te installeren.",
+ "electron_translate_28": "Vraag het me nooit meer",
+ "electron_translate_29": "INSTELLING WIJZIGEN",
+ "electron_translate_30": "ANNULEREN",
+ "electron_translate_31": "Kerninstellingen starten",
+ "electron_translate_32": "Wijzig de huidige status van vragen om de kern te starten als deze niet draait",
+ "electron_translate_33": "(vink het selectievakje Nooit meer vragen aan of uit)"
}
\ No newline at end of file
diff --git a/locales/no.json b/locales/no.json
index 06bfc8e7..c3e0d7d8 100644
--- a/locales/no.json
+++ b/locales/no.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NEI TAKK",
"electron_translate_25": "Java er ikke installert.",
"electron_translate_26": "Qortal UI har oppdaget at Java ikke er installert på systemet ditt.",
- "electron_translate_27": "Klikk på LAST NED JAVA for å laste ned og installere Java, eller på NEI TAKK for å ikke laste ned og installere det."
+ "electron_translate_27": "Klikk på LAST NED JAVA for å laste ned og installere Java, eller på NEI TAKK for å ikke laste ned og installere det.",
+ "electron_translate_28": "Aldri spør meg igjen",
+ "electron_translate_29": "ENDRE INNSTILLING",
+ "electron_translate_30": "AVBRYT",
+ "electron_translate_31": "Start kjerneinnstillinger",
+ "electron_translate_32": "Endre gjeldende status for å spørre om å starte kjernen hvis den ikke kjører",
+ "electron_translate_33": "(Merk av eller fjern merket for aldri spør meg igjen)"
}
\ No newline at end of file
diff --git a/locales/pt.json b/locales/pt.json
index c33077f9..be7d580d 100644
--- a/locales/pt.json
+++ b/locales/pt.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NÃO, OBRIGADO",
"electron_translate_25": "Java não está instalado.",
"electron_translate_26": "Qortal UI detectou que o java não está instalado em seu sistema.",
- "electron_translate_27": "Clique em DOWNLOAD JAVA para baixar e instalar o java ou em NÃO, OBRIGADO para não baixar e instalar."
+ "electron_translate_27": "Clique em DOWNLOAD JAVA para baixar e instalar o java ou em NÃO, OBRIGADO para não baixar e instalar.",
+ "electron_translate_28": "Nunca mais me pergunte",
+ "electron_translate_29": "ALTERAR CONFIGURAÇÃO",
+ "electron_translate_30": "CANCELAR",
+ "electron_translate_31": "Iniciar configurações do núcleo",
+ "electron_translate_32": "Alterar o status atual de pedir para iniciar o núcleo se não estiver em execução",
+ "electron_translate_33": "(Marque ou desmarque a caixa de seleção para nunca mais me perguntar)"
}
\ No newline at end of file
diff --git a/locales/pt_BR.json b/locales/pt_BR.json
index 6f5ac94b..eb57eed5 100644
--- a/locales/pt_BR.json
+++ b/locales/pt_BR.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NÃO, OBRIGADO",
"electron_translate_25": "Java não está instalado.",
"electron_translate_26": "Qortal UI detectou que o java não está instalado em seu sistema.",
- "electron_translate_27": "Clique em DOWNLOAD JAVA para baixar e instalar o java ou em NÃO, OBRIGADO para não baixar e instalar."
+ "electron_translate_27": "Clique em DOWNLOAD JAVA para baixar e instalar o java ou em NÃO, OBRIGADO para não baixar e instalar.",
+ "electron_translate_28": "Nunca mais me pergunte",
+ "electron_translate_29": "ALTERAR CONFIGURAÇÃO",
+ "electron_translate_30": "CANCELAR",
+ "electron_translate_31": "Iniciar configurações do núcleo",
+ "electron_translate_32": "Alterar o status atual de pedir para iniciar o núcleo se não estiver em execução",
+ "electron_translate_33": "(Marque ou desmarque a caixa de seleção para nunca mais me perguntar)"
}
\ No newline at end of file
diff --git a/locales/ru_RU.json b/locales/ru_RU.json
index a822eb26..b1dbdd5a 100644
--- a/locales/ru_RU.json
+++ b/locales/ru_RU.json
@@ -27,5 +27,11 @@
"electron_translate_24": "НЕТ, СПАСИБО",
"electron_translate_25": "Java не установлена.",
"electron_translate_26": "Пользовательский интерфейс Qortal обнаружил, что в вашей системе не установлена Java.",
- "electron_translate_27": "Нажмите ЗАГРУЗИТЬ JAVA, чтобы загрузить и установить Java, или НЕТ, СПАСИБО, чтобы не загружать и устанавливать его."
+ "electron_translate_27": "Нажмите ЗАГРУЗИТЬ JAVA, чтобы загрузить и установить Java, или НЕТ, СПАСИБО, чтобы не загружать и устанавливать его.",
+ "electron_translate_28": "Никогда больше не спрашивайте меня",
+ "electron_translate_29": "ИЗМЕНИТЬ НАСТРОЙКИ",
+ "electron_translate_30": "ОТМЕНИТЬ",
+ "electron_translate_31": "Начать основные настройки",
+ "electron_translate_32": "Изменить текущий статус запроса на запуск ядра, если оно не запущено",
+ "electron_translate_33": "(Установите или снимите флажок Больше не спрашивать)"
}
\ No newline at end of file
diff --git a/locales/tr.json b/locales/tr.json
index 6b3f100d..4720b360 100644
--- a/locales/tr.json
+++ b/locales/tr.json
@@ -27,5 +27,11 @@
"electron_translate_24": "TEŞEKKÜR ETMİYORUM",
"electron_translate_25": "Java yüklü değil.",
"electron_translate_26": "Qortal UI sisteminizde java'nın kurulu olmadığını tespit etti.",
- "electron_translate_27": "Java'yı indirip yüklemek için JAVA'YI İNDİR'e, indirip kurmamak için HAYIR'a TEŞEKKÜRLER'e tıklayın."
+ "electron_translate_27": "Java'yı indirip yüklemek için JAVA'YI İNDİR'e, indirip kurmamak için HAYIR'a TEŞEKKÜRLER'e tıklayın.",
+ "electron_translate_28": "Bir daha asla sorma",
+ "electron_translate_29": "AYARI DEĞİŞTİR",
+ "electron_translate_30": "İPTAL",
+ "electron_translate_31": "Temel Ayarları Başlat",
+ "electron_translate_32": "Çalışmıyorsa çekirdeği başlatma isteğinin mevcut durumunu değiştir",
+ "electron_translate_33": "(Bana bir daha asla sorma onay kutusunu işaretleyin veya işaretini kaldırın)"
}
\ No newline at end of file
diff --git a/locales/uk.json b/locales/uk.json
index f42c78fd..6113bc9a 100644
--- a/locales/uk.json
+++ b/locales/uk.json
@@ -27,5 +27,11 @@
"electron_translate_24": "NO THANKS",
"electron_translate_25": "Java is not installed.",
"electron_translate_26": "Qortal UI has detected that java is not installed on your system.",
- "electron_translate_27": "Click on DOWNLOAD JAVA to download and install java or on NO THANKS to not download and install it."
+ "electron_translate_27": "Click on DOWNLOAD JAVA to download and install java or on NO THANKS to not download and install it.",
+ "electron_translate_28": "Never ask me again",
+ "electron_translate_29": "CHANGE SETTING",
+ "electron_translate_30": "CANCEL",
+ "electron_translate_31": "Start Core Setiings",
+ "electron_translate_32": "Change the current status of asking to start the core if it is not running",
+ "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)"
}
\ No newline at end of file
diff --git a/locales/zh_CN.json b/locales/zh_CN.json
index b7c9f26f..5d83da70 100644
--- a/locales/zh_CN.json
+++ b/locales/zh_CN.json
@@ -27,5 +27,11 @@
"electron_translate_24": "不用谢",
"electron_translate_25": "Java 未安装。",
"electron_translate_26": "Qortal UI 检测到您的系统上没有安装 java。",
- "electron_translate_27": "点击 DOWNLOAD JAVA 下载并安装 java 或点击 NO THANKS 不下载并安装它。"
+ "electron_translate_27": "点击 DOWNLOAD JAVA 下载并安装 java 或点击 NO THANKS 不下载并安装它。",
+ "electron_translate_28": "不要再问我",
+ "electron_translate_29": "更改设置",
+ "electron_translate_30": "取消",
+ "electron_translate_31": "开始核心设置",
+ "electron_translate_32": "更改核心未运行时要求启动的当前状态",
+ "electron_translate_33": "(选中或取消选中不再询问复选框)"
}
\ No newline at end of file
diff --git a/locales/zh_TW.json b/locales/zh_TW.json
index d64de524..73082e4f 100644
--- a/locales/zh_TW.json
+++ b/locales/zh_TW.json
@@ -27,5 +27,11 @@
"electron_translate_24": "不用謝",
"electron_translate_25": "Java 未安裝。",
"electron_translate_26": "Qortal UI 檢測到您的系統上沒有安裝 java。",
- "electron_translate_27": "點擊 DOWNLOAD JAVA 下載並安裝 java 或點擊 NO THANKS 不下載並安裝它。"
+ "electron_translate_27": "點擊 DOWNLOAD JAVA 下載並安裝 java 或點擊 NO THANKS 不下載並安裝它。",
+ "electron_translate_28": "不要再問我",
+ "electron_translate_29": "更改設置",
+ "electron_translate_30": "取消",
+ "electron_translate_31": "開始核心設置",
+ "electron_translate_32": "更改核心未運行時要求啟動的當前狀態",
+ "electron_translate_33": "(勾選或取消勾選不再詢問複選框)"
}
\ No newline at end of file
diff --git a/package.json b/package.json
index f7611aa5..b4d57976 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
"electron-log": "4.4.8",
"electron-updater": "5.3.0",
"electron-dl": "3.5.0",
+ "electron-store": "8.1.0",
"extract-zip": "2.0.1",
"node-fetch": "2.6.9",
"os-locale": "3.0.0"
@@ -48,4 +49,4 @@
"engines": {
"node": ">=18.14.0"
}
-}
+}
\ No newline at end of file
From c9e67bf67524b3c46a29e804be84e5629364f0cc Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Mon, 1 May 2023 17:32:19 +0200
Subject: [PATCH 14/26] Bump version 4.0.2
---
package.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index b4d57976..06ff57b6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "qortal-ui",
- "version": "4.0.1",
+ "version": "4.0.2",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
@@ -49,4 +49,4 @@
"engines": {
"node": ">=18.14.0"
}
-}
\ No newline at end of file
+}
From 767101eee78a1667b2fdba96e876188950cd3cf6 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Tue, 2 May 2023 17:54:59 +0200
Subject: [PATCH 15/26] Fix start core
---
electron.js | 120 ++++++++++++++++++++++++++++++++--------------------
1 file changed, 75 insertions(+), 45 deletions(-)
diff --git a/electron.js b/electron.js
index c3c92fb7..ac537b60 100644
--- a/electron.js
+++ b/electron.js
@@ -467,25 +467,26 @@ function checkQortal() {
if (status == true) {
log.info("Core is running, perfect !")
} else {
- log.info("Core is not running, starting it !")
- const dialogOpts = {
- type: 'info',
- buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
- title: i18n.__("electron_translate_15"),
- message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17"),
- checkboxLabel: i18n.__("electron_translate_28"),
- checkboxChecked: false
- }
- dialog.showMessageBox(dialogOpts).then((returnValue) => {
- if (returnValue.response === 0) {
- startQortal()
- store.set('askingCore', returnValue.checkboxChecked)
- } else {
- store.set('askingCore', returnValue.checkboxChecked)
- return
+ if (!store.get('askingCore')) {
+ const dialogOpts = {
+ type: 'info',
+ buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
+ title: i18n.__("electron_translate_15"),
+ message: i18n.__("electron_translate_16"),
+ detail: i18n.__("electron_translate_17"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: false
}
- })
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ startQortal()
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ }
}
})
} else {
@@ -567,24 +568,26 @@ async function removeQortalZip() {
async function checkAndStart() {
try {
- const dialogOpts = {
- type: 'info',
- buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
- title: i18n.__("electron_translate_15"),
- message: i18n.__("electron_translate_16"),
- detail: i18n.__("electron_translate_17"),
- checkboxLabel: i18n.__("electron_translate_28"),
- checkboxChecked: false
- }
- dialog.showMessageBox(dialogOpts).then((returnValue) => {
- if (returnValue.response === 0) {
- startQortal()
- store.set('askingCore', returnValue.checkboxChecked)
- } else {
- store.set('askingCore', returnValue.checkboxChecked)
- return
+ if (!store.get('askingCore')) {
+ const dialogOpts = {
+ type: 'info',
+ buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
+ title: i18n.__("electron_translate_15"),
+ message: i18n.__("electron_translate_16"),
+ detail: i18n.__("electron_translate_17"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: false
}
- })
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ startQortal()
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ }
} catch (err) {
log.info('Sed error', err)
}
@@ -709,16 +712,36 @@ const editMenu = Menu.buildFromTemplate([
}]
},
{
- label: "Edit",
- submenu: [
- { label: "Undo", accelerator: "CommandOrControl+Z", selector: "undo:" },
- { label: "Redo", accelerator: "CommandOrControl+Shift+Z", selector: "redo:" },
- { type: "separator" },
- { label: "Cut", accelerator: "CommandOrControl+X", selector: "cut:" },
- { label: "Copy", accelerator: "CommandOrControl+C", selector: "copy:" },
- { label: "Paste", accelerator: "CommandOrControl+V", selector: "paste:" },
- { label: "Select All", accelerator: "CommandOrControl+A", selector: "selectAll:" }
- ]
+ label: i18n.__("electron_translate_34"),
+ submenu: [{
+ label: i18n.__("electron_translate_31"),
+ click() {
+ const dialogOpts = {
+ type: 'info',
+ noLink: true,
+ buttons: [i18n.__("electron_translate_29"), i18n.__("electron_translate_30")],
+ title: i18n.__("electron_translate_31"),
+ message: i18n.__("electron_translate_32"),
+ detail: i18n.__("electron_translate_33"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: store.get('askingCore')
+ }
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ }
+ }]
+ },
+ {
+ label: "Check for update",
+ click() {
+ autoUpdater.checkForUpdatesAndNotify()
+ }
}
])
@@ -897,6 +920,13 @@ if (!isLock) {
}
})
})
+ autoUpdater.on('update-not-available', (event) => {
+ const noUpdate = new Notification({
+ title: 'Checking for update',
+ body: 'No update available, you are on latest version.'
+ })
+ noUpdate.show()
+ })
autoUpdater.on('download-progress', (progressObj) => {
myWindow.webContents.send('downloadProgress', progressObj)
})
From c5d6159ef2d5802bc96a990b26ab8663b2cbaa74 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Thu, 4 May 2023 00:33:25 +0200
Subject: [PATCH 16/26] Fix empty file and add core settings
---
electron.js | 33 +++++++++++++--
lib/preload.js | 6 +++
locales/de.json | 3 +-
locales/en.json | 3 +-
locales/uk.json | 3 +-
qortal-ui-core/language/de.json | 3 +-
qortal-ui-core/language/es.json | 3 +-
qortal-ui-core/language/fr.json | 3 +-
qortal-ui-core/language/hindi.json | 3 +-
qortal-ui-core/language/hr.json | 3 +-
qortal-ui-core/language/hu.json | 3 +-
qortal-ui-core/language/it.json | 3 +-
qortal-ui-core/language/ko.json | 3 +-
qortal-ui-core/language/no.json | 3 +-
qortal-ui-core/language/pl.json | 3 +-
qortal-ui-core/language/pt.json | 3 +-
qortal-ui-core/language/ro.json | 3 +-
qortal-ui-core/language/rs.json | 3 +-
qortal-ui-core/language/ru.json | 3 +-
qortal-ui-core/language/us.json | 3 +-
qortal-ui-core/language/zhc.json | 3 +-
qortal-ui-core/language/zht.json | 3 +-
qortal-ui-core/src/components/app-view.js | 3 ++
.../src/components/check-for-update.js | 41 +++++++++++++++++++
.../settings-view/notifications-view.js | 29 +++++++++++++
25 files changed, 149 insertions(+), 23 deletions(-)
create mode 100644 lib/preload.js
create mode 100644 qortal-ui-core/src/components/check-for-update.js
diff --git a/electron.js b/electron.js
index ac537b60..382f0e43 100644
--- a/electron.js
+++ b/electron.js
@@ -13,6 +13,7 @@ const execFile = require('child_process').execFile
const exec = require('child_process').exec
const spawn = require('child_process').spawn
+app.commandLine.appendSwitch('enable-experimental-web-platform-features')
app.disableHardwareAcceleration()
app.enableSandbox()
electronDl()
@@ -760,10 +761,13 @@ function createWindow() {
title: "Qortal UI",
autoHideMenuBar: true,
webPreferences: {
- nodeIntegration: true,
- nodeIntegrationInWorker: true,
partition: 'persist:webviewsession',
- enableRemoteModule: false
+ nodeIntegration: false,
+ contextIsolation: true,
+ enableRemoteModule: false,
+ allowRunningInsecureContent: false,
+ experimentalFeatures: false,
+ preload: path.join(__dirname, '/lib/preload.js')
},
show: false
})
@@ -900,6 +904,29 @@ if (!isLock) {
log.info(app.getVersion())
myWindow.webContents.send('app_version', { version: app.getVersion() })
})
+ ipcMain.on('set-start-core', (event) => {
+ const dialogOpts = {
+ type: 'info',
+ noLink: true,
+ buttons: [i18n.__("electron_translate_29"), i18n.__("electron_translate_30")],
+ title: i18n.__("electron_translate_31"),
+ message: i18n.__("electron_translate_32"),
+ detail: i18n.__("electron_translate_33"),
+ checkboxLabel: i18n.__("electron_translate_28"),
+ checkboxChecked: store.get('askingCore')
+ }
+ dialog.showMessageBox(dialogOpts).then((returnValue) => {
+ if (returnValue.response === 0) {
+ store.set('askingCore', returnValue.checkboxChecked)
+ } else {
+ store.set('askingCore', returnValue.checkboxChecked)
+ return
+ }
+ })
+ })
+ ipcMain.on('check-for-update', (event) => {
+ autoUpdater.checkForUpdatesAndNotify()
+ })
autoUpdater.on('update-available', (event) => {
const downloadOpts = {
type: 'info',
diff --git a/lib/preload.js b/lib/preload.js
new file mode 100644
index 00000000..bfc335b7
--- /dev/null
+++ b/lib/preload.js
@@ -0,0 +1,6 @@
+const { contextBridge, ipcRenderer } = require('electron')
+
+contextBridge.exposeInMainWorld('electronAPI', {
+ setStartCore: () => ipcRenderer.send('set-start-core'),
+ checkForUpdate: () => ipcRenderer.send('check-for-update')
+})
\ No newline at end of file
diff --git a/locales/de.json b/locales/de.json
index 730b0744..9a38631b 100644
--- a/locales/de.json
+++ b/locales/de.json
@@ -33,5 +33,6 @@
"electron_translate_30": "ABBRECHEN",
"electron_translate_31": "Core-Einstellungen starten",
"electron_translate_32": "Ändern Sie den aktuellen Status der Aufforderung, den Core zu starten, wenn er nicht läuft",
- "electron_translate_33": "(Aktivieren oder deaktivieren Sie das Kontrollkästchen Frag mich nie wieder)"
+ "electron_translate_33": "(Aktivieren oder deaktivieren Sie das Kontrollkästchen Frag mich nie wieder)",
+ "electron_translate_34": "Einstellungen"
}
\ No newline at end of file
diff --git a/locales/en.json b/locales/en.json
index 935e6256..855f9497 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -33,5 +33,6 @@
"electron_translate_30": "CANCEL",
"electron_translate_31": "Start Core Setiings",
"electron_translate_32": "Change the current status of asking to start the core if it is not running",
- "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)"
+ "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)",
+ "electron_translate_34": "Settings"
}
\ No newline at end of file
diff --git a/locales/uk.json b/locales/uk.json
index 6113bc9a..1c2637ac 100644
--- a/locales/uk.json
+++ b/locales/uk.json
@@ -33,5 +33,6 @@
"electron_translate_30": "CANCEL",
"electron_translate_31": "Start Core Setiings",
"electron_translate_32": "Change the current status of asking to start the core if it is not running",
- "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)"
+ "electron_translate_33": "(Check or Uncheck the never ask me again checkbox)",
+ "electron_translate_34": "Settings"
}
\ No newline at end of file
diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json
index 313d9aff..b02425c2 100644
--- a/qortal-ui-core/language/de.json
+++ b/qortal-ui-core/language/de.json
@@ -135,7 +135,8 @@
"exp1": "Privaten Hauptschlüssel exportieren",
"exp2": "Hauptschlüssel exportieren",
"exp3": "Exportieren",
- "exp4": "Bitte wählen Sie eine Brieftasche aus, um den privaten Hauptschlüssel zu sichern."
+ "exp4": "Bitte wählen Sie eine Brieftasche aus, um den privaten Hauptschlüssel zu sichern.",
+ "core": "Core-Einstellungen starten"
},
"appinfo": {
"blockheight": "Blockhöhe",
diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json
index 395d317c..f3124e23 100644
--- a/qortal-ui-core/language/es.json
+++ b/qortal-ui-core/language/es.json
@@ -135,7 +135,8 @@
"exp1": "Exportar clave maestra privada",
"exp2": "Exportar clave maestra",
"exp3": "Exportar",
- "exp4": "Elija una billetera para hacer una copia de seguridad de la clave maestra privada."
+ "exp4": "Elija una billetera para hacer una copia de seguridad de la clave maestra privada.",
+ "core": "Iniciar configuración básica"
},
"appinfo": {
"blockheight": "Altura del Bloque",
diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json
index d55e71a7..e62e5172 100644
--- a/qortal-ui-core/language/fr.json
+++ b/qortal-ui-core/language/fr.json
@@ -135,7 +135,8 @@
"exp1": "Exporter la clé principale privée",
"exp2": "Exporter la clé principale",
"exp3": "Exporter",
- "exp4": "Veuillez choisir un portefeuille pour sauvegarder la clé principale privée."
+ "exp4": "Veuillez choisir un portefeuille pour sauvegarder la clé principale privée.",
+ "core": "Démarrer les paramètres du noyau"
},
"appinfo": {
"blockheight": "Hauteur de bloc",
diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json
index 2fc27e4f..90a539bf 100644
--- a/qortal-ui-core/language/hindi.json
+++ b/qortal-ui-core/language/hindi.json
@@ -136,7 +136,8 @@
"exp1": "निजी मास्टर कुंजी निर्यात करें",
"exp2": "निर्यात मास्टर कुंजी",
"exp3": "निर्यात",
- "exp4": "निजी मास्टर कुंजी का बैकअप लेने के लिए कृपया एक वॉलेट चुनें।"
+ "exp4": "निजी मास्टर कुंजी का बैकअप लेने के लिए कृपया एक वॉलेट चुनें।",
+ "core": "कोर सेटिंग प्रारंभ करें"
},
"appinfo": {
"blockheight": "ब्लॉक ऊँचाई",
diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json
index 0ef9c7fb..46f42351 100644
--- a/qortal-ui-core/language/hr.json
+++ b/qortal-ui-core/language/hr.json
@@ -135,7 +135,8 @@
"exp1": "Izvezi privatni glavni ključ",
"exp2": "Glavni ključ izvoza",
"exp3": "Izvoz",
- "exp4": "Odaberite novčanik za sigurnosnu kopiju privatnog glavnog ključa."
+ "exp4": "Odaberite novčanik za sigurnosnu kopiju privatnog glavnog ključa.",
+ "core": "Pokreni osnovne postavke"
},
"appinfo": {
"blockheight": "Visina bloka",
diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json
index d6a5d44b..d4194f63 100644
--- a/qortal-ui-core/language/hu.json
+++ b/qortal-ui-core/language/hu.json
@@ -135,7 +135,8 @@
"exp1": "Privát főkulcs exportálása",
"exp2": "Főkulcs exportálása",
"exp3": "Exportálás",
- "exp4": "Kérjük, válasszon egy tárcát a privát főkulcs biztonsági mentéséhez."
+ "exp4": "Kérjük, válasszon egy tárcát a privát főkulcs biztonsági mentéséhez.",
+ "core": "Alapbeállítások indítása"
},
"appinfo": {
"blockheight": "Blokk Magassága",
diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json
index 35de8e6c..b3f2d858 100644
--- a/qortal-ui-core/language/it.json
+++ b/qortal-ui-core/language/it.json
@@ -135,7 +135,8 @@
"exp1": "Esporta chiave master privata",
"exp2": "Esporta chiave master",
"exp3": "Esporta",
- "exp4": "Scegli un portafoglio per il backup della chiave master privata."
+ "exp4": "Scegli un portafoglio per il backup della chiave master privata.",
+ "core": "Avvia impostazioni principali"
},
"appinfo": {
"blockheight": "Altezza blocco",
diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json
index 89cd68c4..08fcb7b4 100644
--- a/qortal-ui-core/language/ko.json
+++ b/qortal-ui-core/language/ko.json
@@ -135,7 +135,8 @@
"exp1": "개인 마스터 키 내보내기",
"exp2": "마스터 키 내보내기",
"exp3": "내보내기",
- "exp4": "개인 마스터 키를 백업할 지갑을 선택하세요."
+ "exp4": "개인 마스터 키를 백업할 지갑을 선택하세요.",
+ "core": "코어 설정 시작"
},
"appinfo": {
"blockheight": "블록 높이",
diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json
index a75127c4..bc03b42b 100644
--- a/qortal-ui-core/language/no.json
+++ b/qortal-ui-core/language/no.json
@@ -135,7 +135,8 @@
"exp1": "Eksporter privat hovednøkkel",
"exp2": "Eksporter hovednøkkel",
"exp3": "Eksporter",
- "exp4": "Velg en lommebok for å sikkerhetskopiere den private hovednøkkelen."
+ "exp4": "Velg en lommebok for å sikkerhetskopiere den private hovednøkkelen.",
+ "core": "Start kjerneinnstillinger"
},
"appinfo": {
"blockheight": "Blokkhøyde",
diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json
index b550a5f0..2d34e4be 100644
--- a/qortal-ui-core/language/pl.json
+++ b/qortal-ui-core/language/pl.json
@@ -135,7 +135,8 @@
"exp1": "Eksportuj prywatny klucz główny",
"exp2": "Eksportuj klucz główny",
"exp3": "Eksportuj",
- "exp4": "Wybierz portfel do wykonania kopii zapasowej prywatnego klucza głównego."
+ "exp4": "Wybierz portfel do wykonania kopii zapasowej prywatnego klucza głównego.",
+ "core": "Uruchom podstawowe ustawienia"
},
"appinfo": {
"blockheight": "Wysokość bloku",
diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json
index c24360f8..661b83bc 100644
--- a/qortal-ui-core/language/pt.json
+++ b/qortal-ui-core/language/pt.json
@@ -135,7 +135,8 @@
"exp1": "Exportar Chave Mestra Privada",
"exp2": "Exportar Chave Mestra",
"exp3": "Exportar",
- "exp4": "Por favor, escolha uma carteira para fazer backup da chave mestra privada."
+ "exp4": "Por favor, escolha uma carteira para fazer backup da chave mestra privada.",
+ "core": "Iniciar configurações do núcleo"
},
"appinfo": {
"blockheight": "Altura do Bloco",
diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json
index 47d767d6..b2352f64 100644
--- a/qortal-ui-core/language/ro.json
+++ b/qortal-ui-core/language/ro.json
@@ -135,7 +135,8 @@
"exp1": "Exportați cheia principală privată",
"exp2": "Exportați cheia principală",
"exp3": "Export",
- "exp4": "Vă rugăm să alegeți un portofel pentru a face backup cheii master private."
+ "exp4": "Vă rugăm să alegeți un portofel pentru a face backup cheii master private.",
+ "core": "Porniți setările de bază"
},
"appinfo": {
"blockheight": "Dimensiunea blocului",
diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json
index 5fd4f9c5..6e680149 100644
--- a/qortal-ui-core/language/rs.json
+++ b/qortal-ui-core/language/rs.json
@@ -135,7 +135,8 @@
"exp1": "Izvezi privatni glavni ključ",
"exp2": "Izvezi glavni ključ",
"exp3": "Izvoz",
- "exp4": "Molimo izaberite novčanik za rezervnu kopiju privatnog glavnog ključa."
+ "exp4": "Molimo izaberite novčanik za rezervnu kopiju privatnog glavnog ključa.",
+ "core": "Pokreni podešavanja jezgra"
},
"appinfo": {
"blockheight": "Visina Bloka",
diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json
index 669be0c1..860e7a58 100644
--- a/qortal-ui-core/language/ru.json
+++ b/qortal-ui-core/language/ru.json
@@ -135,7 +135,8 @@
"exp1": "Экспорт закрытого мастер-ключа",
"exp2": "Экспорт мастер-ключа",
"exp3": "Экспорт",
- "exp4": "Пожалуйста, выберите кошелек для резервного копирования приватного главного ключа."
+ "exp4": "Пожалуйста, выберите кошелек для резервного копирования приватного главного ключа.",
+ "core": "Начать основные настройки"
},
"appinfo": {
"blockheight": "Высота блока",
diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json
index e9fae851..d33c470e 100644
--- a/qortal-ui-core/language/us.json
+++ b/qortal-ui-core/language/us.json
@@ -135,7 +135,8 @@
"exp1": "Export Private Master Key",
"exp2": "Export Master Key",
"exp3": "Export",
- "exp4": "Please choose a wallet to backup the private master key."
+ "exp4": "Please choose a wallet to backup the private master key.",
+ "core": "Start Core Setiings"
},
"appinfo": {
"blockheight": "Block Height",
diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json
index 03b27352..1842a93b 100644
--- a/qortal-ui-core/language/zhc.json
+++ b/qortal-ui-core/language/zhc.json
@@ -135,7 +135,8 @@
"exp1": "导出主密钥",
"exp2": "导出主密钥",
"exp3": "导出",
- "exp4": "请选择一个钱包来备份私钥。"
+ "exp4": "请选择一个钱包来备份私钥。",
+ "core": "开始核心设置"
},
"appinfo": {
"blockheight": "区块高度",
diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json
index 4f9fd465..dd81efd0 100644
--- a/qortal-ui-core/language/zht.json
+++ b/qortal-ui-core/language/zht.json
@@ -135,7 +135,8 @@
"exp1": "導出主密鑰",
"exp2": "導出主密鑰",
"exp3": "導出",
- "exp4": "請選擇一個錢包來備份私鑰。"
+ "exp4": "請選擇一個錢包來備份私鑰。",
+ "core": "開始核心設置"
},
"appinfo": {
"blockheight": "區塊高度",
diff --git a/qortal-ui-core/src/components/app-view.js b/qortal-ui-core/src/components/app-view.js
index 6c570082..4543dd79 100644
--- a/qortal-ui-core/src/components/app-view.js
+++ b/qortal-ui-core/src/components/app-view.js
@@ -28,6 +28,7 @@ import './qort-theme-toggle.js'
import './language-selector.js'
import './settings-view/user-settings.js'
import './logout-view/logout-view.js'
+import './check-for-update.js'
import './user-info-view/user-info-view.js'
import '../functional-components/side-menu.js'
import '../functional-components/side-menu-item.js'
@@ -502,6 +503,8 @@ class AppView extends connect(store)(LitElement) {
this.openSettings()} title="${translate("settings.settings")}">
+
+
this.openLogout()} title="${translate("logout.logout")}">
diff --git a/qortal-ui-core/src/components/check-for-update.js b/qortal-ui-core/src/components/check-for-update.js
new file mode 100644
index 00000000..216e7a9c
--- /dev/null
+++ b/qortal-ui-core/src/components/check-for-update.js
@@ -0,0 +1,41 @@
+import { LitElement, html, css } from 'lit'
+import { get, translate, translateUnsafeHTML } from 'lit-translate'
+
+import '@polymer/paper-icon-button/paper-icon-button.js'
+import '@polymer/iron-icons/iron-icons.js'
+
+class CheckForUpdate extends LitElement {
+ static get properties() {
+ return {
+ theme: { type: String, reflect: true }
+ }
+ }
+
+ constructor() {
+ super()
+ this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
+ }
+
+ static styles = [
+ css`
+ `
+ ]
+
+ render() {
+ return html`
+
+
this.checkupdate()} title="${translate("appspage.schange38")} UI">
+
+ `
+ }
+
+ firstUpdated() {
+ }
+
+
+ checkupdate() {
+ window.electronAPI.checkForUpdate()
+ }
+}
+
+window.customElements.define('check-for-update', CheckForUpdate)
diff --git a/qortal-ui-core/src/components/settings-view/notifications-view.js b/qortal-ui-core/src/components/settings-view/notifications-view.js
index b09ec6ee..b432f604 100644
--- a/qortal-ui-core/src/components/settings-view/notifications-view.js
+++ b/qortal-ui-core/src/components/settings-view/notifications-view.js
@@ -83,6 +83,28 @@ class NotificationsView extends connect(store)(LitElement) {
font-size: 16px;
display: inline-block;
}
+
+ .q-button {
+ display: inline-flex;
+ flex-direction: column;
+ justify-content: center;
+ align-content: center;
+ border: none;
+ border-radius: 20px;
+ padding-left: 25px;
+ padding-right: 25px;
+ color: white;
+ background: #03a9f4;
+ width: 50%;
+ font-size: 17px;
+ cursor: pointer;
+ height: 50px;
+ margin-top: 1rem;
+ text-transform: uppercase;
+ text-decoration: none;
+ transition: all .2s;
+ position: relative;
+ }
`
}
@@ -123,10 +145,17 @@ class NotificationsView extends connect(store)(LitElement) {
+
+
this.checkCoreSettings()} class="q-button"> ${translate("settings.core")}
+
`
}
+ checkCoreSettings() {
+ window.electronAPI.setStartCore()
+ }
+
stateChanged(state) {
this.notificationConfig = state.user.notifications
this.q_chatConfig = this.notificationConfig.q_chat
From 45db6dad4ecb1e9e416a7eac77ec43927021656b Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Thu, 4 May 2023 00:35:20 +0200
Subject: [PATCH 17/26] Bump version 4.0.3
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 06ff57b6..6f8d4426 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "qortal-ui",
- "version": "4.0.2",
+ "version": "4.0.3",
"description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet",
"keywords": [
"QORT",
From 0215bd0779cbeb6852121f4628e7c8b29712608f Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Thu, 4 May 2023 09:59:12 +0200
Subject: [PATCH 18/26] Update electron.js
---
electron.js | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/electron.js b/electron.js
index 382f0e43..09e4ea8a 100644
--- a/electron.js
+++ b/electron.js
@@ -705,12 +705,9 @@ async function startQortal() {
const editMenu = Menu.buildFromTemplate([
{
label: "Qortal",
- submenu: [{
- label: "Quit",
- click() {
- app.quit()
- }
- }]
+ submenu: [
+ { label: "Quit", click() {app.quit()}}
+ ]
},
{
label: i18n.__("electron_translate_34"),
@@ -739,10 +736,19 @@ const editMenu = Menu.buildFromTemplate([
}]
},
{
- label: "Check for update",
- click() {
- autoUpdater.checkForUpdatesAndNotify()
- }
+ label: "Edit",
+ submenu: [
+ { label: "Undo", accelerator: "CmdOrCtrl+Z", selector: "undo:" },
+ { label: "Redo", accelerator: "Shift+CmdOrCtrl+Z", selector: "redo:" },
+ { type: "separator" },
+ { label: "Cut", accelerator: "CmdOrCtrl+X", selector: "cut:" },
+ { label: "Copy", accelerator: "CmdOrCtrl+C", selector: "copy:" },
+ { label: "Paste", accelerator: "CmdOrCtrl+V", selector: "paste:" },
+ { label: "Select All", accelerator: "CmdOrCtrl+A", selector: "selectAll:" }
+ ]
+ },
+ {
+ label: "Check for update", click() {autoUpdater.checkForUpdatesAndNotify()}
}
])
From 15ec9c51efd40f36173db331a039544cf9ca8470 Mon Sep 17 00:00:00 2001
From: Phillip
Date: Fri, 5 May 2023 02:14:42 +0300
Subject: [PATCH 19/26] websocket chat limit 1 and fix reply name
---
qortal-ui-plugins/plugins/core/components/ChatPage.js | 8 ++++----
qortal-ui-plugins/plugins/core/components/ChatScroller.js | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index 3e405f4f..5abd8a9a 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -2919,11 +2919,11 @@ class ChatPage extends LitElement {
if (window.parent.location.protocol === "https:") {
- directSocketLink = `wss://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}`;
+ directSocketLink = `wss://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&encoding=BASE64&limit=1`;
} else {
// Fallback to http
- directSocketLink = `ws://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}`;
+ directSocketLink = `ws://${nodeUrl}/websockets/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&encoding=BASE64&limit=1`;
}
this.webSocket = new WebSocket(directSocketLink);
@@ -3009,11 +3009,11 @@ class ChatPage extends LitElement {
if (window.parent.location.protocol === "https:") {
- groupSocketLink = `wss://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}`;
+ groupSocketLink = `wss://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}&encoding=BASE64&limit=1`;
} else {
// Fallback to http
- groupSocketLink = `ws://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}`;
+ groupSocketLink = `ws://${nodeUrl}/websockets/chat/messages?txGroupId=${groupId}&encoding=BASE64&limit=1`;
}
this.webSocket = new WebSocket(groupSocketLink);
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index 382a8114..329fee83 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -642,7 +642,7 @@ class MessageTemplate extends LitElement {
class=${this.myAddress !== repliedToData.sender
? "original-message-sender"
: "message-data-my-name"}>
- ${repliedToData.senderName ?? cropAddress(repliedToData.sender)}
+ ${repliedToData.senderName ? repliedToData.senderName : cropAddress(repliedToData.sender) }
${version.toString() === '1' ? html`
From c0b31de132da1c134a41fedf2b9d2298d0d5488a Mon Sep 17 00:00:00 2001
From: Phillip
Date: Fri, 5 May 2023 03:16:19 +0300
Subject: [PATCH 20/26] fix linking error when link to root q-app
---
.../plugins/core/components/ChatScroller.js | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index 520a21ae..c97ddf29 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -103,7 +103,17 @@ function processText(input) {
const res = await extractComponents(part)
if (!res) return
const { service, name, identifier, path } = res
- window.location = `../../qdn/browser/index.html?service=${service}&name=${name}&identifier=${identifier}&path=${path}`
+ let query = `?service=${service}`
+ if (name) {
+ query = query + `&name=${name}`
+ }
+ if (identifier) {
+ query = query + `&identifier=${identifier}`
+ }
+ if (path) {
+ query = query + `&path=${path}`
+ }
+ window.location = `../../qdn/browser/index.html${query}`
} catch (error) {
console.log({ error })
}
From 0eca538ddd4f0d38fd960b341bc7e852f062bc18 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Fri, 5 May 2023 19:23:51 +0200
Subject: [PATCH 21/26] reduce api calls on websites
---
.../plugins/core/qdn/websites.src.js | 190 ++++++++++++++++--
1 file changed, 168 insertions(+), 22 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/qdn/websites.src.js b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
index e412bd92..e7c3a252 100644
--- a/qortal-ui-plugins/plugins/core/qdn/websites.src.js
+++ b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
@@ -338,11 +338,7 @@ class Websites extends LitElement {
}}>
{
- render(html`${this.renderFollowUnfollowButton(data.item)}`, root);
- }}>
-
- {
- render(html`${this.renderBlockUnblockButton(data.item)}`, root);
+ render(html`${this.renderFollowUnfollowButtonTab(data.item)}`, root);
}}>
@@ -375,12 +371,8 @@ class Websites extends LitElement {
render(html`${this.renderPublishedBy(data.item)}`, root)
}}>
- {
- render(html`${this.renderFollowUnfollowButton(data.item)}`, root);
- }}>
-
{
- render(html`${this.renderBlockUnblockButton(data.item)}`, root);
+ render(html`${this.renderBlockUnblockButtonTab(data.item)}`, root);
}}>
@@ -479,7 +471,7 @@ class Websites extends LitElement {
setTimeout(getRelayMode, 1)
setTimeout(this.getFollowedNamesResource, 1)
setTimeout(this.getBlockedNamesResource, 1)
- setInterval(this.getArbitraryResources, 600000)
+ setInterval(this.getArbitraryResources, 900000)
configLoaded = true
}
this.config = JSON.parse(c)
@@ -522,9 +514,25 @@ class Websites extends LitElement {
const tabBrowseContent = this.shadowRoot.getElementById('tab-browse-content')
const tabFollowedContent = this.shadowRoot.getElementById('tab-followed-content')
const tabBlockedContent = this.shadowRoot.getElementById('tab-blocked-content')
- tabBrowseContent.style.display = (tab === 'browse') ? 'block' : 'none'
- tabFollowedContent.style.display = (tab === 'followed') ? 'block' : 'none'
- tabBlockedContent.style.display = (tab === 'blocked') ? 'block' : 'none'
+ if (tab === 'browse') {
+ this.refreshWebsites()
+ tabBrowseContent.style.display = 'block'
+ tabFollowedContent.style.display = 'none'
+ tabBlockedContent.style.display = 'none'
+ } else if (tab === 'followed') {
+ this.getFollowedNamesRefresh()
+ this.getFollowedNamesResource()
+ tabBrowseContent.style.display = 'none'
+ tabFollowedContent.style.display = 'block'
+ tabBlockedContent.style.display = 'none'
+ } else if (tab === 'blocked') {
+ this.getBlockedNamesRefresh()
+ this.getBlockedNamesResource()
+ tabBrowseContent.style.display = 'none'
+ tabFollowedContent.style.display = 'none'
+ tabBlockedContent.style.display = 'block'
+ } else {
+ }
}
searchListener(e) {
@@ -751,6 +759,35 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully followed - add to local list
+ // Remove it first by filtering the list - doing it this way ensures the UI updates
+ // immediately, as apposed to only adding if it doesn't already exist
+ this.followedNames = this.followedNames.filter(item => item != name)
+ this.followedNames.push(name)
+ } else {
+ let err3string = get("websitespage.schange22")
+ parentEpml.request('showSnackBar', `${err3string}`)
+ }
+ return ret
+ }
+
+ async followNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/followedNames?apiKey=${this.getApiKey()}`,
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully followed - add to local list
// Remove it first by filtering the list - doing it this way ensures the UI updates
@@ -759,8 +796,6 @@ class Websites extends LitElement {
this.followedNames.push(name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err3string = get("websitespage.schange22")
parentEpml.request('showSnackBar', `${err3string}`)
@@ -784,13 +819,37 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully unfollowed - remove from local list
+ this.followedNames = this.followedNames.filter(item => item != name)
+ } else {
+ let err4string = get("websitespage.schange23")
+ parentEpml.request('showSnackBar', `${err4string}`)
+ }
+ return ret
+ }
+
+ async unfollowNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/followedNames?apiKey=${this.getApiKey()}`,
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully unfollowed - remove from local list
this.followedNames = this.followedNames.filter(item => item != name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err4string = get("websitespage.schange23")
parentEpml.request('showSnackBar', `${err4string}`)
@@ -814,6 +873,35 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully blocked - add to local list
+ // Remove it first by filtering the list - doing it this way ensures the UI updates
+ // immediately, as apposed to only adding if it doesn't already exist
+ this.blockedNames = this.blockedNames.filter(item => item != name)
+ this.blockedNames.push(name)
+ } else {
+ let err5string = get("websitespage.schange24")
+ parentEpml.request('showSnackBar', `${err5string}`)
+ }
+ return ret
+ }
+
+ async blockNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/blockedNames?apiKey=${this.getApiKey()}`,
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully blocked - add to local list
// Remove it first by filtering the list - doing it this way ensures the UI updates
@@ -822,8 +910,6 @@ class Websites extends LitElement {
this.blockedNames.push(name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err5string = get("websitespage.schange24")
parentEpml.request('showSnackBar', `${err5string}`)
@@ -847,13 +933,37 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully unblocked - remove from local list
+ this.blockedNames = this.blockedNames.filter(item => item != name)
+ } else {
+ let err6string = get("websitespage.schange25")
+ parentEpml.request('showSnackBar', `${err6string}`)
+ }
+ return ret
+ }
+
+ async unblockNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/blockedNames?apiKey=${this.getApiKey()}`,
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully unblocked - remove from local list
this.blockedNames = this.blockedNames.filter(item => item != name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err6string = get("websitespage.schange25")
parentEpml.request('showSnackBar', `${err6string}`)
@@ -930,6 +1040,24 @@ class Websites extends LitElement {
}
}
+ renderFollowUnfollowButtonTab(websiteObj) {
+ let name = websiteObj.name
+
+ // Only show the follow/unfollow button if we have permission to modify the list on this node
+ if (this.followedNames == null || !Array.isArray(this.followedNames)) {
+ return html``
+ }
+
+ if (this.followedNames.indexOf(name) === -1) {
+ // render follow button
+ return html` this.followNameTab(websiteObj)}>add_to_queue ${translate("websitespage.schange29")}`
+ }
+ else {
+ // render unfollow button
+ return html` this.unfollowNameTab(websiteObj)}>remove_from_queue ${translate("websitespage.schange30")}`
+ }
+ }
+
renderBlockUnblockButton(websiteObj) {
let name = websiteObj.name
@@ -948,6 +1076,24 @@ class Websites extends LitElement {
}
}
+ renderBlockUnblockButtonTab(websiteObj) {
+ let name = websiteObj.name
+
+ // Only show the block/unblock button if we have permission to modify the list on this node
+ if (this.blockedNames == null || !Array.isArray(this.blockedNames)) {
+ return html``
+ }
+
+ if (this.blockedNames.indexOf(name) === -1) {
+ // render block button
+ return html` this.blockNameTab(websiteObj)}>block ${translate("websitespage.schange31")}`
+ }
+ else {
+ // render unblock button
+ return html` this.unblockNameTab(websiteObj)}>radio_button_unchecked ${translate("websitespage.schange32")}`
+ }
+ }
+
bytesToSize(bytes) {
var sizes = ['bytes', 'KB', 'MB', 'GB', 'TB']
if (bytes == 0) return '0 bytes'
From 70bba03a811f2cb91b65a31f99fda549d5c9d514 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 6 May 2023 12:03:19 +0200
Subject: [PATCH 22/26] Check if we use electron
---
package.json | 4 +--
qortal-ui-core/package.json | 8 ++++--
.../login-view/create-account-section.js | 28 ++++++++++++++++---
qortal-ui-plugins/package.json | 14 ++++++----
4 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/package.json b/package.json
index 6f8d4426..f0b26483 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"os-locale": "3.0.0"
},
"devDependencies": {
- "electron": "24.1.3",
+ "electron": "24.2.0",
"electron-builder": "23.6.0",
"electron-packager": "17.1.1",
"shelljs": "0.8.5"
@@ -49,4 +49,4 @@
"engines": {
"node": ">=18.14.0"
}
-}
+}
\ No newline at end of file
diff --git a/qortal-ui-core/package.json b/qortal-ui-core/package.json
index b2d153bb..cb851ee5 100644
--- a/qortal-ui-core/package.json
+++ b/qortal-ui-core/package.json
@@ -22,7 +22,7 @@
"sass": "1.62.1"
},
"devDependencies": {
- "@babel/core": "7.21.5",
+ "@babel/core": "7.21.8",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@@ -68,13 +68,15 @@
"asmcrypto.js": "2.3.2",
"bcryptjs": "2.4.3",
"epml": "0.3.3",
- "lit": "2.7.3",
+ "file-saver": "2.0.5",
+ "is-electron": "2.2.2",
+ "lit": "2.7.4",
"lit-translate": "2.0.1",
"localforage": "1.10.0",
"pwa-helpers": "0.9.1",
"redux": "4.2.1",
"redux-thunk": "2.4.2",
- "rollup": "3.21.1",
+ "rollup": "3.21.5",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0"
diff --git a/qortal-ui-core/src/components/login-view/create-account-section.js b/qortal-ui-core/src/components/login-view/create-account-section.js
index 69491c76..4e533ad2 100644
--- a/qortal-ui-core/src/components/login-view/create-account-section.js
+++ b/qortal-ui-core/src/components/login-view/create-account-section.js
@@ -7,6 +7,8 @@ import { createWallet } from '../../../../qortal-ui-crypto/api/createWallet.js'
import { doLogin, doLogout, doSelectAddress } from '../../redux/app/app-actions.js'
import { doStoreWallet } from '../../redux/user/user-actions.js'
import { checkApiKey } from '../../apiKeyUtils.js'
+import FileSaver from 'file-saver'
+import isElectron from 'is-electron'
import ripple from '../../functional-components/loading-ripple.js'
import snackbar from '../../functional-components/snackbar.js'
import '../../functional-components/random-sentence-generator.js'
@@ -592,15 +594,33 @@ class CreateAccountSection extends connect(store)(LitElement) {
const dataString = JSON.stringify(data)
const blob = new Blob([dataString], { type: 'text/plain;charset=utf-8' })
backupname = "qortal_backup_" + wallet.addresses[0].address + ".json"
- this.saveFileToDisk(blob, backupname)
+ if (!isElectron()) {
+ await FileSaver.saveAs(blob, `qortal_backup_${wallet.addresses[0].address}.json`)
+ let snack4string = get("general.save")
+ snackbar.add({
+ labelText: `${snack4string} ${backupname} ✅`,
+ dismiss: true
+ })
+ } else {
+ this.saveFileToDisk(blob, backupname)
+ }
}
- downloadSeedphrase() {
+ async downloadSeedphrase() {
let seedname = ""
const seed = this.shadowRoot.getElementById('randSentence').parsedString
const blob = new Blob([seed], { type: 'text/plain;charset=utf-8' })
- seedname = "qortal_seedphrase_" + wallet.addresses[0].address + ".txt"
- this.saveFileToDisk(blob, seedname)
+ seedname = "qortal_seedphrase.txt"
+ if (!isElectron()) {
+ await FileSaver.saveAs(blob, `qortal_seedphrase.txt`)
+ let snack4string = get("general.save")
+ snackbar.add({
+ labelText: `${snack4string} ${seedname} ✅`,
+ dismiss: true
+ })
+ } else {
+ this.saveFileToDisk(blob, seedname)
+ }
}
async saveFileToDisk(blob, fileName) {
diff --git a/qortal-ui-plugins/package.json b/qortal-ui-plugins/package.json
index c99d8248..9e877936 100644
--- a/qortal-ui-plugins/package.json
+++ b/qortal-ui-plugins/package.json
@@ -35,17 +35,17 @@
"prosemirror-commands": "1.5.1",
"prosemirror-dropcursor": "1.8.0",
"prosemirror-gapcursor": "1.3.1",
- "prosemirror-history": "1.3.0",
+ "prosemirror-history": "1.3.1",
"prosemirror-keymap": "1.2.1",
"prosemirror-model": "1.19.0",
"prosemirror-schema-list": "1.2.2",
"prosemirror-state": "1.4.2",
"prosemirror-transform": "1.7.1",
- "prosemirror-view": "1.31.0",
+ "prosemirror-view": "1.31.1",
"short-unique-id": "4.4.4"
},
"devDependencies": {
- "@babel/core": "7.21.5",
+ "@babel/core": "7.21.8",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@@ -78,14 +78,16 @@
"@vaadin/icons": "24.0.4",
"@vaadin/tooltip": "24.0.4",
"@zip.js/zip.js": "2.7.6",
- "axios": "1.3.5",
+ "axios": "1.4.0",
"epml": "0.3.3",
+ "file-saver": "2.0.5",
"highcharts": "10.3.3",
"html-escaper": "3.0.3",
- "lit": "2.7.3",
+ "is-electron": "2.2.2",
+ "lit": "2.7.4",
"lit-translate": "2.0.1",
"passive-events-support": "1.0.33",
- "rollup": "3.21.1",
+ "rollup": "3.21.5",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2"
From db08c3280f7465cac4408bc509ba65f4326a57b1 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 6 May 2023 14:32:31 +0200
Subject: [PATCH 23/26] add file-saver
---
.../login-view/create-account-section.js | 25 +++----------------
.../components/settings-view/export-keys.js | 3 ++-
.../components/settings-view/security-view.js | 3 ++-
.../functional-components/settings-page.js | 4 ++-
.../plugins/core/wallet/wallet-app.src.js | 3 ++-
5 files changed, 12 insertions(+), 26 deletions(-)
diff --git a/qortal-ui-core/src/components/login-view/create-account-section.js b/qortal-ui-core/src/components/login-view/create-account-section.js
index 4e533ad2..803fb7ad 100644
--- a/qortal-ui-core/src/components/login-view/create-account-section.js
+++ b/qortal-ui-core/src/components/login-view/create-account-section.js
@@ -8,7 +8,6 @@ import { doLogin, doLogout, doSelectAddress } from '../../redux/app/app-actions.
import { doStoreWallet } from '../../redux/user/user-actions.js'
import { checkApiKey } from '../../apiKeyUtils.js'
import FileSaver from 'file-saver'
-import isElectron from 'is-electron'
import ripple from '../../functional-components/loading-ripple.js'
import snackbar from '../../functional-components/snackbar.js'
import '../../functional-components/random-sentence-generator.js'
@@ -594,16 +593,7 @@ class CreateAccountSection extends connect(store)(LitElement) {
const dataString = JSON.stringify(data)
const blob = new Blob([dataString], { type: 'text/plain;charset=utf-8' })
backupname = "qortal_backup_" + wallet.addresses[0].address + ".json"
- if (!isElectron()) {
- await FileSaver.saveAs(blob, `qortal_backup_${wallet.addresses[0].address}.json`)
- let snack4string = get("general.save")
- snackbar.add({
- labelText: `${snack4string} ${backupname} ✅`,
- dismiss: true
- })
- } else {
- this.saveFileToDisk(blob, backupname)
- }
+ this.saveFileToDisk(blob, backupname)
}
async downloadSeedphrase() {
@@ -611,16 +601,7 @@ class CreateAccountSection extends connect(store)(LitElement) {
const seed = this.shadowRoot.getElementById('randSentence').parsedString
const blob = new Blob([seed], { type: 'text/plain;charset=utf-8' })
seedname = "qortal_seedphrase.txt"
- if (!isElectron()) {
- await FileSaver.saveAs(blob, `qortal_seedphrase.txt`)
- let snack4string = get("general.save")
- snackbar.add({
- labelText: `${snack4string} ${seedname} ✅`,
- dismiss: true
- })
- } else {
- this.saveFileToDisk(blob, seedname)
- }
+ this.saveFileToDisk(blob, seedname)
}
async saveFileToDisk(blob, fileName) {
@@ -643,7 +624,7 @@ class CreateAccountSection extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- console.log(error)
+ FileSaver.saveAs(blob, filename)
}
}
}
diff --git a/qortal-ui-core/src/components/settings-view/export-keys.js b/qortal-ui-core/src/components/settings-view/export-keys.js
index dc7d623c..e24df36d 100644
--- a/qortal-ui-core/src/components/settings-view/export-keys.js
+++ b/qortal-ui-core/src/components/settings-view/export-keys.js
@@ -3,6 +3,7 @@ import { connect } from 'pwa-helpers'
import { store } from '../../store.js'
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
import snackbar from '../../functional-components/snackbar.js'
+import FileSaver from 'file-saver'
import '@material/mwc-dialog'
import '@material/mwc-button'
@@ -251,7 +252,7 @@ class ExportKeys extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- console.log(error)
+ FileSaver.saveAs(blob, filename)
}
}
diff --git a/qortal-ui-core/src/components/settings-view/security-view.js b/qortal-ui-core/src/components/settings-view/security-view.js
index 918e6321..0dea81e8 100644
--- a/qortal-ui-core/src/components/settings-view/security-view.js
+++ b/qortal-ui-core/src/components/settings-view/security-view.js
@@ -4,6 +4,7 @@ import { store } from '../../store.js'
import { allowQAPPAutoAuth, removeQAPPAutoAuth, removeQAPPAutoLists, allowQAPPAutoLists } from '../../redux/app/app-actions.js'
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
import snackbar from '../../functional-components/snackbar.js'
+import FileSaver from 'file-saver'
import '@material/mwc-checkbox'
import '@material/mwc-textfield'
@@ -186,7 +187,7 @@ class SecurityView extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- console.log(error)
+ FileSaver.saveAs(blob, filename)
}
}
}
diff --git a/qortal-ui-core/src/functional-components/settings-page.js b/qortal-ui-core/src/functional-components/settings-page.js
index 5e951730..a45477aa 100644
--- a/qortal-ui-core/src/functional-components/settings-page.js
+++ b/qortal-ui-core/src/functional-components/settings-page.js
@@ -6,6 +6,8 @@ import { get, translate, translateUnsafeHTML } from 'lit-translate'
import snackbar from './snackbar.js'
import '../components/language-selector.js'
import '../custom-elements/frag-file-input.js'
+import FileSaver from 'file-saver'
+
import '@material/mwc-dialog'
import '@material/mwc-button'
import '@material/mwc-select'
@@ -347,7 +349,7 @@ class SettingsPage extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- console.log(error)
+ FileSaver.saveAs(blob, filename)
}
}
diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
index 903ed5fb..a7c1d722 100644
--- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
+++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
@@ -7,6 +7,7 @@ registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())
})
+import FileSaver from 'file-saver'
import '../components/ButtonIconCopy.js'
import '../components/QortalQrcodeGenerator.js'
import '../components/frag-file-input.js'
@@ -5810,7 +5811,7 @@ class MultiWallet extends LitElement {
let snack4string = get("general.save")
parentEpml.request('showSnackBar', `${snack4string} ${fileName} ✅`)
} catch (error) {
- console.log(error)
+ FileSaver.saveAs(blob, filename)
}
}
From 9d68ad2c03c48979308d2565d5207ba6bed70ef0 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 6 May 2023 15:00:03 +0200
Subject: [PATCH 24/26] fix saveas
---
.../src/components/login-view/create-account-section.js | 5 ++++-
qortal-ui-core/src/components/settings-view/export-keys.js | 5 ++++-
qortal-ui-core/src/components/settings-view/security-view.js | 5 ++++-
qortal-ui-core/src/functional-components/settings-page.js | 5 ++++-
qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js | 5 ++++-
5 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/qortal-ui-core/src/components/login-view/create-account-section.js b/qortal-ui-core/src/components/login-view/create-account-section.js
index 803fb7ad..a6aab2de 100644
--- a/qortal-ui-core/src/components/login-view/create-account-section.js
+++ b/qortal-ui-core/src/components/login-view/create-account-section.js
@@ -624,7 +624,10 @@ class CreateAccountSection extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- FileSaver.saveAs(blob, filename)
+ if (error.name === 'AbortError') {
+ return
+ }
+ FileSaver.saveAs(blob, fileName)
}
}
}
diff --git a/qortal-ui-core/src/components/settings-view/export-keys.js b/qortal-ui-core/src/components/settings-view/export-keys.js
index e24df36d..10cd7fd0 100644
--- a/qortal-ui-core/src/components/settings-view/export-keys.js
+++ b/qortal-ui-core/src/components/settings-view/export-keys.js
@@ -252,7 +252,10 @@ class ExportKeys extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- FileSaver.saveAs(blob, filename)
+ if (error.name === 'AbortError') {
+ return
+ }
+ FileSaver.saveAs(blob, fileName)
}
}
diff --git a/qortal-ui-core/src/components/settings-view/security-view.js b/qortal-ui-core/src/components/settings-view/security-view.js
index 0dea81e8..c0ee023d 100644
--- a/qortal-ui-core/src/components/settings-view/security-view.js
+++ b/qortal-ui-core/src/components/settings-view/security-view.js
@@ -187,7 +187,10 @@ class SecurityView extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- FileSaver.saveAs(blob, filename)
+ if (error.name === 'AbortError') {
+ return
+ }
+ FileSaver.saveAs(blob, fileName)
}
}
}
diff --git a/qortal-ui-core/src/functional-components/settings-page.js b/qortal-ui-core/src/functional-components/settings-page.js
index a45477aa..a7d26317 100644
--- a/qortal-ui-core/src/functional-components/settings-page.js
+++ b/qortal-ui-core/src/functional-components/settings-page.js
@@ -349,7 +349,10 @@ class SettingsPage extends connect(store)(LitElement) {
dismiss: true
})
} catch (error) {
- FileSaver.saveAs(blob, filename)
+ if (error.name === 'AbortError') {
+ return
+ }
+ FileSaver.saveAs(blob, fileName)
}
}
diff --git a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
index a7c1d722..3a2ba5d4 100644
--- a/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
+++ b/qortal-ui-plugins/plugins/core/wallet/wallet-app.src.js
@@ -5811,7 +5811,10 @@ class MultiWallet extends LitElement {
let snack4string = get("general.save")
parentEpml.request('showSnackBar', `${snack4string} ${fileName} ✅`)
} catch (error) {
- FileSaver.saveAs(blob, filename)
+ if (error.name === 'AbortError') {
+ return
+ }
+ FileSaver.saveAs(blob, fileName)
}
}
From 3bf3f4f1385aa9b60e049d48a62a96102f7312a6 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sat, 6 May 2023 15:03:18 +0200
Subject: [PATCH 25/26] WIP
---
locales/en.json | 2 +-
locales/uk.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/locales/en.json b/locales/en.json
index 855f9497..741737a1 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -31,7 +31,7 @@
"electron_translate_28": "Never ask me again",
"electron_translate_29": "CHANGE SETTING",
"electron_translate_30": "CANCEL",
- "electron_translate_31": "Start Core Setiings",
+ "electron_translate_31": "Start Core Settings",
"electron_translate_32": "Change the current status of asking to start the core if it is not running",
"electron_translate_33": "(Check or Uncheck the never ask me again checkbox)",
"electron_translate_34": "Settings"
diff --git a/locales/uk.json b/locales/uk.json
index 1c2637ac..28ae2fa2 100644
--- a/locales/uk.json
+++ b/locales/uk.json
@@ -31,7 +31,7 @@
"electron_translate_28": "Never ask me again",
"electron_translate_29": "CHANGE SETTING",
"electron_translate_30": "CANCEL",
- "electron_translate_31": "Start Core Setiings",
+ "electron_translate_31": "Start Core Settings",
"electron_translate_32": "Change the current status of asking to start the core if it is not running",
"electron_translate_33": "(Check or Uncheck the never ask me again checkbox)",
"electron_translate_34": "Settings"
From b663cd41eaf8a40b6f6c1a0fa604d6351e1f817e Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sun, 7 May 2023 12:10:10 +0200
Subject: [PATCH 26/26] add missing translations
---
qortal-ui-core/language/de.json | 10 +++++++++-
qortal-ui-core/language/es.json | 10 +++++++++-
qortal-ui-core/language/fr.json | 10 +++++++++-
qortal-ui-core/language/hindi.json | 10 +++++++++-
qortal-ui-core/language/hr.json | 10 +++++++++-
qortal-ui-core/language/hu.json | 10 +++++++++-
qortal-ui-core/language/it.json | 10 +++++++++-
qortal-ui-core/language/ko.json | 10 +++++++++-
qortal-ui-core/language/no.json | 10 +++++++++-
qortal-ui-core/language/pl.json | 10 +++++++++-
qortal-ui-core/language/pt.json | 10 +++++++++-
qortal-ui-core/language/ro.json | 10 +++++++++-
qortal-ui-core/language/rs.json | 10 +++++++++-
qortal-ui-core/language/ru.json | 10 +++++++++-
qortal-ui-core/language/us.json | 2 +-
qortal-ui-core/language/zhc.json | 10 +++++++++-
qortal-ui-core/language/zht.json | 10 +++++++++-
17 files changed, 145 insertions(+), 17 deletions(-)
diff --git a/qortal-ui-core/language/de.json b/qortal-ui-core/language/de.json
index b02425c2..f08aa2af 100644
--- a/qortal-ui-core/language/de.json
+++ b/qortal-ui-core/language/de.json
@@ -638,7 +638,15 @@
"bchange35": "Erteilen Sie dieser Anwendung die Erlaubnis, Coins zu senden?",
"bchange36": "Möchten Sie sofort auf QDN veröffentlichen, ohne einen Proof-of-Work zu berechnen?",
"bchange37": "Vollbild aufrufen",
- "bchange38": "Vollbild beenden"
+ "bchange38": "Vollbild beenden",
+ "bchange39": "Automatisches Abrufen von Listen immer zulassen",
+ "bchange40": "Liste",
+ "bchange41": "Erteilen Sie dieser Anwendung die Berechtigung, auf diese Liste zuzugreifen?",
+ "bchange42": "Artikel",
+ "bchange43": "Erteilen Sie dieser Anwendung die Erlaubnis, diese Liste hinzuzufügen?",
+ "bchange44": "Erteilen Sie dieser Anwendung die Erlaubnis, sie von dieser Liste zu löschen?",
+ "bchange45": "Verschlüsseln",
+ "bchange46": "Geben Sie dieser Anwendung die Erlaubnis, die folgende Datei zu speichern?"
},
"datapage": {
"dchange1": "Datenmanagement",
diff --git a/qortal-ui-core/language/es.json b/qortal-ui-core/language/es.json
index f3124e23..47eaadbe 100644
--- a/qortal-ui-core/language/es.json
+++ b/qortal-ui-core/language/es.json
@@ -638,7 +638,15 @@
"bchange35": "¿Le das permiso a esta aplicación para enviar monedas?",
"bchange36": "¿Desea publicar instantáneamente en QDN sin calcular la prueba de trabajo?",
"bchange37": "Ingresar a pantalla completa",
- "bchange38": "Salir de pantalla completa"
+ "bchange38": "Salir de pantalla completa",
+ "bchange39": "Permitir siempre que las listas se recuperen automáticamente",
+ "bchange40": "Lista",
+ "bchange41": "¿Le das permiso a esta aplicación para acceder a esta lista?",
+ "bchange42": "Artículos",
+ "bchange43": "¿Le das permiso a esta aplicación para agregar a esta lista?",
+ "bchange44": "¿Le das permiso a esta aplicación para eliminar de esta lista?",
+ "bchange45": "Cifrar",
+ "bchange46": "¿Le das permiso a esta aplicación para guardar el siguiente archivo?"
},
"datapage": {
"dchange1": "Gestión de datos",
diff --git a/qortal-ui-core/language/fr.json b/qortal-ui-core/language/fr.json
index e62e5172..fdfd0eed 100644
--- a/qortal-ui-core/language/fr.json
+++ b/qortal-ui-core/language/fr.json
@@ -638,7 +638,15 @@
"bchange35": "Autorisez-vous cette application à envoyer des pièces ?",
"bchange36": "Voulez-vous publier instantanément sur QDN sans calculer de preuve de travail ?",
"bchange37": "Entrez en plein écran",
- "bchange38": "Quitter le plein écran"
+ "bchange38": "Quitter le plein écran",
+ "bchange39": "Toujours autoriser la récupération automatique des listes",
+ "bchange40": "Liste",
+ "bchange41": "Autorisez-vous cette application à accéder à cette liste ?",
+ "bchange42": "Articles",
+ "bchange43": "Autorisez-vous cette application à ajouter à cette liste ?",
+ "bchange44": "Autorisez-vous cette application à supprimer de cette liste ?",
+ "bchange45": "Crypter",
+ "bchange46": "Autorisez-vous cette application à enregistrer le fichier suivant"
},
"datapage": {
"dchange1": "Gestion de données",
diff --git a/qortal-ui-core/language/hindi.json b/qortal-ui-core/language/hindi.json
index 90a539bf..d443fe42 100644
--- a/qortal-ui-core/language/hindi.json
+++ b/qortal-ui-core/language/hindi.json
@@ -639,7 +639,15 @@
"bchange35": "क्या आप इस एप्लिकेशन को सिक्के भेजने की अनुमति देते हैं?",
"bchange36": "क्या आप कार्य-प्रमाण की गणना किए बिना QDN पर तुरंत प्रकाशित करना चाहते हैं?",
"bchange37": "पूर्णस्क्रीन में प्रवेश करें",
- "bchange38": "पूर्णस्क्रीन से बाहर निकलें"
+ "bchange38": "पूर्णस्क्रीन से बाहर निकलें",
+ "bchange39": "हमेशा सूचियों को स्वत: प्राप्त करने की अनुमति दें",
+ "bchange40": "सूची",
+ "bchange41": "क्या आप इस एप्लिकेशन को इस सूची तक पहुँचने की अनुमति देते हैं?",
+ "bchange42": "आइटम",
+ "bchange43": "क्या आप इस एप्लिकेशन को इस सूची में जोड़ने की अनुमति देते हैं?",
+ "bchange44": "क्या आप इस एप्लिकेशन को इस सूची से हटाने की अनुमति देते हैं?",
+ "bchange45": "एन्क्रिप्ट",
+ "bchange46": "क्या आप इस एप्लिकेशन को निम्न फ़ाइल सहेजने की अनुमति देते हैं"
},
"datapage": {
"dchange1": "डाटा प्रबंधन",
diff --git a/qortal-ui-core/language/hr.json b/qortal-ui-core/language/hr.json
index 46f42351..0b6a33da 100644
--- a/qortal-ui-core/language/hr.json
+++ b/qortal-ui-core/language/hr.json
@@ -638,7 +638,15 @@
"bchange35": "Dajete li ovoj aplikaciji dopuštenje za slanje novčića?",
"bchange36": "Želite li objaviti instant na QDN bez izračunavanja dokaza o radu?",
"bchange37": "Uđi u cijeli zaslon",
- "bchange38": "Izađi preko cijelog zaslona"
+ "bchange38": "Izađi preko cijelog zaslona",
+ "bchange39": "Uvijek dopusti automatsko dohvaćanje popisa",
+ "bchange40": "Popis",
+ "bchange41": "Dajete li ovoj aplikaciji dozvolu za pristup ovom popisu?",
+ "bchange42": "Stavke",
+ "bchange43": "Dajete li ovoj aplikaciji dopuštenje za dodavanje na ovaj popis?",
+ "bchange44": "Dajete li ovoj aplikaciji dopuštenje za brisanje s ovog popisa?",
+ "bchange45": "Šifriraj",
+ "bchange46": "Dajete li ovoj aplikaciji dopuštenje za spremanje sljedeće datoteke"
},
"datapage": {
"dchange1": "Upravljanje podacima",
diff --git a/qortal-ui-core/language/hu.json b/qortal-ui-core/language/hu.json
index d4194f63..71b0a665 100644
--- a/qortal-ui-core/language/hu.json
+++ b/qortal-ui-core/language/hu.json
@@ -638,7 +638,15 @@
"bchange35": "Engedélyt ad ennek az alkalmazásnak érmék küldésére?",
"bchange36": "Szeretne azonnal közzétenni a QDN-ben a munkaigazolás kiszámítása nélkül?",
"bchange37": "Belépés a teljes képernyőre",
- "bchange38": "Kilépés a teljes képernyőről"
+ "bchange38": "Kilépés a teljes képernyőről",
+ "bchange39": "Mindig engedélyezze a listák automatikus lekérését",
+ "bchange40": "Lista",
+ "bchange41": "Engedélyt ad ennek az alkalmazásnak a lista eléréséhez?",
+ "bchange42": "Tételek",
+ "bchange43": "Engedélyt ad ennek az alkalmazásnak, hogy felvegye ezt a listát?",
+ "bchange44": "Engedélyezi ennek az alkalmazásnak, hogy töröljön erről a listáról?",
+ "bchange45": "Titkosítás",
+ "bchange46": "Engedélyezi ennek az alkalmazásnak a következő fájl mentését"
},
"datapage": {
"dchange1": "Adatkezelés",
diff --git a/qortal-ui-core/language/it.json b/qortal-ui-core/language/it.json
index b3f2d858..02c8ab77 100644
--- a/qortal-ui-core/language/it.json
+++ b/qortal-ui-core/language/it.json
@@ -638,7 +638,15 @@
"bchange35": "Concedi a questa applicazione il permesso di inviare monete?",
"bchange36": "Vuoi pubblicare istantaneamente su QDN senza calcolare la prova del lavoro?",
"bchange37": "Entra a schermo intero",
- "bchange38": "Esci da schermo intero"
+ "bchange38": "Esci da schermo intero",
+ "bchange39": "Consenti sempre il recupero automatico delle liste",
+ "bchange40": "Lista",
+ "bchange41": "Consenti a questa applicazione di accedere a questo elenco?",
+ "bchange42": "Articoli",
+ "bchange43": "Concedi a questa applicazione il permesso di aggiungersi a questa lista?",
+ "bchange44": "Concedi a questa applicazione il permesso di eliminare da questo elenco?",
+ "bchange45": "Cripta",
+ "bchange46": "Concedi a questa applicazione il permesso di salvare il seguente file"
},
"datapage": {
"dchange1": "Gestione dati",
diff --git a/qortal-ui-core/language/ko.json b/qortal-ui-core/language/ko.json
index 08fcb7b4..b31d16bf 100644
--- a/qortal-ui-core/language/ko.json
+++ b/qortal-ui-core/language/ko.json
@@ -638,7 +638,15 @@
"bchange35": "이 애플리케이션에 코인을 보낼 수 있는 권한을 부여하시겠습니까?",
"bchange36": "작업 증명을 계산하지 않고 QDN에 즉시 게시하시겠습니까?",
"bchange37": "전체화면으로 전환",
- "bchange38": "전체화면 종료"
+ "bchange38": "전체화면 종료",
+ "bchange39": "목록이 자동으로 검색되도록 항상 허용",
+ "bchange40": "목록",
+ "bchange41": "이 응용 프로그램이 이 목록에 접근할 수 있도록 허용하시겠습니까?",
+ "bchange42": "아이템",
+ "bchange43": "이 목록에 추가할 수 있는 권한을 이 응용 프로그램에 부여하시겠습니까?",
+ "bchange44": "이 목록에서 삭제할 수 있는 권한을 이 애플리케이션에 부여하시겠습니까?",
+ "bchange45": "암호화",
+ "bchange46": "이 응용 프로그램에 다음 파일을 저장할 권한을 부여하시겠습니까?"
},
"datapage": {
"dchange1": "데이터 관리",
diff --git a/qortal-ui-core/language/no.json b/qortal-ui-core/language/no.json
index bc03b42b..857ea6e9 100644
--- a/qortal-ui-core/language/no.json
+++ b/qortal-ui-core/language/no.json
@@ -638,7 +638,15 @@
"bchange35": "Gir du denne applikasjonen tillatelse til å sende mynter?",
"bchange36": "Vil du publisere øyeblikkelig til QDN uten å regne ut bevis på arbeid?",
"bchange37": "Gå inn i fullskjerm",
- "bchange38": "Avslutt fullskjerm"
+ "bchange38": "Avslutt fullskjerm",
+ "bchange39": "Tillat alltid at lister hentes automatisk",
+ "bchange40": "Liste",
+ "bchange41": "Gir du dette programmet tillatelse til å få tilgang til denne listen?",
+ "bchange42": "Elementer",
+ "bchange43": "Gir du denne applikasjonen tillatelse til å legge til denne listen?",
+ "bchange44": "Gir du denne applikasjonen tillatelse til å slette fra denne listen?",
+ "bchange45": "Krypter",
+ "bchange46": "Gir du dette programmet tillatelse til å lagre følgende fil"
},
"datapage": {
"dchange1": "Data-administrasjon",
diff --git a/qortal-ui-core/language/pl.json b/qortal-ui-core/language/pl.json
index 2d34e4be..fe8c0ffc 100644
--- a/qortal-ui-core/language/pl.json
+++ b/qortal-ui-core/language/pl.json
@@ -638,7 +638,15 @@
"bchange35": "Czy zezwalasz tej aplikacji na wysyłanie monet?",
"bchange36": "Czy chcesz natychmiast opublikować w QDN bez obliczania dowodu pracy?",
"bchange37": "Wejdź na pełny ekran",
- "bchange38": "Wyjdź z pełnego ekranu"
+ "bchange38": "Wyjdź z pełnego ekranu",
+ "bchange39": "Zawsze zezwalaj na automatyczne pobieranie list",
+ "bchange40": "Lista",
+ "bchange41": "Czy zezwalasz tej aplikacji na dostęp do tej listy?",
+ "bchange42": "Przedmioty",
+ "bchange43": "Czy zezwalasz tej aplikacji na dodanie do tej listy?",
+ "bchange44": "Czy zezwalasz tej aplikacji na usunięcie z tej listy?",
+ "bchange45": "Szyfruj",
+ "bchange46": "Czy zezwalasz tej aplikacji na zapisanie następującego pliku"
},
"datapage": {
"dchange1": "Zarządzanie danymi",
diff --git a/qortal-ui-core/language/pt.json b/qortal-ui-core/language/pt.json
index 661b83bc..2322b668 100644
--- a/qortal-ui-core/language/pt.json
+++ b/qortal-ui-core/language/pt.json
@@ -638,7 +638,15 @@
"bchange35": "Você dá permissão a este aplicativo para enviar moedas?",
"bchange36": "Deseja publicar instantaneamente em QDN sem calcular a prova de trabalho?",
"bchange37": "Entrar em tela cheia",
- "bchange38": "Sair da tela cheia"
+ "bchange38": "Sair da tela cheia",
+ "bchange39": "Sempre permitir que as listas sejam recuperadas automaticamente",
+ "bchange40": "Lista",
+ "bchange41": "Você concede a este aplicativo permissão para acessar esta lista?",
+ "bchange42": "Itens",
+ "bchange43": "Você dá a este aplicativo permissão para adicionar a esta lista?",
+ "bchange44": "Você dá a este aplicativo permissão para deletar desta lista?",
+ "bchange45": "Criptografar",
+ "bchange46": "Você concede permissão a este aplicativo para salvar o seguinte arquivo"
},
"datapage": {
"dchange1": "Gerenciamento de Dados",
diff --git a/qortal-ui-core/language/ro.json b/qortal-ui-core/language/ro.json
index b2352f64..5ebd1f07 100644
--- a/qortal-ui-core/language/ro.json
+++ b/qortal-ui-core/language/ro.json
@@ -638,7 +638,15 @@
"bchange35": "Acordați acestei aplicații permisiunea de a trimite monede?",
"bchange36": "Doriți să publicați instant în QDN fără a calcula dovada de lucru?",
"bchange37": "Intrați pe ecran complet",
- "bchange38": "Ieșiți din ecranul complet"
+ "bchange38": "Ieșiți din ecranul complet",
+ "bchange39": "Permiteți întotdeauna ca listele să fie preluate automat",
+ "bchange40": "Lista",
+ "bchange41": "Oferiți acestei aplicații permisiunea de a accesa această listă?",
+ "bchange42": "Elemente",
+ "bchange43": "Oferiți acestei aplicații permisiunea de a adăuga la această listă?",
+ "bchange44": "Oferiți acestei aplicații permisiunea de a șterge din această listă?",
+ "bchange45": "Criptați",
+ "bchange46": "Dați această aplicație permisiunea de a salva următorul fișier"
},
"datapage": {
"dchange1": "Gestionare date",
diff --git a/qortal-ui-core/language/rs.json b/qortal-ui-core/language/rs.json
index 6e680149..9f3bc13c 100644
--- a/qortal-ui-core/language/rs.json
+++ b/qortal-ui-core/language/rs.json
@@ -638,7 +638,15 @@
"bchange35": "Da li ovoj aplikaciji dajete dozvolu za slanje novčića?",
"bchange36": "Da li želite da objavite instant na QDN bez izračunavanja dokaza o radu?",
"bchange37": "Uđi u ceo ekran",
- "bchange38": "Izađi iz celog ekrana"
+ "bchange38": "Izađi iz celog ekrana",
+ "bchange39": "Uvek dozvoli da se liste automatski preuzimaju",
+ "bchange40": "Lista",
+ "bchange41": "Da li ovoj aplikaciji dajete dozvolu da pristupi ovoj listi?",
+ "bchange42": "Stavke",
+ "bchange43": "Da li dajete ovoj aplikaciji dozvolu za dodavanje na ovu listu?",
+ "bchange44": "Da li ovoj aplikaciji dajete dozvolu za brisanje sa ove liste?",
+ "bchange45": "Šifrovanje",
+ "bchange46": "Da li ovoj aplikaciji dajete dozvolu da sačuva sledeću datoteku"
},
"datapage": {
"dchange1": "Upravljanje podacima",
diff --git a/qortal-ui-core/language/ru.json b/qortal-ui-core/language/ru.json
index 860e7a58..831dc2f1 100644
--- a/qortal-ui-core/language/ru.json
+++ b/qortal-ui-core/language/ru.json
@@ -638,7 +638,15 @@
"bchange35": "Вы разрешаете этому приложению отправлять монеты?",
"bchange36": "Вы хотите опубликовать мгновенную публикацию в QDN без вычисления доказательства работы?",
"bchange37": "Войти в полноэкранный режим",
- "bchange38": "Выйти из полноэкранного режима"
+ "bchange38": "Выйти из полноэкранного режима",
+ "bchange39": "Всегда разрешать автоматическое получение списков",
+ "bchange40": "Список",
+ "bchange41": "Даете ли вы этому приложению разрешение на доступ к этому списку?",
+ "bchange42": "Предметы",
+ "bchange43": "Даете ли вы этому приложению разрешение на добавление в этот список?",
+ "bchange44": "Даете ли вы этому приложению разрешение на удаление из этого списка?",
+ "bchange45": "Шифровать",
+ "bchange46": "Даете ли вы этому приложению разрешение на сохранение следующего файла?"
},
"datapage": {
"dchange1": "Управление данными",
diff --git a/qortal-ui-core/language/us.json b/qortal-ui-core/language/us.json
index cf84a78e..16847273 100644
--- a/qortal-ui-core/language/us.json
+++ b/qortal-ui-core/language/us.json
@@ -136,7 +136,7 @@
"exp2": "Export Master Key",
"exp3": "Export",
"exp4": "Please choose a wallet to backup the private master key.",
- "core": "Start Core Setiings"
+ "core": "Start Core Settings"
},
"appinfo": {
"blockheight": "Block Height",
diff --git a/qortal-ui-core/language/zhc.json b/qortal-ui-core/language/zhc.json
index 1842a93b..f5cf97c0 100644
--- a/qortal-ui-core/language/zhc.json
+++ b/qortal-ui-core/language/zhc.json
@@ -638,7 +638,15 @@
"bchange35": "你允许这个应用程序发送硬币吗?",
"bchange36": "你想在不计算工作证明的情况下即时发布到 QDN 吗?",
"bchange37": "进入全屏",
- "bchange38": "退出全屏"
+ "bchange38": "退出全屏",
+ "bchange39": "始终允许自动检索列表",
+ "bchange40": "列表",
+ "bchange41": "您授予此应用程序访问此列表的权限吗?",
+ "bchange42": "物品",
+ "bchange43": "您授予此应用程序添加到此列表的权限吗?",
+ "bchange44": "您授予此应用程序从列表中删除的权限吗?",
+ "bchange45": "加密",
+ "bchange46": "您是否授予此应用程序保存以下文件的权限"
},
"datapage": {
"dchange1": "资料管理",
diff --git a/qortal-ui-core/language/zht.json b/qortal-ui-core/language/zht.json
index dd81efd0..5b830947 100644
--- a/qortal-ui-core/language/zht.json
+++ b/qortal-ui-core/language/zht.json
@@ -638,7 +638,15 @@
"bchange35": "你允許這個應用程序發送硬幣嗎?",
"bchange36": "你想在不計算工作證明的情況下即時發佈到 QDN 嗎?",
"bchange37": "進入全屏",
- "bchange38": "退出全屏"
+ "bchange38": "退出全屏",
+ "bchange39": "始終允許自動檢索列表",
+ "bchange40": "列表",
+ "bchange41": "您授予此應用程序訪問此列表的權限嗎?",
+ "bchange42": "物品",
+ "bchange43": "您授予此應用程序添加到此列表的權限嗎?",
+ "bchange44": "您授予此應用程序從列表中刪除的權限嗎?",
+ "bchange45": "加密",
+ "bchange46": "您是否授予此應用程序保存以下文件的權限"
},
"datapage": {
"dchange1": "資料管理",