diff --git a/core/language/de.json b/core/language/de.json index dacd55c6..1885f833 100644 --- a/core/language/de.json +++ b/core/language/de.json @@ -1417,6 +1417,7 @@ "mpchange83": "ABGELEHNT", "mpchange84": "FEHLER", "mpchange85": "ERFOLGREICH", - "mpchange86": "Immer automatisches Abrufen des Wallet-Guthabens zulassen" + "mpchange86": "Immer automatisches Abrufen des Wallet-Guthabens zulassen", + "mpchange87": "Bitte geben Sie die Gruppen-ID ein" } } diff --git a/core/language/es.json b/core/language/es.json index af48f747..a7924a9b 100644 --- a/core/language/es.json +++ b/core/language/es.json @@ -1417,6 +1417,7 @@ "mpchange83": "RECHAZADO", "mpchange84": "ERROR", "mpchange85": "ÉXITO", - "mpchange86": "Permitir siempre obtener el saldo de la billetera automáticamente" + "mpchange86": "Permitir siempre obtener el saldo de la billetera automáticamente", + "mpchange87": "Por favor, introduzca el ID del grupo" } } diff --git a/core/language/et.json b/core/language/et.json index 86b12aa6..73beeeeb 100644 --- a/core/language/et.json +++ b/core/language/et.json @@ -1417,6 +1417,7 @@ "mpchange83": "DECLINED", "mpchange84": "FAILURE", "mpchange85": "EDU", - "mpchange86": "Luba alati rahakoti saldo automaatne hankimine" + "mpchange86": "Luba alati rahakoti saldo automaatne hankimine", + "mpchange87": "Palun sisestage grupi ID" } } diff --git a/core/language/fi.json b/core/language/fi.json index b112ce0b..2602e3d0 100644 --- a/core/language/fi.json +++ b/core/language/fi.json @@ -1417,6 +1417,7 @@ "mpchange83": "hylätty", "mpchange84": "FAILURE", "mpchange85": "SUCCESS", - "mpchange86": "Salli aina saada lompakon saldo automaattisesti" + "mpchange86": "Salli aina saada lompakon saldo automaattisesti", + "mpchange87": "Anna ryhmän tunnus" } } diff --git a/core/language/fr.json b/core/language/fr.json index 230082c3..d469ac46 100644 --- a/core/language/fr.json +++ b/core/language/fr.json @@ -1417,6 +1417,7 @@ "mpchange83": "REFUSÉ", "mpchange84": "ÉCHEC", "mpchange85": "SUCCÈS", - "mpchange86": "Toujours autoriser l'obtention automatique du solde du portefeuille" + "mpchange86": "Toujours autoriser l'obtention automatique du solde du portefeuille", + "mpchange87": "Veuillez saisir l'ID du groupe" } } diff --git a/core/language/hindi.json b/core/language/hindi.json index b0a5d56a..260f227c 100644 --- a/core/language/hindi.json +++ b/core/language/hindi.json @@ -1417,6 +1417,7 @@ "mpchange83": "अस्वीकृत", "mpchange84": "विफल", "mpchange85": "सफल", - "mpchange86": "हमेशा वॉलेट बैलेंस को स्वचालित रूप से प्राप्त करने की अनुमति दें" + "mpchange86": "हमेशा वॉलेट बैलेंस को स्वचालित रूप से प्राप्त करने की अनुमति दें", + "mpchange87": "कृपया ग्रुप आईडी दर्ज करें" } } diff --git a/core/language/hr.json b/core/language/hr.json index a250954b..4255c9e5 100644 --- a/core/language/hr.json +++ b/core/language/hr.json @@ -1417,6 +1417,7 @@ "mpchange83": "ODBIJENO", "mpchange84": "GREŠKA", "mpchange85": "USPJEH", - "mpchange86": "Uvijek dopusti automatsko dobivanje stanja novčanika" + "mpchange86": "Uvijek dopusti automatsko dobivanje stanja novčanika", + "mpchange87": "Molimo unesite ID grupe" } } diff --git a/core/language/hu.json b/core/language/hu.json index e160715b..638e73de 100644 --- a/core/language/hu.json +++ b/core/language/hu.json @@ -1417,6 +1417,7 @@ "mpchange83": "Elutasítva", "mpchange84": "FAILURE", "mpchange85": "SIKER", - "mpchange86": "Mindig engedélyezze a pénztárcaegyenleg automatikus lekérését" + "mpchange86": "Mindig engedélyezze a pénztárcaegyenleg automatikus lekérését", + "mpchange87": "Kérjük, adja meg a csoport azonosítóját" } } diff --git a/core/language/it.json b/core/language/it.json index 1151d6db..ad818b9c 100644 --- a/core/language/it.json +++ b/core/language/it.json @@ -1417,6 +1417,7 @@ "mpchange83": "RIFIUTATO", "mpchange84": "FALLITO", "mpchange85": "RIUSCITO", - "mpchange86": "Consenti sempre di ottenere automaticamente il saldo del portafoglio" + "mpchange86": "Consenti sempre di ottenere automaticamente il saldo del portafoglio", + "mpchange87": "Inserisci l'ID del gruppo" } } diff --git a/core/language/jp.json b/core/language/jp.json index c78bea3f..11194383 100644 --- a/core/language/jp.json +++ b/core/language/jp.json @@ -1417,6 +1417,7 @@ "mpchange83": "拒否されました", "mpchange84": "失敗", "mpchange85": "成功", - "mpchange86": "ウォレット残高の自動取得を常に許可する" + "mpchange86": "ウォレット残高の自動取得を常に許可する", + "mpchange87": "グループ ID を入力してください" } } diff --git a/core/language/ko.json b/core/language/ko.json index 6d2569db..109b8a8c 100644 --- a/core/language/ko.json +++ b/core/language/ko.json @@ -1417,6 +1417,7 @@ "mpchange83": "거부됨", "mpchange84": "실패", "mpchange85": "성공", - "mpchange86": "항상 지갑 잔액을 자동으로 가져오도록 허용" + "mpchange86": "항상 지갑 잔액을 자동으로 가져오도록 허용", + "mpchange87": "그룹 ID를 입력하세요" } } diff --git a/core/language/nl.json b/core/language/nl.json index 5606d115..092016cd 100644 --- a/core/language/nl.json +++ b/core/language/nl.json @@ -1417,6 +1417,7 @@ "mpchange83": "GEWEIGERD", "mpchange84": "MISLUKT", "mpchange85": "SUCCES", - "mpchange86": "Altijd toestaan ​​om automatisch saldo in portemonnee op te halen" + "mpchange86": "Altijd toestaan ​​om automatisch saldo in portemonnee op te halen", + "mpchange87": "Voer de groeps-ID in" } } diff --git a/core/language/no.json b/core/language/no.json index 75004ffc..6108dff5 100644 --- a/core/language/no.json +++ b/core/language/no.json @@ -1417,6 +1417,7 @@ "mpchange83": "AVSLAGT", "mpchange84": "FEIL", "mpchange85": "SUKSESS", - "mpchange86": "Tillat alltid få lommeboksaldo automatisk" + "mpchange86": "Tillat alltid få lommeboksaldo automatisk", + "mpchange87": "Vennligst skriv inn gruppe-ID" } } diff --git a/core/language/pl.json b/core/language/pl.json index 9c2a84ba..6a2fad25 100644 --- a/core/language/pl.json +++ b/core/language/pl.json @@ -1417,6 +1417,7 @@ "mpchange83": "ODRZUCONE", "mpchange84": "NIEPOWODZENIE", "mpchange85": "POWODZENIE", - "mpchange86": "Zawsze zezwalaj na automatyczne pobieranie salda portfela" + "mpchange86": "Zawsze zezwalaj na automatyczne pobieranie salda portfela", + "mpchange87": "Wprowadź identyfikator grupy" } } diff --git a/core/language/pt.json b/core/language/pt.json index 4b7c9657..255b1193 100644 --- a/core/language/pt.json +++ b/core/language/pt.json @@ -1417,6 +1417,7 @@ "mpchange83": "RECLINADO", "mpchange84": "FALHA", "mpchange85": "SUCESSO", - "mpchange86": "Permitir sempre obter saldo da carteira automaticamente" + "mpchange86": "Permitir sempre obter saldo da carteira automaticamente", + "mpchange87": "Por favor introduza o ID do grupo" } } diff --git a/core/language/ro.json b/core/language/ro.json index 5d2d41f6..2df1152f 100644 --- a/core/language/ro.json +++ b/core/language/ro.json @@ -1417,6 +1417,7 @@ "mpchange83": "RESFUS", "mpchange84": "Eșec", "mpchange85": "SUCCES", - "mpchange86": "Permiteți întotdeauna obținerea automată a soldului portofelului" + "mpchange86": "Permiteți întotdeauna obținerea automată a soldului portofelului", + "mpchange87": "Vă rugăm să introduceți ID-ul grupului" } } diff --git a/core/language/rs.json b/core/language/rs.json index d1bf2ba7..bc58e4d9 100644 --- a/core/language/rs.json +++ b/core/language/rs.json @@ -1417,6 +1417,7 @@ "mpchange83": "ODBIJENO", "mpchange84": "GREŠKA", "mpchange85": "USPEH", - "mpchange86": "Uvek dozvoli automatsko dobijanje stanja novčanika" + "mpchange86": "Uvek dozvoli automatsko dobijanje stanja novčanika", + "mpchange87": "Unesite ID grupe" } } diff --git a/core/language/ru.json b/core/language/ru.json index f95411ae..00c7e278 100644 --- a/core/language/ru.json +++ b/core/language/ru.json @@ -1417,6 +1417,7 @@ "mpchange83": "ОТКЛОНЕНО", "mpchange84": "НЕУДАЧА", "mpchange85": "УСПЕШНО", - "mpchange86": "Всегда разрешать автоматически получать баланс кошелька" + "mpchange86": "Всегда разрешать автоматически получать баланс кошелька", + "mpchange87": "Пожалуйста, введите идентификатор группы" } } diff --git a/core/language/us.json b/core/language/us.json index 8f619c65..be7d6b2e 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -1417,6 +1417,7 @@ "mpchange83": "DECLINED", "mpchange84": "FAILURE", "mpchange85": "SUCCESS", - "mpchange86": "Always allow get wallet balance automatically" + "mpchange86": "Always allow get wallet balance automatically", + "mpchange87": "Please Enter The Group ID" } } diff --git a/core/language/zhc.json b/core/language/zhc.json index 1bacf2e5..455e4d03 100644 --- a/core/language/zhc.json +++ b/core/language/zhc.json @@ -1417,6 +1417,7 @@ "mpchange83": "拒绝", "mpchange84": "失败", "mpchange85": "成功", - "mpchange86": "始终允许自动获取钱包余额" + "mpchange86": "始终允许自动获取钱包余额", + "mpchange87": "请输入群组ID" } } diff --git a/core/language/zht.json b/core/language/zht.json index 65adf665..96c3b989 100644 --- a/core/language/zht.json +++ b/core/language/zht.json @@ -1417,6 +1417,7 @@ "mpchange83": "拒絕", "mpchange84": "失敗", "mpchange85": "成功", - "mpchange86": "隨時允許自動取得錢包餘額" + "mpchange86": "隨時允許自動取得錢包餘額", + "mpchange87": "請輸入群組 ID" } } diff --git a/crypto/api/deps/Base64Message.js b/crypto/api/deps/Base64Message.js index f74c282f..bd6adef0 100644 --- a/crypto/api/deps/Base64Message.js +++ b/crypto/api/deps/Base64Message.js @@ -14,6 +14,15 @@ import { const Base64Message = {} Base64Message.decode = function (string, keys, ref) { + let repliedToStr = '' + let hubSpecialId = '' + let hubMessageStr = '' + let newMessageObject = '' + let messageUseEmbed = {} + let isHubReaction = false + let editStr = false + let embedFileStr = '"images":[""]' + const binaryString = atob(string) const binaryLength = binaryString.length const bytes = new Uint8Array(binaryLength) @@ -34,88 +43,54 @@ Base64Message.decode = function (string, keys, ref) { return decodedString } } else { - let repliedToStr = '' - let addedFileStr = '' - let messageStr = '' - let hubString = '' - let messageRep = '' - let messageUseEmbed = {} - const res = decryptSingle(string, keys, false) if (res === 'noKey' || res === 'decryptionFailed') { - return '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"This message could not be decrypted"}]}]}' + addedFileStr + ',"repliedTo":"","version":3,"isFromHub":true}' + return '{"specialId":"","message":"

This message could not be decrypted

","repliedTo":"","isEdited":false,"isFromHub":true,"isReaction":false,"version": 3}' } const decryptToUnit8Array = base64ToUint8Array(res) const responseData = uint8ArrayToObject(decryptToUnit8Array) if (responseData.type === "notification") { - const messageStrRaw = responseData.data.message - messageStr = messageStrRaw.trim() + hubMessageStr = responseData.data.message } if (ref !== "noref") { if (responseData.type === "reaction") { + isHubReaction = true repliedToStr = ref - messageStr = responseData.content + hubMessageStr = responseData.content } } - if (responseData.hasOwnProperty('message') && typeof responseData['message'] === 'string' && responseData['message'].length) { - if (responseData.message.includes('qortal://use-embed/')) { - const useEmbed1 = extensionToPointer(responseData.message) - const useEmbed2 = /(.*?)<\/newpointer>/g.exec(useEmbed1) - const useEmbed3 = encodedToChar(useEmbed2[1]) - - messageUseEmbed = parseQortalLink(useEmbed3) - addedFileStr = embedToString(messageUseEmbed) - - const useEmbed4 = responseData.message.split(useEmbed2[1]).join('') - - if (useEmbed4 === "

") { - messageRep = useEmbed4.split('

').join('

Qortal-Hub embed link

') - } else { - messageRep = useEmbed4 - } - } else { - messageRep = responseData.message - addedFileStr = ',"images":[""]' - } - - const messageRep1 = messageRep.split('"').join('') - const messageRep2 = messageRep1.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep3 = messageRep2.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep4 = messageRep3.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep5 = messageRep4.replace('

', '') - const messageRep6 = messageRep5.replace('

', '') - const messageRep7 = messageRep6.replace('

', '') - const messageRep8 = messageRep7.replace('

', '') - const messageRep9 = messageRep8.replace('

', '') - const messageRep10 = messageRep9.trim() - const messageRep11 = messageRep10.split('



').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep12 = messageRep11.split('


').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep13 = messageRep12.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep14 = messageRep13.split('
').join('"},{"type":"hardBreak"},{"type":"text","text":"') - messageStr = messageRep14 + if (responseData.type === "edit") { + editStr = true } if (responseData.repliedTo) { repliedToStr = responseData.repliedTo } - if (responseData.type === "edit") { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isEdited":true,"isFromHub":true}' - } else if (responseData.type === "reaction") { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isReaction":true,"isFromHub":true}' - } else { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isFromHub":true}' + if (responseData.specialId) { + hubSpecialId = responseData.specialId } - const preparedString = hubString.split('').join('\\"') - const finalString = preparedString.replace(/<\/?[^>]+(>|$)/g, '') + if (responseData.message.includes('qortal://use-embed/')) { + const useEmbed1 = extensionToPointer(responseData.message) + const useEmbed2 = /(.*?)<\/newpointer>/g.exec(useEmbed1) + const useEmbed3 = encodedToChar(useEmbed2[1]) - return finalString + messageUseEmbed = parseQortalLink(useEmbed3) + embedFileStr = embedToString(messageUseEmbed) + hubMessageStr = responseData.message.split(useEmbed2[1]).join('') + } else { + hubMessageStr = responseData.message + } + + newMessageObject = '{"specialId":"' + hubSpecialId + '","message":"' + hubMessageStr + '",' + embedFileStr + ',"repliedTo":"' + repliedToStr + '","isEdited":' + editStr + ',"isFromHub":true,"isReaction":' + isHubReaction + ',"version": 3}' + + return newMessageObject } } diff --git a/plugins/plugins/core/components/ChatScroller.js b/plugins/plugins/core/components/ChatScroller.js index 4d10a4a7..7438e0e3 100644 --- a/plugins/plugins/core/components/ChatScroller.js +++ b/plugins/plugins/core/components/ChatScroller.js @@ -1081,17 +1081,22 @@ class MessageTemplate extends LitElement { let version = 0 let isForwarded = false let isEdited = false - let isFromHub = false + let isEncrypted = false try { const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage) - if (+parsedMessageObj.version > 1 && parsedMessageObj.messageText) { + if (parsedMessageObj.version > 1 && parsedMessageObj.messageText) { messageVersion2 = generateHTML(parsedMessageObj.messageText, [StarterKit, Underline, Highlight, Mention]) messageVersion2WithLink = processText(messageVersion2) } - message = parsedMessageObj.messageText + if (parsedMessageObj.version > 1 && parsedMessageObj.message) { + messageVersion2 = parsedMessageObj.message + messageVersion2WithLink = processText(messageVersion2) + } + + message = parsedMessageObj.messageText ? parsedMessageObj.messageText : parsedMessageObj.message repliedToData = this.messageObj.repliedToData isImageDeleted = parsedMessageObj.isImageDeleted isGifDeleted = parsedMessageObj.isGifDeleted @@ -1101,7 +1106,7 @@ class MessageTemplate extends LitElement { version = parsedMessageObj.version isForwarded = parsedMessageObj.type === 'forward' isEdited = parsedMessageObj.isEdited && true - isFromHub = parsedMessageObj.isFromHub && true + isEncrypted = parsedMessageObj.isFromHub || parsedMessageObj.message ? true : false if (parsedMessageObj.images && Array.isArray(parsedMessageObj.images) && parsedMessageObj.images.length > 0) { image = parsedMessageObj.images[0] @@ -1133,8 +1138,8 @@ class MessageTemplate extends LitElement { let hideit = hidemsg.includes(this.messageObj.sender) let forwarded = '' let edited = '' - let fromHubOk = '' - let fromHubNo = '' + let encrypted = '' + let decrypted = '' levelFounder = html`` @@ -1250,9 +1255,9 @@ class MessageTemplate extends LitElement { ` - fromHubOk = html`   key   ` + encrypted = html`   key   ` - fromHubNo = html`   key_off   ` + decrypted = html`   key_off   ` if (repliedToData) { try { @@ -1672,7 +1677,7 @@ class MessageTemplate extends LitElement { ` : this.isAgo ? html`
- ${isFromHub ? html`${fromHubOk}` : html`${fromHubNo}`} + ${isEncrypted ? html`${encrypted}` : html`${decrypted}`}
@@ -1683,7 +1688,7 @@ class MessageTemplate extends LitElement { ` : this.isIso ? html`
- ${isFromHub ? html`${fromHubOk}` : html`${fromHubNo}`} + ${isEncrypted ? html`${encrypted}` : html`${decrypted}`}
@@ -1694,7 +1699,7 @@ class MessageTemplate extends LitElement { ` : this.isBoth ? html`
- ${isFromHub ? html`${fromHubOk}` : html`${fromHubNo}`} + ${isEncrypted ? html`${encrypted}` : html`${decrypted}`}
diff --git a/plugins/plugins/core/components/plugins-css.js b/plugins/plugins/core/components/plugins-css.js index c616dba5..cc782eb5 100644 --- a/plugins/plugins/core/components/plugins-css.js +++ b/plugins/plugins/core/components/plugins-css.js @@ -2014,8 +2014,13 @@ export const chatStyles = css` } #messageContent code { - background-color: rgba(#616161, 0.1); - color: #616161; + background: #0D0D0D; + color: #FFF; + font-family: 'JetBrainsMono', monospace; + padding: 0.75rem 1rem; + border-radius: 0.5rem; + white-space: pre-wrap; + margin-top: 10px; } #messageContent pre { @@ -2034,12 +2039,10 @@ export const chatStyles = css` font-size: 0.8rem; } - #messageContent img { width: 1.7em; height: 1.5em; margin: 0px; - } #messageContent blockquote { @@ -2078,8 +2081,13 @@ export const chatStyles = css` } .replied-message code { - background-color: rgba(#616161, 0.1); - color: #616161; + background: #0D0D0D; + color: #FFF; + font-family: 'JetBrainsMono', monospace; + padding: 0.75rem 1rem; + border-radius: 0.5rem; + white-space: pre-wrap; + margin: 0px; } .replied-message pre { diff --git a/plugins/plugins/core/components/qdn-action-constants.js b/plugins/plugins/core/components/qdn-action-constants.js index 5f311f53..498388a8 100644 --- a/plugins/plugins/core/components/qdn-action-constants.js +++ b/plugins/plugins/core/components/qdn-action-constants.js @@ -159,15 +159,15 @@ export const embedToString = (embed) => { embedService = embed.service embedName = embed.name embedIdentifier = embed.identifier - embedString = ',"images":[{"service":"' + embedService + '","name":"' + embedName + '","identifier":"' + embedIdentifier + '"}],"isImageDeleted":false' + embedString = '"images":[{"service":"' + embedService + '","name":"' + embedName + '","identifier":"' + embedIdentifier + '"}],"isImageDeleted":false' } else if (embed.type === "ATTACHMENT") { embedService = embed.service embedName = embed.name embedIdentifier = embed.identifier embedAttachmentName = embed.fileName - embedString = ',"attachments":[{"service":"' + embedService + '","name":"' + embedName + '","identifier":"' + embedIdentifier + '","attachmentName":"' + embedAttachmentName + '","attachmentSize":0}],"isAttachmentDeleted":false' + embedString = '"attachments":[{"service":"' + embedService + '","name":"' + embedName + '","identifier":"' + embedIdentifier + '","attachmentName":"' + embedAttachmentName + '","attachmentSize":0}],"isAttachmentDeleted":false' } else { - embedString = ',"images":[""]' + embedString = '"images":[""]' } return embedString diff --git a/plugins/plugins/core/components/webworkerDecodeMessages.js b/plugins/plugins/core/components/webworkerDecodeMessages.js index 7c37cad7..14717e7a 100644 --- a/plugins/plugins/core/components/webworkerDecodeMessages.js +++ b/plugins/plugins/core/components/webworkerDecodeMessages.js @@ -2767,6 +2767,15 @@ self.addEventListener('message', async (e) => { }) const decode = (string, keys, ref) => { + let repliedToStr = '' + let hubSpecialId = '' + let hubMessageStr = '' + let newMessageObject = '' + let messageUseEmbed = {} + let isHubReaction = false + let editStr = false + let embedFileStr = '"images":[""]' + const binaryString = atob(string) const binaryLength = binaryString.length const bytes = new Uint8Array(binaryLength) @@ -2787,88 +2796,54 @@ const decode = (string, keys, ref) => { return decodedString } } else { - let repliedToStr = '' - let addedFileStr = '' - let messageStr = '' - let hubString = '' - let messageRep = '' - let messageUseEmbed = {} - const res = decryptSingle(string, keys, false) if (res === 'noKey' || res === 'decryptionFailed') { - return '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"This message could not be decrypted"}]}]}' + addedFileStr + ',"repliedTo":"","version":3,"isFromHub":true}' + return '{"specialId":"","message":"

This message could not be decrypted

","repliedTo":"","isEdited":false,"isFromHub":true,"isReaction":false,"version": 3}' } const decryptToUnit8Array = base64ToUint8Array(res) const responseData = uint8ArrayToObject(decryptToUnit8Array) if (responseData.type === "notification") { - const messageStrRaw = responseData.data.message - messageStr = messageStrRaw.trim() + hubMessageStr = responseData.data.message } if (ref !== "noref") { if (responseData.type === "reaction") { + isHubReaction = true repliedToStr = ref - messageStr = responseData.content + hubMessageStr = responseData.content } } - if (responseData.hasOwnProperty('message') && typeof responseData['message'] === 'string' && responseData['message'].length) { - if (responseData.message.includes('qortal://use-embed/')) { - const useEmbed1 = extensionToPointer(responseData.message) - const useEmbed2 = /(.*?)<\/newpointer>/g.exec(useEmbed1) - const useEmbed3 = encodedToChar(useEmbed2[1]) - - messageUseEmbed = parseQortalLink(useEmbed3) - addedFileStr = embedToString(messageUseEmbed) - - const useEmbed4 = responseData.message.split(useEmbed2[1]).join('') - - if (useEmbed4 === "

") { - messageRep = useEmbed4.split('

').join('

Qortal-Hub embed link

') - } else { - messageRep = useEmbed4 - } - } else { - messageRep = responseData.message - addedFileStr = ',"images":[""]' - } - - const messageRep1 = messageRep.split('"').join('') - const messageRep2 = messageRep1.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep3 = messageRep2.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep4 = messageRep3.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep5 = messageRep4.replace('

', '') - const messageRep6 = messageRep5.replace('

', '') - const messageRep7 = messageRep6.replace('

', '') - const messageRep8 = messageRep7.replace('

', '') - const messageRep9 = messageRep8.replace('

', '') - const messageRep10 = messageRep9.trim() - const messageRep11 = messageRep10.split('



').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep12 = messageRep11.split('


').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep13 = messageRep12.split('

').join('"},{"type":"hardBreak"},{"type":"hardBreak"},{"type":"text","text":"') - const messageRep14 = messageRep13.split('
').join('"},{"type":"hardBreak"},{"type":"text","text":"') - messageStr = messageRep14 + if (responseData.type === "edit") { + editStr = true } if (responseData.repliedTo) { repliedToStr = responseData.repliedTo } - if (responseData.type === "edit") { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isEdited":true,"isFromHub":true}' - } else if (responseData.type === "reaction") { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isReaction":true,"isFromHub":true}' - } else { - hubString = '{"messageText":{"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"' + messageStr + '"}]}]}' + addedFileStr + ',"repliedTo":"' + repliedToStr + '","version":3,"isFromHub":true}' + if (responseData.specialId) { + hubSpecialId = responseData.specialId } - const preparedString = hubString.split('').join('\\"') - const finalString = preparedString.replace(/<\/?[^>]+(>|$)/g, '') + if (responseData.message.includes('qortal://use-embed/')) { + const useEmbed1 = extensionToPointer(responseData.message) + const useEmbed2 = /(.*?)<\/newpointer>/g.exec(useEmbed1) + const useEmbed3 = encodedToChar(useEmbed2[1]) - return finalString + messageUseEmbed = parseQortalLink(useEmbed3) + embedFileStr = embedToString(messageUseEmbed) + hubMessageStr = responseData.message.split(useEmbed2[1]).join('') + } else { + hubMessageStr = responseData.message + } + + newMessageObject = '{"specialId":"' + hubSpecialId + '","message":"' + hubMessageStr + '",' + embedFileStr + ',"repliedTo":"' + repliedToStr + '","isEdited":' + editStr + ',"isFromHub":true,"isReaction":' + isHubReaction + ',"version": 3}' + + return newMessageObject } } diff --git a/plugins/plugins/core/q-chat/q-chat.src.js b/plugins/plugins/core/q-chat/q-chat.src.js index 37dc4b2c..bb99d469 100644 --- a/plugins/plugins/core/q-chat/q-chat.src.js +++ b/plugins/plugins/core/q-chat/q-chat.src.js @@ -317,7 +317,7 @@ class Chat extends LitElement {
-

Please Enter The Group ID

+

${translate("modals.mpchange87")}



@@ -326,7 +326,7 @@ class Chat extends LitElement { style="width: 100%;" required id="groupIdInput" - label="Emter Group ID" + label="${translate("managegroup.mg8")}" type="number" auto-validate="false" value="" diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index c49dbbb5..d3172925 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -17,7 +17,7 @@ import { } from '../../../utils/classes' import {appendBuffer} from '../../../utils/utilities' import {QORT_DECIMALS} from '../../../../../crypto/api/constants' -import {listOfAllQortalRequests} from '../../components/qdn-action-constants' +import {mimeToExtensionMap, listOfAllQortalRequests} from '../../components/qdn-action-constants' import { createSymmetricKeyAndNonce, decryptGroupEncryptionWithSharingKey, @@ -2252,6 +2252,108 @@ class WebBrowser extends LitElement { } break + case actions.SAVE_FILE: { + try { + const requiredFields = ['filename', 'blob'] + const missingFields = [] + let dataSentBack = {} + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field) + } + }) + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const tryAgain = get("walletpage.wchange44") + await showErrorAndWait( + "MISSING_FIELDS", + { + id1: missingFieldsString, + id2: tryAgain + } + ) + dataSentBack['error'] = `Missing fields: ${missingFieldsString}` + response = JSON.stringify(dataSentBack) + break + } + const filename = data.filename + const blob = data.blob + const res = await showModalAndWait( + actions.SAVE_FILE, + { + filename + } + ) + if (res.action === 'reject') { + let myMsg1 = get("transactions.declined") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("DECLINED_REQUEST", { id1: myMsg1, id2: myMsg2 }) + response = '{"error": "User declined request"}' + break + } + const mimeType = blob.type || data.mimeType + let backupExention = filename.split('.').pop() + if (backupExention) { + backupExention = '.' + backupExention + } + const fileExtension = mimeToExtensionMap[mimeType] || backupExention + let fileHandleOptions = {} + if (!mimeType) { + const obj = {} + obj['error'] = 'A mimeType could not be derived' + response = JSON.stringify(obj) + break + } + if (!fileExtension) { + const obj = {} + obj['error'] = 'A file extension could not be derived' + response = JSON.stringify(obj) + break + } + if (fileExtension && mimeType) { + fileHandleOptions = { + accept: { + [mimeType]: [fileExtension] + } + } + } + try { + const fileHandle = await self.showSaveFilePicker({ + suggestedName: filename, + types: [ + { + description: mimeType, + ...fileHandleOptions + } + ] + }) + 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) { + if (error.name === 'AbortError') { + const obj = {} + obj['error'] = 'User declined the download' + response = JSON.stringify(obj) + break + } + FileSaver.saveAs(blob, filename) + } + response = JSON.stringify(true) + } catch (error) { + let myMsg1 = get("managegroup.mg58") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) + const obj = {} + obj['error'] = error.message || 'Failed to initiate download' + response = JSON.stringify(obj) + } + } + break + case actions.DEPLOY_AT: { const requiredFields = ['name', 'description', 'tags', 'creationBytes', 'amount', 'assetId', 'type'] const missingFields = []