diff --git a/html/src/app.js b/html/src/app.js index 7f95337b..2063ba27 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -4130,11 +4130,11 @@ speechSynthesis.getVoices(); } this.lastLocationReset(); this.clearNowPlaying(); - this.updateVRConfigVars(); + this.updateVRLastLocation(); } if (isGameNoVR !== this.isGameNoVR) { this.isGameNoVR = isGameNoVR; - this.updateVRConfigVars(); + this.updateVRLastLocation(); } if (isSteamVRRunning !== this.isSteamVRRunning) { this.isSteamVRRunning = isSteamVRRunning; @@ -6044,10 +6044,11 @@ speechSynthesis.getVoices(); var ref = this.friends.get(id); if (ref) { ref.memo = String(memo || ''); - ref.$nickName = ''; if (memo) { var array = memo.split('\n'); ref.$nickName = array[0]; + } else { + ref.$nickName = ''; } } }; @@ -7545,6 +7546,10 @@ speechSynthesis.getVoices(); ) { return; } + if (entry.type === 'VideoPlay') { + // event time can be before last gameLog entry + this.updateSharedFeed(true); + } this.gameLogTable.data.push(entry); this.sweepGameLog(); this.updateSharedFeed(false); @@ -7713,7 +7718,7 @@ speechSynthesis.getVoices(); gameLog.userDisplayName ); if (typeof ref !== 'undefined') { - time = new Date().getTime() - ref.joinTime; + time = Date.now() - ref.joinTime; this.lastLocation.playerList.delete( gameLog.userDisplayName ); @@ -7748,7 +7753,8 @@ speechSynthesis.getVoices(); this.addGameLogVideo(gameLog, location, userId, pushToTable); return; case 'api-request': - if (!this.isGameRunning) { + var bias = Date.parse(gameLog.dt) + 60 * 1000; + if (!this.isGameRunning || bias < Date.now()) { return; } var userId = ''; @@ -9834,7 +9840,10 @@ speechSynthesis.getVoices(); ); var downloadProgressStateChange = function () { - this.updateVRConfigVars(); + AppApi.ExecuteVrFeedFunction( + 'updateDownloadProgress', + `${$app.downloadProgress}` + ); }; $app.watch.downloadProgress = downloadProgressStateChange; @@ -9865,9 +9874,6 @@ speechSynthesis.getVoices(); notificationTimeout: this.notificationTimeout, notificationTheme, backgroundEnabled: this.vrBackgroundEnabled, - isGameRunning: this.isGameRunning, - isGameNoVR: this.isGameNoVR, - downloadProgress: this.downloadProgress, progressPie }; var json = JSON.stringify(VRConfigVars); @@ -9876,7 +9882,6 @@ speechSynthesis.getVoices(); }; $app.methods.updateVRLastLocation = function () { - this.updateVRConfigVars(); var lastLocation = { date: this.lastLocation.date, location: this.lastLocation.location, @@ -10655,10 +10660,11 @@ speechSynthesis.getVoices(); var ref = this.friends.get(userId); if (ref) { ref.memo = String(memo || ''); - ref.$nickName = ''; if (memo) { var array = memo.split('\n'); ref.$nickName = array[0]; + } else { + ref.$nickName = ''; } } }); @@ -12521,7 +12527,7 @@ speechSynthesis.getVoices(); $app.methods.saveSetWorldTagsDialog = function () { var D = this.setWorldTagsDialog; - var oldTags = D.tags.split(',');; + var oldTags = D.tags.split(','); var tags = []; oldTags.forEach((tag) => { if (tag) { @@ -15223,7 +15229,7 @@ speechSynthesis.getVoices(); return; } if ( - this.downloadCurrent.type !== 'Auto' && + this.downloadCurrent.type !== 'Auto' || !this.cacheAutoDownloadHistory.has(assetUrl) ) { this.cacheAutoDownloadHistory.add(assetUrl); diff --git a/html/src/index.pug b/html/src/index.pug index e0b85e59..bc0f93a8 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -79,8 +79,8 @@ html el-select(v-model="feedTable.filter" @change="feedTableLookup" multiple clearable collapse-tags style="flex:1" placeholder="Filter") el-option(v-once v-for="type in ['GPS', 'Online', 'Offline', 'Status', 'Avatar']" :key="type" :label="type" :value="type") el-input(v-model="feedTable.search" placeholder="Search" @keyup.native.13="feedTableLookup" @change="feedTableLookup" clearable style="flex:none;width:150px;margin:0 10px") - el-tooltip(placement="bottom" content="Clear feed" :disabled="hideTooltips") - el-button(type="default" @click="clearFeed()" icon="el-icon-delete" circle style="flex:none") + //- el-tooltip(placement="bottom" content="Clear feed" :disabled="hideTooltips") + //- el-button(type="default" @click="clearFeed()" icon="el-icon-delete" circle style="flex:none") el-table-column(type="expand" width="20") template(v-once #default="scope") div(style="position:relative;font-size:14px") diff --git a/html/src/vr.js b/html/src/vr.js index 0135cbc7..3fc14434 100644 --- a/html/src/vr.js +++ b/html/src/vr.js @@ -170,6 +170,17 @@ import configRepository from './repository/config.js'; } }); + var removeFromArray = function (array, item) { + var {length} = array; + for (var i = 0; i < length; ++i) { + if (array[i] === item) { + array.splice(i, 1); + return true; + } + } + return false; + }; + var $app = { data: { // 1 = 대시보드랑 손목에 보이는거 @@ -178,6 +189,7 @@ import configRepository from './repository/config.js'; currentTime: new Date().toJSON(), cpuUsage: 0, config: {}, + downloadProgress: 0, nowPlaying: { url: '', name: '', @@ -289,6 +301,10 @@ import configRepository from './repository/config.js'; this.config = JSON.parse(json); }; + $app.methods.updateDownloadProgress = function (progress) { + this.downloadProgress = parseInt(progress, 10); + }; + $app.methods.nowPlayingUpdate = function (json) { this.nowPlaying = JSON.parse(json); if (this.appType === '2') { diff --git a/html/src/vr.pug b/html/src/vr.pug index 5568e17d..87dc5d1d 100644 --- a/html/src/vr.pug +++ b/html/src/vr.pug @@ -12,373 +12,405 @@ html link(rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans+JP|Noto+Sans+KR&display=swap") link(rel="stylesheet" href="vr.css") body - .x-app#x-app(v-if="appType === '1'" class="x-app-type" :class="{ background: config && config.backgroundEnabled }") - .x-container(style="flex:1") - .x-friend-list(ref="list" style="color:#aaa") + .x-app#x-app(class="x-app-type") + template(v-if="appType === '1'" :class="{ background: config && config.backgroundEnabled }") + .x-container(style="flex:1") + .x-friend-list(ref="list" style="color:#aaa") + template(v-if="config && config.minimalFeed") + template(v-for="feed in wristFeed") + .x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] #[location(:location="feed.location" :hint="feed.worldName")] + div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] ✖️ + div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] ✔ + template(v-if="feed.worldName") + | #[location(:location="feed.location" :hint="feed.worldName")] + div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] + template(v-if="feed.statusDescription === feed.previousStatusDescription") + i.x-user-status(:class="statusClass(feed.previousStatus)") + i.el-icon-right + i.x-user-status(:class="statusClass(feed.status)") + template(v-else) + | #[i.x-user-status(:class="statusClass(feed.status)")] {{feed.statusDescription}} + div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ▶️ #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ◀️ #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + span.spin ▶️ + span.name(v-text="feed.displayName" style="margin-left:20px") + div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + location(:location="feed.location" :hint="feed.worldName") + div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🎵 #[span.name(v-text="feed.displayName")] + template(v-if="feed.videoName") + | #[span(v-text="feed.videoName")] + template(v-else) + | #[span(v-text="feed.videoUrl")] + div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")] + div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 📩 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.requestMessage")] + div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💚 #[span.name(v-text="feed.senderUsername")] + div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💖 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 💔 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 📃 #[span.name(v-text="feed.previousDisplayName")] #[i.el-icon-right] #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🤝 #[span.name(v-text="feed.displayName")] {{ feed.previousTrustLevel }} #[i.el-icon-right] {{ feed.trustLevel }} + div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ✨ #[span.name(v-text="feed.displayName")] + template(v-if="feed.worldName") + | #[location(:location="feed.instanceId" :hint="feed.worldName")] + div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🧍 #[span.name(v-text="feed.displayName")] {{ feed.name }} + template(v-if="feed.description && feed.description !== feed.name") + | - {{ feed.description }} + div(v-else-if="feed.type === 'Event'" class="x-friend-item") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🛑 #[span.name(v-text="feed.data")] + div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ▶️ 🚫 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ◀️ 🚫 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ▶️ 🔇 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ◀️ 🔇 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'Blocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🚫 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | ⭕ #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🔇 #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | 🎤 #[span.name(v-text="feed.displayName")] + template(v-else) + template(v-for="feed in wristFeed") + .x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] is in #[location(:location="feed.location" :hint="feed.worldName")] + div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has logged out + div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has logged in + template(v-if="feed.worldName") + | to #[location(:location="feed.location" :hint="feed.worldName")] + div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] + template(v-if="feed.statusDescription === feed.previousStatusDescription") + i.x-user-status(:class="statusClass(feed.previousStatus)") + i.el-icon-right + i.x-user-status(:class="statusClass(feed.status)") + template(v-else) + | #[i.x-user-status(:class="statusClass(feed.status)")] {{feed.statusDescription}} + div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has joined + div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has left + div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] is joining + div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + location(:location="feed.location" :hint="feed.worldName") + div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] changed video to + template(v-if="feed.videoName") + | #[span(v-text="feed.videoName")] + template(v-else) + | #[span(v-text="feed.videoUrl")] + div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")] + div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has requested an invite #[span(v-text="feed.details.requestMessage")] + div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has responded to your invite #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has responded to your invite request #[span(v-text="feed.details.responseMessage")] + div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.senderUsername")] has sent you a friend request + div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] is now your friend + div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] is no longer your friend + div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.previousDisplayName")] changed their name to #[span.name(v-text="feed.displayName")] + div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] trust level is now {{ feed.trustLevel }} + div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has spawned a portal + template(v-if="feed.worldName") + | to #[location(:location="feed.instanceId" :hint="feed.worldName")] + div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] changed into avatar {{ feed.name }} + template(v-if="feed.description && feed.description !== feed.name") + | - {{ feed.description }} + div(v-else-if="feed.type === 'Event'" class="x-friend-item") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | Event: #[span.name(v-text="feed.data")] + div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | Blocked user #[span.name(v-text="feed.displayName")] has joined + div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | Blocked user #[span.name(v-text="feed.displayName")] has left + div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | Muted user #[span.name(v-text="feed.displayName")] has joined + div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | Muted user #[span.name(v-text="feed.displayName")] has left + div(v-else-if="feed.type === 'Blocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has blocked you + div(v-else-if="feed.type === 'Unblocked'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has unblocked you + div(v-else-if="feed.type === 'Muted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has muted you + div(v-else-if="feed.type === 'Unmuted'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") + .detail + span.extra + span.time {{ feed.created_at | formatDate('HH:MI') }} + | #[span.name(v-text="feed.displayName")] has unmuted you + .x-containerbottom + div(style="display:flex;flex-direction:row") + template(v-if="devices.length") + div(v-for="device in devices" style="flex:none;text-align:center;width:62px;height:82px") + template(v-if="device[0] === 'tracker'") + img(v-if="device[1] !== 'connected'" src="images/tracker_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/tracker_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/tracker_status_ready.png" style="width:32px;height:32px") + br + span {{ device[2] }}% + template(v-else-if="device[0] === 'leftController'") + img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") + br + span L:{{ device[2] }}% + template(v-else-if="device[0] === 'rightController'") + img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") + br + span R:{{ device[2] }}% + template(v-else-if="device[0] === 'controller'") + img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") + br + span {{ device[2] }}% + template(v-else-if="device[0] === 'base'") + img(v-if="device[1] !== 'connected'" src="images/base_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/base_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/base_status_ready.png" style="width:32px;height:32px") + br + span {{ device[2] }}% + template(v-else) + img(v-if="device[1] !== 'connected'" src="images/other_status_off.png" style="width:32px;height:32px") + img(v-else-if="device[2] < 20" src="images/other_status_ready_low.png" style="width:32px;height:32px") + img(v-else src="images/other_status_ready.png" style="width:32px;height:32px") + br + span {{ device[2] }}% + .x-containerbottom + template(v-if="nowPlaying.playing") + span(style="float:right;padding-left:10px") {{ nowPlaying.remainingText }} + marquee-text {{ nowPlaying.name }} ‎ + div.np-progress-bar(:style="{ width: nowPlaying.percentage + '%' }") template(v-if="config && config.minimalFeed") - template(v-for="feed in wristFeed") - .x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] #[location(:location="feed.location" :hint="feed.worldName")] - div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] ✖️ - div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] ✔ - template(v-if="feed.worldName") - | #[location(:location="feed.location" :hint="feed.worldName")] - div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] - template(v-if="feed.statusDescription === feed.previousStatusDescription") - i.x-user-status(:class="statusClass(feed.previousStatus)") - i.el-icon-right - i.x-user-status(:class="statusClass(feed.status)") - template(v-else) - | #[i.x-user-status(:class="statusClass(feed.status)")] {{feed.statusDescription}} - div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ▶️ #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ◀️ #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - span.spin ▶️ - span.name(v-text="feed.displayName" style="margin-left:20px") - div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - location(:location="feed.location" :hint="feed.worldName") - div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 🎵 #[span.name(v-text="feed.displayName")] - template(v-if="feed.videoName") - | #[span(v-text="feed.videoName")] - template(v-else) - | #[span(v-text="feed.videoUrl")] - div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 📨 #[span.name(v-text="feed.senderUsername")] #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")] - div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 📩 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.requestMessage")] - div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] - div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 💬 #[span.name(v-text="feed.senderUsername")] #[span(v-text="feed.details.responseMessage")] - div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 💚 #[span.name(v-text="feed.senderUsername")] - div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 💖 #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 💔 #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 📃 #[span.name(v-text="feed.previousDisplayName")] #[i.el-icon-right] #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 🤝 #[span.name(v-text="feed.displayName")] {{ feed.previousTrustLevel }} #[i.el-icon-right] {{ feed.trustLevel }} - div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ✨ #[span.name(v-text="feed.displayName")] - template(v-if="feed.worldName") - | #[location(:location="feed.instanceId" :hint="feed.worldName")] - div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 🧍 #[span.name(v-text="feed.displayName")] {{ feed.name }} - template(v-if="feed.description && feed.description !== feed.name") - | - {{ feed.description }} - div(v-else-if="feed.type === 'Event'" class="x-friend-item") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 🛑 #[span.name(v-text="feed.data")] - div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | 🎵 #[span.name(v-text="feed.data")] - div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ▶️ 🚫 #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ◀️ 🚫 #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ▶️ 🔇 #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | ◀️ 🔇 #[span.name(v-text="feed.displayName")] + template(v-if="downloadProgress === 100") + span(style="display:inline-block;margin-right:5px") #[i.el-icon-loading] + template(v-else-if="downloadProgress > 0") + span(style="display:inline-block;margin-right:5px") {{ downloadProgress }}% + template(v-if="lastLocation.date !== 0") + span(style="float:right") {{ lastLocationTimer }} + span(style="display:inline-block") {{ lastLocation.playerList.length }} + span(style="display:inline-block;font-weight:bold") {{ lastLocation.friendList.length !== 0 ? `‎‎‎‎‎‎‎‎‏‏‎ ‎(${lastLocation.friendList.length})` : ''}} template(v-else) - template(v-for="feed in wristFeed") - .x-friend-item(v-if="feed.type === 'GPS'" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] is in #[location(:location="feed.location" :hint="feed.worldName")] - div(v-else-if="feed.type === 'Offline'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] has logged out - div(v-else-if="feed.type === 'Online'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] has logged in - template(v-if="feed.worldName") - | to #[location(:location="feed.location" :hint="feed.worldName")] - div(v-else-if="feed.type === 'Status'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] - template(v-if="feed.statusDescription === feed.previousStatusDescription") - i.x-user-status(:class="statusClass(feed.previousStatus)") - i.el-icon-right - i.x-user-status(:class="statusClass(feed.status)") - template(v-else) - | #[i.x-user-status(:class="statusClass(feed.status)")] {{feed.statusDescription}} - div(v-else-if="feed.type === 'OnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] has joined - div(v-else-if="feed.type === 'OnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] has left - div(v-else-if="feed.type === 'OnPlayerJoining'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] is joining - div(v-else-if="feed.type === 'Location'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - location(:location="feed.location" :hint="feed.worldName") - div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] changed video to - template(v-if="feed.videoName") - | #[span(v-text="feed.videoName")] - template(v-else) - | #[span(v-text="feed.videoUrl")] - div(v-else-if="feed.type === 'invite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has invited you to #[location(:location="feed.details.worldId" :hint="feed.details.worldName")] #[span(v-text="feed.details.inviteMessage")] - div(v-else-if="feed.type === 'requestInvite'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has requested an invite #[span(v-text="feed.details.requestMessage")] - div(v-else-if="feed.type === 'inviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has responded to your invite #[span(v-text="feed.details.responseMessage")] - div(v-else-if="feed.type === 'requestInviteResponse'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has responded to your invite request #[span(v-text="feed.details.responseMessage")] - div(v-else-if="feed.type === 'friendRequest'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.senderUsername")] has sent you a friend request - div(v-else-if="feed.type === 'Friend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] is now your friend - div(v-else-if="feed.type === 'Unfriend'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] is no longer your friend - div(v-else-if="feed.type === 'DisplayName'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.previousDisplayName")] changed their name to #[span.name(v-text="feed.displayName")] - div(v-else-if="feed.type === 'TrustLevel'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] trust level is now {{ feed.trustLevel }} - div(v-else-if="feed.type === 'PortalSpawn'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] has spawned a portal - template(v-if="feed.worldName") - | to #[location(:location="feed.instanceId" :hint="feed.worldName")] - div(v-else-if="feed.type === 'AvatarChange'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | #[span.name(v-text="feed.displayName")] changed into avatar {{ feed.name }} - template(v-if="feed.description && feed.description !== feed.name") - | - {{ feed.description }} - div(v-else-if="feed.type === 'Event'" class="x-friend-item") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Event: #[span.name(v-text="feed.data")] - div(v-else-if="feed.type === 'VideoPlay'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Now playing: #[span.name(v-text="feed.data")] - div(v-else-if="feed.type === 'BlockedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Blocked user #[span.name(v-text="feed.displayName")] has joined - div(v-else-if="feed.type === 'BlockedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Blocked user #[span.name(v-text="feed.displayName")] has left - div(v-else-if="feed.type === 'MutedOnPlayerJoined'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Muted user #[span.name(v-text="feed.displayName")] has joined - div(v-else-if="feed.type === 'MutedOnPlayerLeft'" class="x-friend-item" :class="{ friend: feed.isFriend, favorite: feed.isFavorite }") - .detail - span.extra - span.time {{ feed.created_at | formatDate('HH:MI') }} - | Muted user #[span.name(v-text="feed.displayName")] has left - .x-containerbottom - div(style="display:flex;flex-direction:row") - template(v-if="devices.length") - div(v-for="device in devices" style="flex:none;text-align:center;width:58px;height:74px") - template(v-if="device[0] === 'tracker'") - img(v-if="device[1] !== 'connected'" src="images/tracker_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/tracker_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/tracker_status_ready.png" style="width:32px;height:32px") - br - span {{ device[2] }}% - template(v-else-if="device[0] === 'leftController'") - img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") - br - span L:{{ device[2] }}% - template(v-else-if="device[0] === 'rightController'") - img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") - br - span R:{{ device[2] }}% - template(v-else-if="device[0] === 'controller'") - img(v-if="device[1] !== 'connected'" src="images/controller_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/controller_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/controller_status_ready.png" style="width:32px;height:32px") - br - span {{ device[2] }}% - template(v-else-if="device[0] === 'base'") - img(v-if="device[1] !== 'connected'" src="images/base_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/base_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/base_status_ready.png" style="width:32px;height:32px") - br - span {{ device[2] }}% - template(v-else) - img(v-if="device[1] !== 'connected'" src="images/other_status_off.png" style="width:32px;height:32px") - img(v-else-if="device[2] < 20" src="images/other_status_ready_low.png" style="width:32px;height:32px") - img(v-else src="images/other_status_ready.png" style="width:32px;height:32px") - br - span {{ device[2] }}% - .x-containerbottom - template(v-if="nowPlaying.playing") - span(style="float:right;padding-left:10px") {{ nowPlaying.remainingText }} - marquee-text {{ nowPlaying.name }} ‎ - div.np-progress-bar(:style="{ width: nowPlaying.percentage + '%' }") - template(v-if="config && config.minimalFeed") - template(v-if="config.downloadProgress === 100") - span(style="display:inline-block;margin-right:5px") #[i.el-icon-loading] - template(v-else-if="config.downloadProgress > 0") - span(style="display:inline-block;margin-right:5px") {{ config.downloadProgress }}% - template(v-if="lastLocation.date !== 0") - span(style="float:right") {{ lastLocationTimer }} - span(style="display:inline-block") {{ lastLocation.playerList.length }} - span(style="display:inline-block;font-weight:bold") {{ lastLocation.friendList.length !== 0 ? `‎‎‎‎‎‎‎‎‏‏‎ ‎(${lastLocation.friendList.length})` : ''}} - template(v-else) - template(v-if="config.downloadProgress === 100") - span(style="display:inline-block;margin-right:5px") Downloading: #[i.el-icon-loading] - template(v-else-if="config.downloadProgress > 0") - span(style="display:inline-block;margin-right:5px") Downloading: {{ config.downloadProgress }}% - template(v-if="lastLocation.date !== 0") - span(style="float:right") Timer: {{ lastLocationTimer }} - span(style="display:inline-block") Players: {{ lastLocation.playerList.length }} - span(style="display:inline-block;font-weight:bold") {{ lastLocation.friendList.length !== 0 ? `‎‎‎‎‎‎‎‎‏‏‎ ‎(${lastLocation.friendList.length})` : ''}} - br - span(style="float:right") {{ currentTime | formatDate('YYYY-MM-DD HH:MI:SS AMPM') }} - span CPU {{ cpuUsage }}% - svg(v-if="appType === '2'" class="np-progress-circle") - circle(class="np-progress-circle-stroke" cx="60" cy="60" stroke="white" r="30" fill="transparent" stroke-width="60") + template(v-if="downloadProgress === 100") + span(style="display:inline-block;margin-right:5px") Downloading: #[i.el-icon-loading] + template(v-else-if="downloadProgress > 0") + span(style="display:inline-block;margin-right:5px") Downloading: {{ downloadProgress }}% + template(v-if="lastLocation.date !== 0") + span(style="float:right") Timer: {{ lastLocationTimer }} + span(style="display:inline-block") Players: {{ lastLocation.playerList.length }} + span(style="display:inline-block;font-weight:bold") {{ lastLocation.friendList.length !== 0 ? `‎‎‎‎‎‎‎‎‏‏‎ ‎(${lastLocation.friendList.length})` : ''}} + br + span(style="float:right") {{ currentTime | formatDate('YYYY-MM-DD HH:MI:SS AMPM') }} + span CPU {{ cpuUsage }}% + template(v-else) + svg(class="np-progress-circle") + circle(class="np-progress-circle-stroke" cx="60" cy="60" stroke="white" r="30" fill="transparent" stroke-width="60") script(src="vendor.js") script(src="vr.js")