diff --git a/html/src/app.js b/html/src/app.js index 11d125c8..37066495 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -8131,6 +8131,8 @@ speechSynthesis.getVoices(); this.addGameLogVRDancing(gameLog, location); } else if (type === 'VideoPlay(ZuwaZuwaDance)') { this.addGameLogZuwaZuwaDance(gameLog, location); + } else if (type === 'LSMedia') { + this.addGameLogLSMedia(gameLog, location); } return; case 'photon-id': @@ -8887,7 +8889,7 @@ speechSynthesis.getVoices(); eventData.EventType === 'UdonSyncRunProgramAsRPC' && eventData.Data[0] === 'Beep' ) { - if (!this.isDanceWorld(this.lastLocation.location)) { + if (!this.isRpcWorld(this.lastLocation.location)) { return; } var text = 'Beep'; @@ -9365,7 +9367,7 @@ speechSynthesis.getVoices(); if (typeof gameLog.videoPos !== 'undefined') { videoPos = gameLog.videoPos; } - if (!this.isDanceWorld(location) || gameLog.videoId === 'YouTube') { + if (!this.isRpcWorld(location) || gameLog.videoId === 'YouTube') { // skip PyPyDance and VRDancing videos try { var url = new URL(videoUrl); @@ -9565,6 +9567,9 @@ speechSynthesis.getVoices(); var videoId = Number(data[4]); var displayName = data[5]; var videoName = data[6]; + if (displayName === 'Random') { + displayName = ''; + } if (videoId === 0) { videoId = 'YouTube'; } @@ -9613,6 +9618,56 @@ speechSynthesis.getVoices(); } }; + $app.methods.addGameLogLSMedia = function (gameLog, location) { + // [VRCX] LSMedia 0,4268.981,Natsumi-sama,, + // [VRCX] LSMedia 0,6298.292,Natsumi-sama,The Outfit (2022), 1080p + var data = + /LSMedia ([\d.]+),([\d.]+),(.+?),(.+?),(?=[^,]*$) ([\d.]+p)/g.exec( + gameLog.data + ); + if (!data) { + return; + } + var videoPos = Number(data[1]); + var videoLength = Number(data[2]); + var displayName = data[3]; + var videoName = data[4]; + var videoUrl = videoName; + var videoId = 'LSMedia'; + if (videoUrl === this.nowPlaying.url) { + var entry = { + created_at: gameLog.dt, + videoUrl, + videoLength, + videoPos + }; + this.setNowPlaying(entry); + return; + } + var userId = ''; + if (displayName) { + for (var ref of API.cachedUsers.values()) { + if (ref.displayName === displayName) { + userId = ref.id; + break; + } + } + } + var entry = { + created_at: gameLog.dt, + type: 'VideoPlay', + videoUrl, + videoId, + videoName, + videoLength, + location, + displayName, + userId, + videoPos + }; + this.setNowPlaying(entry); + }; + $app.methods.lookupYouTubeVideo = async function (videoId) { var data = null; var apiKey = 'AIzaSyA-iUQCpWf5afEL3NanEOSxbzziPMU3bxY'; @@ -9893,7 +9948,7 @@ speechSynthesis.getVoices(); buttonText = ''; buttonUrl = ''; } - if (!hidePrivate && this.isDanceWorld(L.tag)) { + if (!hidePrivate && this.isRpcWorld(L.tag)) { // dance world rpc if (L.worldId === 'wrld_f20326da-f1ac-45fc-a062-609723b097b1') { appId = '784094509008551956'; @@ -9905,10 +9960,17 @@ speechSynthesis.getVoices(); appId = '846232616054030376'; bigIcon = 'vr_dancing'; } else if ( - L.worldId === 'wrld_52bdcdab-11cd-4325-9655-0fb120846945' + L.worldId === 'wrld_52bdcdab-11cd-4325-9655-0fb120846945' || + L.worldId === 'wrld_db612673-d536-488e-a776-24e7877c161b' ) { appId = '939473404808007731'; bigIcon = 'zuwa_zuwa_dance'; + } else if ( + L.worldId === 'wrld_99211ba0-1878-493f-b64e-d3552c10b7cb' || + L.worldId === 'wrld_1b68f7a8-8aea-4900-b7a2-3fc4139ac817' + ) { + appId = '968292722391785512'; + bigIcon = 'ls_media'; } if (this.nowPlaying.name) { L.worldName = this.nowPlaying.name; @@ -11844,15 +11906,18 @@ speechSynthesis.getVoices(); AppApi.ExecuteVrOverlayFunction('configUpdate', json); }; - $app.methods.isDanceWorld = function (location) { - var danceWorlds = [ + $app.methods.isRpcWorld = function (location) { + var rpcWorlds = [ 'wrld_f20326da-f1ac-45fc-a062-609723b097b1', 'wrld_42377cf1-c54f-45ed-8996-5875b0573a83', 'wrld_dd6d2888-dbdc-47c2-bc98-3d631b2acd7c', - 'wrld_52bdcdab-11cd-4325-9655-0fb120846945' + 'wrld_52bdcdab-11cd-4325-9655-0fb120846945', + 'wrld_db612673-d536-488e-a776-24e7877c161b', + 'wrld_99211ba0-1878-493f-b64e-d3552c10b7cb', + 'wrld_1b68f7a8-8aea-4900-b7a2-3fc4139ac817' ]; var L = API.parseLocation(location); - if (danceWorlds.includes(L.worldId)) { + if (rpcWorlds.includes(L.worldId)) { return true; } return false; @@ -11863,7 +11928,7 @@ speechSynthesis.getVoices(); if (this.progressPie) { progressPie = true; if (this.progressPieFilter) { - if (!this.isDanceWorld(this.lastLocation.location)) { + if (!this.isRpcWorld(this.lastLocation.location)) { progressPie = false; } } diff --git a/html/src/index.pug b/html/src/index.pug index 97f200ca..dc4352d9 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -402,7 +402,8 @@ html span(v-text="scope.row.data") template(v-else-if="scope.row.type === 'VideoPlay'") span(v-if="scope.row.videoId") {{ scope.row.videoId }}: - span.x-link(v-if="scope.row.videoName" @click="openExternalLink(scope.row.videoUrl)" v-text="scope.row.videoName") + span(v-if="scope.row.videoId === 'LSMedia'" v-text="scope.row.videoName") + span.x-link(v-else-if="scope.row.videoName" @click="openExternalLink(scope.row.videoUrl)" v-text="scope.row.videoName") span.x-link(v-else @click="openExternalLink(scope.row.videoUrl)" v-text="scope.row.videoUrl") template(v-else-if="scope.row.type === 'Notification' || scope.row.type === 'OnPlayerJoined' || scope.row.type === 'OnPlayerLeft'") span.x-link(v-else v-text="scope.row.data")