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) { - - @@ -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` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("appinfo.synchronizing")}... ${this.nodeStatus.syncPercent !== undefined ? this.nodeStatus.syncPercent + '%' : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` + } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === false) { + return html` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("walletprofile.wp4")} ${translate("walletprofile.wp2")}

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` + } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === true) { + return html` +
+ +
+

${translate("walletprofile.wp3")}

+

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

+

${translate("walletprofile.wp4")} ( ${translate("walletprofile.wp1")} )

+

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+ +
+
+ ` + } + } + + 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