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": "資料管理",