From c12f7859b547fe2857125d5fcd030739f1a9d551 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Sun, 5 Nov 2023 13:54:59 +0100
Subject: [PATCH] Update Avatar, Core sync status and remove balance ticker
---
core/font/switch-theme.css | 2 +
core/src/components/app-view.js | 84 +-------
.../friends-view/core-sync-status.js | 186 +++++++++++++-----
.../components/settings-view/account-view.js | 60 ++++--
core/src/styles/switch-theme.css | 4 +
img/noavatar.png | Bin 5533 -> 0 bytes
img/noavatar_dark.png | Bin 0 -> 5554 bytes
img/noavatar_light.png | Bin 0 -> 5592 bytes
img/synced.png | Bin 0 -> 1155 bytes
img/synced_minting.png | Bin 0 -> 1168 bytes
img/syncing.png | Bin 0 -> 1207 bytes
11 files changed, 183 insertions(+), 153 deletions(-)
delete mode 100644 img/noavatar.png
create mode 100644 img/noavatar_dark.png
create mode 100644 img/noavatar_light.png
create mode 100644 img/synced.png
create mode 100644 img/synced_minting.png
create mode 100644 img/syncing.png
diff --git a/core/font/switch-theme.css b/core/font/switch-theme.css
index 7a0f6a9e..b7a342ba 100644
--- a/core/font/switch-theme.css
+++ b/core/font/switch-theme.css
@@ -65,6 +65,7 @@ html {
--app-icon: #ffffff;
--app-hr: rgba(0, 0, 0, .3);
--code-block-text-color: #008fd5;
+ --noavatar: url("/img/noavatar_light.png");
}
html[theme="dark"] {
@@ -134,4 +135,5 @@ html[theme="dark"] {
--app-icon: #03a9f4;
--app-hr: rgba(255, 255, 255, .3);
--code-block-text-color: #008fd5;
+ --noavatar: url("/img/noavatar_dark.png");
}
\ No newline at end of file
diff --git a/core/src/components/app-view.js b/core/src/components/app-view.js
index ff27a441..253472d2 100644
--- a/core/src/components/app-view.js
+++ b/core/src/components/app-view.js
@@ -57,7 +57,6 @@ class AppView extends connect(store)(LitElement) {
nodeType: { type: String, reflect: true },
theme: { type: String, reflect: true },
addressInfo: { type: Object },
- getAllBalancesLoading: { type: Boolean },
botQortWallet: { type: String },
botBtcWallet: { type: String },
botLtcWallet: { type: String },
@@ -447,7 +446,6 @@ class AppView extends connect(store)(LitElement) {
this.urls = []
this.nodeType = ''
this.addressInfo = {}
- this.getAllBalancesLoading = false
this.botQortWallet = ''
this.botBtcWallet = ''
this.botLtcWallet = ''
@@ -553,24 +551,6 @@ class AppView extends connect(store)(LitElement) {
-
-
-
- ${this.getAllBalancesLoading ? html`
` : ''}
- ${this.balanceTicker}
-
@@ -598,6 +578,8 @@ class AppView extends connect(store)(LitElement) {
+
+
${this.renderLockButton()}
@@ -752,8 +734,6 @@ class AppView extends connect(store)(LitElement) {
this.botRvnWallet = store.getState().app.selectedAddress.rvnWallet.address
this.botArrrWallet = store.getState().app.selectedAddress.arrrWallet.address
- await this.getAllBalances()
-
await this.botBtcTradebook()
await this.botLtcTradebook()
await this.botDogeTradebook()
@@ -770,8 +750,6 @@ class AppView extends connect(store)(LitElement) {
this.tradeBotArrrBook = JSON.parse(localStorage.getItem(this.botArrrWallet) || "[]")
})
- this.renderBalances()
-
const getOpenTradesBTC = async () => {
let timerBTC
@@ -1802,15 +1780,6 @@ class AppView extends connect(store)(LitElement) {
}, 60000)
}
- shBalanceTicker() {
- const targetDiv = this.shadowRoot.getElementById("theTicker")
- if (targetDiv.style.display !== "none") {
- targetDiv.style.display = "none"
- } else {
- targetDiv.style.display = "inline"
- }
- }
-
clearTheCache() {
if (!isElectron()) {
} else {
@@ -2093,55 +2062,6 @@ class AppView extends connect(store)(LitElement) {
}
}
- async getAllBalances() {
- this.getAllBalancesLoading = true
- await this.updateQortWalletBalance()
- await this.updateBtcWalletBalance()
- await this.updateLtcWalletBalance()
- await this.updateDogeWalletBalance()
- await this.updateDgbWalletBalance()
- await this.updateRvnWalletBalance()
- await this.fetchArrrWalletAddress()
- await this.updateArrrWalletBalance()
- this.getAllBalancesLoading = false
- }
-
- async renderBalances() {
- const tickerTime = ms => new Promise(res => setTimeout(res, ms))
- clearTimeout(this.updateBalancesTimeout)
- this.balanceTicker = html`
-
- `
- await tickerTime(1000)
- this.balanceTicker = html`
-
-
- QORT ${translate("general.balance")}: ${this.qortWalletBalance}
- BTC ${translate("general.balance")}: ${this.btcWalletBalance}
- LTC ${translate("general.balance")}: ${this.ltcWalletBalance}
- DOGE ${translate("general.balance")}: ${this.dogeWalletBalance}
- DGB ${translate("general.balance")}: ${this.dgbWalletBalance}
- RVN ${translate("general.balance")}: ${this.rvnWalletBalance}
- ARRR ${translate("general.balance")}: ${this.arrrWalletBalance}
-
-
- `
- this.updateBalancesTimeout = setTimeout(() => this.renderBalances(), 45000)
- }
-
- async fetchArrrWalletAddress() {
- let res = await parentEpml.request('apiCall', {
- url: `/crosschain/arrr/walletaddress?apiKey=${this.getApiKey()}`,
- method: 'POST',
- body: `${store.getState().app.selectedAddress.arrrWallet.seed58}`,
- })
- if (res != null && res.error != 1201) {
- this.arrrWalletAddress = res
- }
- }
-
async updateQortWalletBalance() {
let qortAddress = store.getState().app.selectedAddress.address
diff --git a/core/src/components/friends-view/core-sync-status.js b/core/src/components/friends-view/core-sync-status.js
index 8ec00f68..9abc3e05 100644
--- a/core/src/components/friends-view/core-sync-status.js
+++ b/core/src/components/friends-view/core-sync-status.js
@@ -1,78 +1,160 @@
-import { LitElement, html, css } from 'lit';
-import '@material/mwc-icon';
-import { store } from '../../store';
-import { connect } from 'pwa-helpers';
-import '@vaadin/tooltip';
-import { get } from 'lit-translate';
+import { LitElement, html, css } from 'lit'
+import { store } from '../../store'
+import { connect } from 'pwa-helpers'
+import { translate } from 'lit-translate'
+
class CoreSyncStatus extends connect(store)(LitElement) {
static get properties() {
return {
- nodeStatus: {type: Object}
- };
+ nodeStatus: {type: Object},
+ coreInfos: { type: Array }
+ }
}
-
constructor() {
- super();
- this.nodeStatus = {
- isMintingPossible:false,
-isSynchronizing:true,
-syncPercent:undefined,
-numberOfConnections:undefined,
-height:undefined,
- }
+ super()
+ this.nodeStatus = {}
+ this.coreInfos = []
}
+
static styles = css`
- .header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 16px;
- border-bottom: 1px solid #e0e0e0;
+ .lineHeight {
+ line-height: 33%;
}
- .content {
- padding: 16px;
+ .tooltip {
+ display: inline-block;
+ position: relative;
+ text-align: left;
}
- .close {
+
+ .tooltip .bottom {
+ min-width: 200px;
+ max-width: 250px;
+ top: 35px;
+ left: 50%;
+ transform: translate(-50%, 0);
+ padding: 10px 10px;
+ color: var(--black);
+ background-color: var(--white);
+ font-weight: normal;
+ font-size: 13px;
+ border-radius: 8px;
+ position: absolute;
+ z-index: 99999999;
+ box-sizing: border-box;
+ box-shadow: 0 1px 8px rgba(0,0,0,0.5);
+ border: 1px solid var(--black);
visibility: hidden;
- position: fixed;
- z-index: -100;
- right: -1000px;
+ opacity: 0;
+ transition: opacity 0.8s;
}
- .parent-side-panel {
- transform: translateX(100%); /* start from outside the right edge */
- transition: transform 0.3s ease-in-out;
+ .tooltip:hover .bottom {
+ visibility: visible;
+ opacity: 1;
}
- .parent-side-panel.open {
- transform: translateX(0); /* slide in to its original position */
+ .tooltip .bottom i {
+ position: absolute;
+ bottom: 100%;
+ left: 50%;
+ margin-left: -12px;
+ width: 24px;
+ height: 12px;
+ overflow: hidden;
}
- `;
-stateChanged(state) {
- this.nodeStatus = state.app.nodeStatus
-}
+ .tooltip .bottom i::after {
+ content: '';
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ left: 50%;
+ transform: translate(-50%,50%) rotate(45deg);
+ background-color: var(--white);
+ border: 1px solid var(--black);
+ box-shadow: 0 1px 8px rgba(0,0,0,0.5);
+ }
+
+ `
render() {
return html`
- lightbulb
-
-
-
-
- `;
+ ${this.renderSyncStatusIcon()}
+ `
}
+ firstUpdated() {
+ this.getCoreInfos()
+
+ setInterval(() => {
+ this.getCoreInfos()
+ }, 60000)
+ }
+
+ async getCoreInfos() {
+ const corInfo = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
+ const coreInfoUrl = corInfo.protocol + '://' + corInfo.domain + ':' + corInfo.port
+ const infoUrl = `${coreInfoUrl}/admin/info`
+ await fetch(infoUrl).then(response => {
+ return response.json()
+ }).then(data => {
+ this.coreInfos = data
+ }).catch(err => {
+ })
+ }
+
+ renderSyncStatusIcon() {
+ if (this.nodeStatus.isSynchronizing === true) {
+ return html`
+
+ `
+ } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === false) {
+ return html`
+
+ `
+ } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === true) {
+ return html`
+
+ `
+ }
+ }
+
+ stateChanged(state) {
+ this.nodeStatus = state.app.nodeStatus
+ }
}
-customElements.define('core-sync-status', CoreSyncStatus);
+customElements.define('core-sync-status', CoreSyncStatus)
diff --git a/core/src/components/settings-view/account-view.js b/core/src/components/settings-view/account-view.js
index 43aa9e1d..2e2e2b72 100644
--- a/core/src/components/settings-view/account-view.js
+++ b/core/src/components/settings-view/account-view.js
@@ -1,13 +1,14 @@
-import { LitElement, html, css } from 'lit';
-import { connect } from 'pwa-helpers';
-import { store } from '../../store.js';
-import { translate, translateUnsafeHTML } from 'lit-translate'
+import { LitElement, html, css } from 'lit'
+import { connect } from 'pwa-helpers'
+import { store } from '../../store.js'
+import { translate } from 'lit-translate'
class AccountView extends connect(store)(LitElement) {
static get properties() {
return {
accountInfo: { type: Object },
- theme: { type: String, reflect: true }
+ theme: { type: String, reflect: true },
+ switchAvatar: { type: String }
}
}
@@ -66,6 +67,7 @@ class AccountView extends connect(store)(LitElement) {
super()
this.accountInfo = { names: [], addressInfo: {} }
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
+ this.switchAvatar = ''
}
render() {
@@ -88,27 +90,47 @@ class AccountView extends connect(store)(LitElement) {
`
}
- stateChanged(state) {
- this.accountInfo = state.app.accountInfo
+ firstUpdated() {
+ this.getSwitchAvatar()
+ setInterval(() => {
+ this.getSwitchAvatar()
+ }, 2000)
}
getAvatar() {
- let numberBlocks = (this.accountInfo.addressInfo.blocksMinted + this.accountInfo.addressInfo.blocksMintedAdjustment);
- if (Number.isNaN(numberBlocks) || numberBlocks == "" || numberBlocks === null) {
- 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`
`
+ 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()}`
+ const numberBlocks = (this.accountInfo.addressInfo.blocksMinted + this.accountInfo.addressInfo.blocksMintedAdjustment)
+
+ if (this.switchAvatar === 'light') {
+ if (Number.isNaN(numberBlocks) || numberBlocks == "" || numberBlocks === null) {
+ return html`
`
+ } else {
+ return html`
`
+ }
+ } else if (this.switchAvatar === 'dark') {
+ if (Number.isNaN(numberBlocks) || numberBlocks == "" || numberBlocks === null) {
+ return html`
`
+ } else {
+ return html`
`
+ }
}
}
+ getSwitchAvatar() {
+ this.switchAvatar = localStorage.getItem('qortalTheme')
+ }
+
getApiKey() {
- const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node];
- let apiKey = apiNode.apiKey;
- return apiKey;
+ const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
+ let apiKey = apiNode.apiKey
+ return apiKey
+ }
+
+ stateChanged(state) {
+ this.accountInfo = state.app.accountInfo
}
}
-window.customElements.define('account-view', AccountView)
+window.customElements.define('account-view', AccountView)
\ No newline at end of file
diff --git a/core/src/styles/switch-theme.css b/core/src/styles/switch-theme.css
index 4d308e76..b7a342ba 100644
--- a/core/src/styles/switch-theme.css
+++ b/core/src/styles/switch-theme.css
@@ -64,6 +64,8 @@ html {
--app-background-2: #09c6f9;
--app-icon: #ffffff;
--app-hr: rgba(0, 0, 0, .3);
+ --code-block-text-color: #008fd5;
+ --noavatar: url("/img/noavatar_light.png");
}
html[theme="dark"] {
@@ -132,4 +134,6 @@ html[theme="dark"] {
--app-background-2: #0d324d;
--app-icon: #03a9f4;
--app-hr: rgba(255, 255, 255, .3);
+ --code-block-text-color: #008fd5;
+ --noavatar: url("/img/noavatar_dark.png");
}
\ No newline at end of file
diff --git a/img/noavatar.png b/img/noavatar.png
deleted file mode 100644
index 1bde92301c21e955293fda4d63b03f1a146d96b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5533
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
O4^y-y23c?J8T()Cm*08-
diff --git a/img/noavatar_dark.png b/img/noavatar_dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..c48e426cd9631911c325223b78077338bab37f77
GIT binary patch
literal 5554
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
literal 0
HcmV?d00001
diff --git a/img/synced.png b/img/synced.png
new file mode 100644
index 0000000000000000000000000000000000000000..f944bad97047ff299964b194401bc61e9a105ed9
GIT binary patch
literal 1155
zcmWlXdobOl}#87@C<-
zn{{VgW?H58tR$k#W=SQ+C6{&NG&V8}GifxQ|BY2eSV`?R(gGqG$r!TyQiIg%d>E>|w-hMXSaLWvY{^|&NK+FkG@I8%(WIpp*rvJ4rWU{)Z$8WE*Pxr?v@aPAX8bTo8u
zcDTZJA1oZf8^8%J@z9?|eCK37qAT%JIYG(J8)6NFO8g=wL^>QsU^0$n!ZidUHBwqY
z^&uGq3xr6V1TsRaVmpMLDC^fHrE^gXrKIa!DEuHzGarjTOEK@C!
zXiq;<$~82_J-sENkR1A9<#n$@s@8mJQMpjfdh|2YU$-jkFUvn`-cny@U{s;lTp2pD
zyapf@_<4IV&XUpwGOwPZf-@zVA8n2qYi?|6zNO3Wd)tn)=Cx+4>+Q%AWrHa}h3^$X>T@(`%$OwGhOSOJ=?Cm5OlY9MLu{KEPN>%*su^+I5q7ARY&U9o`*X-m9jP4PONN+;4s|T
zWrF45=UEJ9r@tk8t~=NG!WYNx8ad7mwO_GpS?SDtS$Kd*h$M4hyEay4cwsp<41Tjuz``wg4YDZ64P%O@xqViSF16D$3Dj|X+j06(7q
K?;HD==l=(8gzk?3
literal 0
HcmV?d00001
diff --git a/img/synced_minting.png b/img/synced_minting.png
new file mode 100644
index 0000000000000000000000000000000000000000..567e784ba8520504f89d08bc108e9a13ba21e6a3
GIT binary patch
literal 1168
zcmW-fc~BEp5XQdOI%Mdo8%9Y9nKqU%txj*Iok>_^!L<-Fo<+B2NVg^3-~`*3><;R3Lw$}!Rr#5aOj
zfx-#oj^Z;5?6b$Mmk2FElnAHuAb5w|zW_M`(vbZpEZmf@oy-D%4oHHN6X+L_+70eB
zZafJ&cN%AZj!a-GJ3-kH*U0Ec$Zdoa;>TiK
zZbecDqRJ61MtqY}w!*K%sY0`v3yiJ*$oCqR@CR!m@NJe7%k?49A{45m;z*Efe-$S4
zbI!rY8X0{!Ux~9^m{VUq6UzpL;J!gh*UrPP;LqdK&5FD*T$3P-kK;^TJ9j07`1>$*
zfm1;qiT&TtPEa#;wtqU7&-ruPmV
z3HLedP;qH07;)0tC>*B4@_0ymEROiXiU!hQGkV~VC<4~rW5Xh5Vyqt3|3O=+Oj>5j72Z{+;=lG8|vCFZ=8gSGYf014PoWlEN8&dc0Qf3;Tf#6F|$dP
z-X%G*-n4$yKrN@2)Va1`Q8w48zpF|t78?^6BDoso0HMH>>g*Rw;Pj^CggV1*FnF{v
z{FAPE*;iq~VT$8uPt5PpwOZ`D=z!&k53PL5=EvL0`(dMyN`h?
zp*-t99=PuEM)lzCuK8Q!J&!jB&4yV2-6>h7*xy+#d;yZ<3&F^5`}IZjpMNxWZgMo4
zLlPbk7+HG9jI}oqbdDM61@ts*YUXFvB=%J{5=y)CDeB`psgYG3xnJZpN$%{Rq>_1D
zw*66Wjq_K#{JT}IlxXJJG>la+Jak-HZ5$o1>TTPd{CPiBr{A*Lo&RdPrjY2Zdytiq
vZbD@h33RW^bYE>{yy(j?xx7Vf)XOHlHEqviHs
literal 0
HcmV?d00001
diff --git a/img/syncing.png b/img/syncing.png
new file mode 100644
index 0000000000000000000000000000000000000000..82d39bbb40cfdfb51c2eb15802e129a3d9ca79ed
GIT binary patch
literal 1207
zcmV;o1W5adP)eLaF?E5ZbvyuLOf4rXNWp9MT#~)D^-9(M`o-qFnUg4yIEhuMMgkC
zU|eH>xm;saWradlb)-vCbv;RjOj|o*cCJ}sfH_1wOKFfxR$pq0uU%+YZH<^hOxjvn
z#YIK0FE0QmIshy}03$TQMMiHjJ#{-nOfNidFgSHTN@6)k03tL1COHKtJK0)V04_wV
zF*3hKM*u59qcJlZD?LIkJ+?$fy;N7JFfjltKoToHW;;f!Lq@X1UpYTi3NS_hBsKsfHO*OD05VJ1T3W10PM$nM4>CxiI6bRW
zTR}QXA1^-$CN~r-Jjq&J&{$d3T3Y}iF^^AKfJ|4VQ(B=^UR*v(8#hh5MMr#5U~586
z5;RE-Cpd~!VPHm8o=sN6Szf(YTb4;w#6?B6R$HzwFQ80RyIEhYFfp`PUzbKuZ(Sg{<0
zZq{@Np?T_@5Oc4AgCT3~f&oEhMeqL5olvUqn#
z@9d$Y8_OL4A!Wl2__ey0QXUYJ@#HRSZ0^J^fY7lAdDKx(aa{!?uO1!6*b5+a68D$>
zD)|XvVO0&Wq*zqg4^WzzoeWv||9=w_1W?_dQZt09Wtn;s0w9!@^)DUcFaRkrjvo}Q
ztmMIoHRpnW&%=$}w~v>U`0UGDoN?rFe{khB=jhp&7w6f*xYQ4z%NK5P-f8^-LhrBL
z1>C}CV4_G!0dAj)Y&TWj{VC{O~Xh^@FZo&Qo4JsgSK5;K5q002ovPDHLkV1j}H@I(Lr
literal 0
HcmV?d00001
|