From e9a0da9fda9a54452cb32f4e23133d50769d1917 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 10 Apr 2025 00:45:29 +0300 Subject: [PATCH 1/4] add support for base64 field --- plugins/plugins/core/qdn/browser/browser.src.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index e13f6878..0ba4ef70 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -1439,7 +1439,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(dataSentBack) break } - if (!data.file && !data.data64) { + if (!data.file && !data.data64 && !data.base64) { let myMsg1 = get("modals.mpchange22") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -1452,7 +1452,7 @@ class WebBrowser extends LitElement { const service = data.service const name = data.name let identifier = data.identifier - let data64 = data.data64 + let data64 = data.data64 || data.base64 const filename = data.filename const title = data.title const description = data.description @@ -1665,7 +1665,7 @@ class WebBrowser extends LitElement { }) continue } - if (!resource.file && !resource.data64) { + if (!resource.file && !resource.data64 && !resource.base64) { const errorMsg = 'No data or file was submitted' failedPublishesIdentifiers.push({ reason: errorMsg, @@ -1676,7 +1676,7 @@ class WebBrowser extends LitElement { const service = resource.service const name = resource.name let identifier = resource.identifier - let data64 = resource.data64 + let data64 = resource.data64 || resource.base64 const filename = resource.filename const title = resource.title const description = resource.description From 3c3e1d6e387c5ec7ade6ad7699916c28f942d07b Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 12 Apr 2025 07:14:15 +0300 Subject: [PATCH 2/4] allow no name for qr- use default in ui --- .../plugins/core/qdn/browser/browser.src.js | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 0ba4ef70..7d99f3dc 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -184,6 +184,7 @@ class WebBrowser extends LitElement { this.config.user.nodeSettings.pingInterval ) } + const render = () => { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] @@ -1417,7 +1418,7 @@ class WebBrowser extends LitElement { case actions.PUBLISH_QDN_RESOURCE: { // optional fields: encrypt:boolean recipientPublicKey:string - const requiredFields = ['service', 'name'] + const requiredFields = ['service'] const missingFields = [] let dataSentBack = {} requiredFields.forEach((field) => { @@ -1450,7 +1451,11 @@ class WebBrowser extends LitElement { } // Use "default" if user hasn't specified an identifer const service = data.service - const name = data.name + const name = data.name || this.getMyName() + if(!name){ + dataSentBack['error'] = `Missing name` + break + } let identifier = data.identifier let data64 = data.data64 || data.base64 const filename = data.filename @@ -1649,7 +1654,7 @@ class WebBrowser extends LitElement { this.loader.show() for (const resource of resources) { try { - const requiredFields = ['service', 'name'] + const requiredFields = ['service'] const missingFields = [] requiredFields.forEach((field) => { if (!resource[field]) { @@ -1674,7 +1679,15 @@ class WebBrowser extends LitElement { continue } const service = resource.service - const name = resource.name + const name = data.name || this.getMyName() + if(!name){ + const errorMsg = `Missing name` + failedPublishesIdentifiers.push({ + reason: errorMsg, + identifier: resource.identifier + }) + continue + } let identifier = resource.identifier let data64 = resource.data64 || resource.base64 const filename = resource.filename @@ -4407,6 +4420,11 @@ class WebBrowser extends LitElement { }, 60000) } + getMyName(){ + const names = window.parent.reduxStore.getState().app.accountInfo.names + if(names.length === 0) return null + return names[0].name + } renderFullScreen() { if (window.innerHeight === screen.height) { return html` From d51216516d7860e3bab630639c217df885fb56da Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 12 Apr 2025 07:40:41 +0300 Subject: [PATCH 3/4] fix display name --- plugins/plugins/core/qdn/browser/browser.src.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 7d99f3dc..53ea6d07 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -1634,10 +1634,16 @@ class WebBrowser extends LitElement { } const getArbitraryFee = await this.getArbitraryFee() feeAmount = getArbitraryFee.fee + const reformatResources = resources.map((resource)=> { + return { + ...resource, + name: resource.name || this.getMyName() + } + }) const res2 = await showModalAndWait( actions.PUBLISH_MULTIPLE_QDN_RESOURCES, { - resources, + resources: reformatResources, encrypt: data.encrypt, feeAmount: getArbitraryFee.feeToShow } @@ -1652,7 +1658,7 @@ class WebBrowser extends LitElement { } let failedPublishesIdentifiers = [] this.loader.show() - for (const resource of resources) { + for (const resource of reformatResources) { try { const requiredFields = ['service'] const missingFields = [] @@ -1679,7 +1685,7 @@ class WebBrowser extends LitElement { continue } const service = resource.service - const name = data.name || this.getMyName() + const name = resource.name if(!name){ const errorMsg = `Missing name` failedPublishesIdentifiers.push({ From 1287d0feed68ed4cb77b1d09296746ec019d2323 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 14 Apr 2025 22:36:38 +0300 Subject: [PATCH 4/4] remove unused component --- .../core/components/ChatGroupInvites.js | 299 ------------------ 1 file changed, 299 deletions(-) delete mode 100644 plugins/plugins/core/components/ChatGroupInvites.js diff --git a/plugins/plugins/core/components/ChatGroupInvites.js b/plugins/plugins/core/components/ChatGroupInvites.js deleted file mode 100644 index 6294e198..00000000 --- a/plugins/plugins/core/components/ChatGroupInvites.js +++ /dev/null @@ -1,299 +0,0 @@ -import { html, LitElement } from 'lit' -import { Epml } from '../../../epml' -import { chatGroupStyles } from './plugins-css' -import './WrapperModal' -import '@material/mwc-button' -import '@material/mwc-dialog' -import '@material/mwc-icon' -import '@polymer/paper-spinner/paper-spinner-lite.js' - -// Multi language support -import { translate } from '../../../../core/translate' - -const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) - -class ChatGroupInvites extends LitElement { - static get properties() { - return { - isLoading: { type: Boolean }, - isOpenLeaveModal: { type: Boolean }, - leaveGroupObj: { type: Object }, - error: { type: Boolean }, - message: { type: String }, - chatHeads: { type: Array }, - groupAdmin: { attribute: false }, - groupMembers: { attribute: false }, - selectedHead: { type: Object } - } - } - - static get styles() { - return [chatGroupStyles] - } - - constructor() { - super() - this.isLoading = false - this.isOpenLeaveModal = false - this.leaveGroupObj = {} - this.leaveFee = 0.001 - this.error = false - this.message = '' - this.chatHeads = [] - this.groupAdmin = [] - this.groupMembers = [] - } - - render() { - return html` - {this.isOpenLeaveModal = true}} class="top-bar-icon" style="margin: 0px 20px" icon="vaadin:users" slot="icon"> - { - if (this.isLoading) return - this.isOpenLeaveModal = false - }} - style=${this.isOpenLeaveModal ? "display: block" : "display: none"} - > -
-

${translate("grouppage.gchange35")}

-
-
- - -
- - - ${translate("grouppage.gchange36")}   - - - ${this.message} -
- -
- ` - } - - firstUpdated() { - // ... - } - - timeIsoString(timestamp) { - let myTimestamp = timestamp === undefined ? 1587560082346 : timestamp - let time = new Date(myTimestamp) - return time.toISOString() - } - - resetDefaultSettings() { - this.error = false - this.message = '' - this.isLoading = false - } - - renderErr9Text() { - return html`${translate("grouppage.gchange49")}` - } - - async confirmRelationship(reference) { - let interval = null - let stop = false - const getAnswer = async () => { - - - if (!stop) { - stop = true - try { - let myRef = await parentEpml.request("apiCall", { - type: "api", - url: `/transactions/reference/${reference}` - }) - - if (myRef && myRef.type) { - clearInterval(interval) - this.isLoading = false - this.isOpenLeaveModal = false - } - } catch (error) { } - stop = false - } - } - interval = setInterval(getAnswer, 5000) - } - - async getLastRef() { - return await parentEpml.request("apiCall", { - type: "api", - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - } - - getTxnRequestResponse(txnResponse, reference) { - if (txnResponse === true) { - this.message = this.renderErr9Text() - this.error = false - this.confirmRelationship(reference) - } else { - this.error = true - this.message = '' - throw new Error(txnResponse) - } - } - - async convertBytesForSigning(transactionBytesBase58) { - return await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/transactions/convert`, - body: `${transactionBytesBase58}` - }) - } - - async signTx(body) { - return await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/transactions/sign`, - body: body, - headers: { - 'Content-Type': 'application/json' - } - }) - } - - async process(body) { - return await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/transactions/process`, - body: body - }) - } - - async _addAdmin(groupId) { - // Reset Default Settings... - this.resetDefaultSettings() - - const leaveFeeInput = this.leaveFee - - this.isLoading = true - - // Get Last Ref - const validateReceiver = async () => { - let lastRef = await this.getLastRef() - let myTransaction = await makeTransactionRequest(lastRef) - this.getTxnRequestResponse(myTransaction, lastRef) - } - - // Make Transaction Request - const makeTransactionRequest = async (lastRef) => { - const body = { - timestamp: Date.now(), - reference: lastRef, - fee: leaveFeeInput, - ownerPublicKey: window.parent.Base58.encode(window.parent.reduxStore.getState().app.selectedAddress.keyPair.publicKey), - groupId: groupId, - member: this.selectedHead.address - } - - const bodyToString = JSON.stringify(body) - - let transactionBytes = await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/groups/addadmin`, - body: bodyToString, - headers: { - "Content-Type": "application/json" - } - }) - - const readforsign = await this.convertBytesForSigning(transactionBytes) - - const body2 = { - privateKey: window.parent.Base58.encode(window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey), - transactionBytes: readforsign - } - - const bodyToString2 = JSON.stringify(body2) - - let signTransaction = await this.signTx(bodyToString2) - - return await this.process(signTransaction) - } - - await validateReceiver() - } - - async _removeAdmin(groupId) { - // Reset Default Settings... - this.resetDefaultSettings() - - const leaveFeeInput = this.leaveFee - - this.isLoading = true - - // Get Last Ref - const validateReceiver = async () => { - let lastRef = await this.getLastRef() - let myTransaction = await makeTransactionRequest(lastRef) - this.getTxnRequestResponse(myTransaction, lastRef) - } - - // Make Transaction Request - const makeTransactionRequest = async (lastRef) => { - const body = { - timestamp: Date.now(), - reference: lastRef, - fee: leaveFeeInput, - ownerPublicKey: window.parent.Base58.encode(window.parent.reduxStore.getState().app.selectedAddress.keyPair.publicKey), - groupId: groupId, - admin: this.selectedHead.address - } - - const bodyToString = JSON.stringify(body) - - let transactionBytes = await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/groups/removeadmin`, - body: bodyToString, - headers: { - "Content-Type": "application/json" - } - }) - - const readforsign = await this.convertBytesForSigning( - transactionBytes - ) - - const body2 = { - privateKey: window.parent.Base58.encode(window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey), - transactionBytes: readforsign - } - - const bodyToString2 = JSON.stringify(body2) - - let signTransaction = await this.signTx(bodyToString2) - - return await this.process(signTransaction) - } - - await validateReceiver() - } - - // Standard functions - getApiKey() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - return myNode.apiKey - } - - isEmptyArray(arr) { - if (!arr) { return true } - return arr.length === 0 - } - - round(number) { - return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - } -} - -window.customElements.define('chat-group-invites', ChatGroupInvites)