-
${messageObj.senderName ? messageObj.senderName : messageObj.sender}
+
+ ${nameMenu}
${levelFounder}
- ${nameMenu}
-
${avatarImg}
-
${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}
-
+
${avatarImg}
+
${this.emojiPicker.parse(escape(messageObj.decodedMessage))}
`
}
@@ -439,22 +432,29 @@ class ChatPage extends LitElement {
if (this.isReceipient === true) {
// direct chat
+
if (encodedMessageObj.isEncrypted === true && this._publicKey.hasPubKey === true) {
+
let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, this._publicKey.key, encodedMessageObj.reference)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
} else if (encodedMessageObj.isEncrypted === false) {
+
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
} else {
+
decodedMessageObj = { ...encodedMessageObj, decodedMessage: "Cannot Decrypt Message!" }
}
+
} else {
// group chat
+
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
}
+
return decodedMessageObj
}
@@ -1037,12 +1037,6 @@ class ChatPage extends LitElement {
};
this.chatEditor = new ChatEditor(editorConfig);
}
-
- getApiKey() {
- const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
- let apiKey = myNode.apiKey
- return apiKey
- }
}
window.customElements.define('chat-page', ChatPage)
diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
index 62984562..b48ea99b 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -18,7 +18,7 @@ class ChatScroller extends LitElement {
getOldMessage: { attribute: false },
emojiPicker: { attribute: false },
escapeHTML: { attribute: false },
- initialMessages: { type: Array },
+ initialMessages: { type: Array }, // First set of messages to load.. 15 messages max ( props )
messages: { type: Array },
hideMessages: { type: Array }
}
@@ -75,22 +75,11 @@ class ChatScroller extends LitElement {
margin-left: 50px;
}
- .message-data:hover .hide {
- color: #03a9f4;
- display: inline;
- }
-
.message-data-name {
+ color: var(--black);
cursor: pointer;
}
- .message-data-level {
- color: #03a9f4;
- font-size: 13px;
- padding-left: 8px;
- padding-bottom: 4px;
- }
-
.message-data-time {
color: #a8aab1;
font-size: 13px;
@@ -98,12 +87,11 @@ class ChatScroller extends LitElement {
padding-bottom: 4px;
}
- .message-data-react {
- margin-left: 50px;
- }
-
- .message-data-react-item {
- padding-left: 6px;
+ .message-data-level {
+ color: #03a9f4;
+ font-size: 13px;
+ padding-left: 8px;
+ padding-bottom: 4px;
}
.message {
@@ -149,7 +137,7 @@ class ChatScroller extends LitElement {
.my-message {
background: #d1d1d1;
- border: 2px solid #cecece;
+ border: 2px solid #eeeeee;
}
.my-message:after {
@@ -167,10 +155,6 @@ class ChatScroller extends LitElement {
left: 7%;
}
- .hide {
- display: none;
- }
-
.align-left {
text-align: left;
}
@@ -187,10 +171,6 @@ class ChatScroller extends LitElement {
float: right;
}
- .padright5 {
- padding-right: 5px;
- }
-
.clearfix:after {
visibility: hidden;
display: block;
@@ -203,21 +183,16 @@ class ChatScroller extends LitElement {
img {
border-radius: 25%;
}
-
- .iconsRight {
- color: #a8aab1;
- --mdc-icon-size: 18px;
- }
`
}
constructor() {
super()
this.messages = []
- this.hideMessages = []
this._upObserverhandler = this._upObserverhandler.bind(this)
this.isLoading = false
this.myAddress = window.parent.reduxStore.getState().app.selectedAddress.address
+ this.hideMessages = JSON.parse(localStorage.getItem("MessageBlockedAddresses") || "[]")
}
@@ -231,7 +206,6 @@ class ChatScroller extends LitElement {
}
firstUpdated() {
- this.getHideMessages()
this.viewElement = this.shadowRoot.getElementById('viewElement')
this.upObserverElement = this.shadowRoot.getElementById('upObserver')
this.downObserverElement = this.shadowRoot.getElementById('downObserver')
@@ -243,20 +217,15 @@ class ChatScroller extends LitElement {
this.viewElement.scrollTop = this.viewElement.scrollHeight + 50
}
- async getHideMessages() {
- const hideMessages = await parentEpml.request('apiCall', {
- url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`
- })
- this.hideMessages = hideMessages
- }
-
chatMessageTemplate(messageObj) {
- const hidmes = this.hideMessages
+ const hidemsg = this.hideMessages
let avatarImg = ''
let nameMenu = ''
let levelFounder = ''
- let hideit = hidmes.includes(messageObj.sender)
+ let hideit = hidemsg.includes(messageObj.sender)
+
+ levelFounder = `
`
if (messageObj.senderName) {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
@@ -266,13 +235,11 @@ class ChatScroller extends LitElement {
}
if (messageObj.sender === this.myAddress) {
- nameMenu = `
more_horiz`
+ nameMenu = `
${messageObj.senderName ? messageObj.senderName : messageObj.sender}`
} else {
- nameMenu = `
`
+ nameMenu = `
`
}
- levelFounder = `
`
-
if ( hideit === true ) {
return `
@@ -281,14 +248,12 @@ class ChatScroller extends LitElement {
return `
- ${messageObj.senderName ? messageObj.senderName : messageObj.sender}
+ ${nameMenu}
${levelFounder}
- ${nameMenu}
- ${avatarImg}
+ ${avatarImg}
${this.emojiPicker.parse(this.escapeHTML(messageObj.decodedMessage))}
-
`
}
@@ -296,27 +261,29 @@ class ChatScroller extends LitElement {
renderChatMessages(messages) {
messages.forEach(message => {
- const li = document.createElement('li')
- li.innerHTML = this.chatMessageTemplate(message)
+ const li = document.createElement('li');
+ li.innerHTML = this.chatMessageTemplate(message);
li.id = message.signature;
- this.downObserverElement.before(li)
- })
+ this.downObserverElement.before(li);
+ });
}
renderOldMessages(listOfOldMessages) {
- let { oldMessages, scrollElement } = listOfOldMessages
- let _oldMessages = oldMessages.reverse()
+ let { oldMessages, scrollElement } = listOfOldMessages;
+
+ let _oldMessages = oldMessages.reverse();
_oldMessages.forEach(oldMessage => {
- const li = document.createElement('li')
- li.innerHTML = this.chatMessageTemplate(oldMessage)
- li.id = oldMessage.signature
- this.upObserverElement.after(li)
- scrollElement.scrollIntoView({ behavior: 'auto', block: 'center' })
- })
+ const li = document.createElement('li');
+ li.innerHTML = this.chatMessageTemplate(oldMessage);
+ li.id = oldMessage.signature;
+ this.upObserverElement.after(li);
+ scrollElement.scrollIntoView({ behavior: 'auto', block: 'center' });
+ });
}
_getOldMessage(_scrollElement) {
let listOfOldMessages = this.getOldMessage(_scrollElement)
+
if (listOfOldMessages) {
this.renderOldMessages(listOfOldMessages)
}
@@ -325,6 +292,7 @@ class ChatScroller extends LitElement {
_upObserverhandler(entries) {
if (entries[0].isIntersecting) {
let _scrollElement = entries[0].target.nextElementSibling
+
this._getOldMessage(_scrollElement)
}
}
@@ -334,16 +302,11 @@ class ChatScroller extends LitElement {
root: this.viewElement,
rootMargin: '0px',
threshold: 1
- }
+ };
+
const observer = new IntersectionObserver(this._upObserverhandler, options)
observer.observe(this.upObserverElement)
}
-
- getApiKey() {
- const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
- let apiKey = myNode.apiKey
- return apiKey
- }
}
window.customElements.define('chat-scroller', ChatScroller)
diff --git a/qortal-ui-plugins/plugins/core/components/NameMenu.js b/qortal-ui-plugins/plugins/core/components/NameMenu.js
index 4f2bb65b..79ae1826 100644
--- a/qortal-ui-plugins/plugins/core/components/NameMenu.js
+++ b/qortal-ui-plugins/plugins/core/components/NameMenu.js
@@ -22,7 +22,6 @@ class NameMenu extends LitElement {
return {
toblockaddress: { type: String, attribute: true },
nametodialog: { type: String, attribute: true },
- messagesignatur: { type: String, attribute: true },
chatBlockedAdresses: { type: Array },
selectedAddress: { type: Object },
config: { type: Object },
@@ -118,9 +117,8 @@ class NameMenu extends LitElement {
.dropdown-content {
display: none;
position: absolute;
- bottom: -75px;
- right: 25px;
- text-align: center;
+ bottom: 25px;
+ left: 10px;
background-color: var(--white);
min-width: 200px;
overflow: auto;
@@ -174,15 +172,6 @@ class NameMenu extends LitElement {
resize: none;
background: #eee;
}
-
- .iconsRight {
- color: #a8aab1;
- --mdc-icon-size: 18px;
- }
-
- .padright5 {
- padding-right: 5px;
- }
`
}
@@ -200,8 +189,8 @@ class NameMenu extends LitElement {
render() {
return html`
-
-
${translate("blockpage.bcchange7")}
+
+
${translate("blockpage.bcchange7")}
${this.nametodialog}
@@ -361,6 +350,12 @@ class NameMenu extends LitElement {
}
}
+ relMessages() {
+ setTimeout(() => {
+ window.location.href = window.location.href.split( '#' )[0]
+ }, 500)
+ }
+
async getChatBlockedAdresses() {
const chatBlockedAdresses = await parentEpml.request('apiCall', {
url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`
@@ -397,6 +392,7 @@ class NameMenu extends LitElement {
labelText: `${err1string}`,
dismiss: true
})
+ this.relMessages()
} else {
this.closeMenu()
this.shadowRoot.querySelector('#blockNameDialog').close()
diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
index 3fb82fab..a6dc0244 100644
--- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
+++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
@@ -420,6 +420,7 @@ class Chat extends LitElement {
this.changeLanguage()
this.changeTheme()
this.getChatBlockedList()
+ this.getLocalBlockedList()
setInterval(() => {
this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]")
@@ -549,6 +550,31 @@ class Chat extends LitElement {
return html`${translate("chatpage.cchange9")}`
}
+ relMessages() {
+ setTimeout(() => {
+ window.location.href = window.location.href.split( '#' )[0]
+ }, 500)
+ }
+
+ getLocalBlockedList() {
+ const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
+ const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
+ const blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}`
+
+ localStorage.removeItem("MessageBlockedAddresses")
+
+ var hidelist = []
+
+ fetch(blockedAddressesUrl).then(response => {
+ return response.json()
+ }).then(data => {
+ data.map(item => {
+ hidelist.push(item)
+ })
+ localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist))
+ })
+ }
+
getChatBlockedList() {
const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
@@ -610,6 +636,7 @@ class Chat extends LitElement {
labelText: `${err2string}`,
dismiss: true
})
+ this.relMessages()
}
else {
let err3string = get("chatpage.cchange17")