mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 10:57:25 +02:00
Merge pull request #1315 from Madders/explore-app-updates
Explore app metaverse api updates
This commit is contained in:
commit
086f56f7ec
3 changed files with 121 additions and 38 deletions
|
@ -13,8 +13,18 @@
|
||||||
#component-templates {
|
#component-templates {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.thumbnailItem .d-flex {
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
backdrop-filter: blur(5px);
|
||||||
|
text-shadow: 1px 1px 2px black, 0 0 25px black, 0 0 5px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thumbnailItemHover .d-flex {
|
||||||
|
background: rgba(100, 100, 100, 0.2);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<!--<script src="js/TestEventBridge.js"></script>-->
|
<!--<script src="../Explore/js/TestEventBridge.js"></script>-->
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="component-templates">
|
<div id="component-templates">
|
||||||
|
@ -22,7 +32,7 @@
|
||||||
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
|
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
|
||||||
<template v-slot:activator="{ on, attrs }">
|
<template v-slot:activator="{ on, attrs }">
|
||||||
<v-btn color="grey darken-3" class="ml-5" v-show="permission" value="animations" v-bind="attrs" v-on="on" fab small>
|
<v-btn color="grey darken-3" class="ml-5" v-show="permission" value="animations" v-bind="attrs" v-on="on" fab small>
|
||||||
<v-icon color="purple">mdi-map-plus</v-icon>
|
<v-icon color="purple lighten-2">mdi-map-plus</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card>
|
<v-card>
|
||||||
|
@ -30,7 +40,7 @@
|
||||||
<v-btn icon dark @click="closeDialog();">
|
<v-btn icon dark @click="closeDialog();">
|
||||||
<v-icon>mdi-close</v-icon>
|
<v-icon>mdi-close</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-toolbar-title>Add Location</v-toolbar-title>
|
<v-toolbar-title>Add Location Beacon</v-toolbar-title>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-toolbar-items>
|
<v-toolbar-items>
|
||||||
<v-btn dark text @click="addLocation()">Save</v-btn>
|
<v-btn dark text @click="addLocation()">Save</v-btn>
|
||||||
|
@ -101,30 +111,28 @@
|
||||||
<template v-slot:default="props">
|
<template v-slot:default="props">
|
||||||
<v-row dense>
|
<v-row dense>
|
||||||
<v-col v-for="item in props.items"
|
<v-col v-for="item in props.items"
|
||||||
:key="item.name"
|
:key="item.index"
|
||||||
cols="12"
|
cols="12"
|
||||||
sm="6"
|
sm="6"
|
||||||
md="4"
|
md="4"
|
||||||
lg="3">
|
lg="3">
|
||||||
<v-hover
|
<v-hover v-slot:default="{ hover }">
|
||||||
v-slot:default="{ hover }"
|
<v-card @click.native="openLocation(item['location'])"
|
||||||
>
|
:color="hover ? 'grey darken-3' : 'grey darken-4'"
|
||||||
<v-card
|
:style="item.thumbnail ? 'background-size: cover; background-position: center; background-image: url(' + item.thumbnail +');' : '' "
|
||||||
@click.native="openLocation(item['Visit'])"
|
:class="item.thumbnail ? (hover ? 'thumbnailItem thumbnailItemHover' : 'thumbnailItem') : '' "
|
||||||
:color="hover ? 'grey darken-3' : 'grey darken-4'"
|
>
|
||||||
>
|
|
||||||
<!--<v-card-title class="headline">{{ item["Domain Name"] }}</v-card-title>-->
|
|
||||||
<div class="d-flex flex-no-wrap justify-space-between">
|
<div class="d-flex flex-no-wrap justify-space-between">
|
||||||
<div>
|
<div>
|
||||||
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['Domain Name']" style="max-width: 400px;"></v-card-title>
|
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['name']" style="max-width: 400px;"></v-card-title>
|
||||||
<v-card-subtitle class="pa-2 d-block text-truncate" style="max-width: 400px;" v-text="item.Owner"></v-card-subtitle>
|
<v-card-subtitle class="pa-2 d-block text-truncate" style="max-width: 400px;" v-text="item.owner"></v-card-subtitle>
|
||||||
</div>
|
</div>
|
||||||
<div style="text-align: right;">
|
<div style="text-align: right;">
|
||||||
<v-card-title align-right class="align-right" v-text="item['People']"></v-card-title>
|
<v-card-title align-right class="align-right" v-text="item['userCount']"></v-card-title>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</hover>
|
</v-hover>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
|
@ -230,7 +238,7 @@
|
||||||
<v-tooltip bottom>
|
<v-tooltip bottom>
|
||||||
<template v-slot:activator="{ on, attrs }">
|
<template v-slot:activator="{ on, attrs }">
|
||||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" v-show="isHomeSet" value="animations" fab small @click="navigateHome()">
|
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" v-show="isHomeSet" value="animations" fab small @click="navigateHome()">
|
||||||
<v-icon color="purple">mdi-home</v-icon>
|
<v-icon color="purple lighten-2">mdi-home</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<span>Go Home</span>
|
<span>Go Home</span>
|
||||||
|
@ -238,7 +246,7 @@
|
||||||
<v-tooltip bottom>
|
<v-tooltip bottom>
|
||||||
<template v-slot:activator="{ on, attrs }">
|
<template v-slot:activator="{ on, attrs }">
|
||||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateBack()">
|
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateBack()">
|
||||||
<v-icon color="purple">mdi-arrow-left-bold</v-icon>
|
<v-icon color="purple lighten-2">mdi-arrow-left-bold</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<span>Go Back</span>
|
<span>Go Back</span>
|
||||||
|
@ -246,14 +254,14 @@
|
||||||
<v-tooltip bottom>
|
<v-tooltip bottom>
|
||||||
<template v-slot:activator="{ on, attrs }">
|
<template v-slot:activator="{ on, attrs }">
|
||||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateForward()">
|
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateForward()">
|
||||||
<v-icon color="purple">mdi-arrow-right-bold</v-icon>
|
<v-icon color="purple lighten-2">mdi-arrow-right-bold</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<span>Go Forward</span>
|
<span>Go Forward</span>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
<!--<v-btn value="animations" fab small>
|
<!--<v-btn value="animations" fab small>
|
||||||
<v-icon color="purple">mdi-map-marker-plus</v-icon>
|
<v-icon color="purple">mdi-map-marker-plus</v-icon>
|
||||||
</v-btn>-->
|
</v-btn>-->
|
||||||
<add-location ref="addLocation" :permission="permission"></add-location>
|
<add-location ref="addLocation" :permission="permission"></add-location>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
</div>
|
</div>
|
||||||
|
@ -286,22 +294,75 @@
|
||||||
<script src="../libraries/vue/vue.min.js"></script>
|
<script src="../libraries/vue/vue.min.js"></script>
|
||||||
<script src="../libraries/vue-router/vue-router.js"></script>
|
<script src="../libraries/vue-router/vue-router.js"></script>
|
||||||
<script src="../libraries/vuetify/vuetify-v2.3.9.js"></script>
|
<script src="../libraries/vuetify/vuetify-v2.3.9.js"></script>
|
||||||
|
<script src="../libraries/axios/axios.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var exploreComponent = null;
|
var exploreComponent = null;
|
||||||
var locationData = null;
|
var locationData = null;
|
||||||
|
var placesData = null;
|
||||||
|
|
||||||
|
function blendedData() {
|
||||||
|
var joinedData = [];
|
||||||
|
if (locationData != null) {
|
||||||
|
for (var i = 0; i < locationData.length; i++) {
|
||||||
|
joinedData.push({
|
||||||
|
"index": joinedData.length,
|
||||||
|
"location": locationData[i].Visit,
|
||||||
|
"name": locationData[i]['Domain Name'],
|
||||||
|
"owner": locationData[i].Owner,
|
||||||
|
"userCount": locationData[i].People,
|
||||||
|
"description": "",
|
||||||
|
"thumbnail": ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (placesData != null) {
|
||||||
|
var activeThresholdTime = new Date();
|
||||||
|
activeThresholdTime.setMinutes(activeThresholdTime.getMinutes() - 15);
|
||||||
|
|
||||||
|
// while blending metaverse data ensure it is cleaned for active domains
|
||||||
|
for (var i = 0; i < placesData.length; i++) {
|
||||||
|
if (placesData[i].domain.active && placesData[i].visibility == "open" && new Date(placesData[i].last_activity_update) > activeThresholdTime) {
|
||||||
|
joinedData.push({
|
||||||
|
"index": joinedData.length,
|
||||||
|
"location": placesData[i].address,
|
||||||
|
"name": placesData[i].name,
|
||||||
|
"owner": placesData[i].managers[0],
|
||||||
|
"userCount": placesData[i].current_attendance,
|
||||||
|
"description": placesData[i].description,
|
||||||
|
"thumbnail": placesData[i].thumbnail
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return joinedData;
|
||||||
|
}
|
||||||
|
|
||||||
function getAddressListData(component) {
|
function getAddressListData(component) {
|
||||||
exploreComponent = component;
|
exploreComponent = component;
|
||||||
|
|
||||||
if (locationData != null) {
|
// if json data not loaded fire emti event for it
|
||||||
exploreComponent.updateData(locationData);
|
if (locationData == null) {
|
||||||
return;
|
var readyEvent = {
|
||||||
|
"action": "requestAddressList",
|
||||||
|
};
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
var readyEvent = {
|
// if metaverse data not loaded fire a request for it
|
||||||
"action": "requestAddressList",
|
if (placesData == null) {
|
||||||
};
|
// fire off data get against the metaverse
|
||||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
axios.get("https://metaverse.vircadia.com/live/api/v1/places")
|
||||||
|
.then((response) => {
|
||||||
|
placesData = response.data.data.places;
|
||||||
|
exploreComponent.updateData(blendedData());
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var bookmarksComponent = null;
|
var bookmarksComponent = null;
|
||||||
|
@ -346,8 +407,8 @@
|
||||||
page: 1,
|
page: 1,
|
||||||
pageCount: 0,
|
pageCount: 0,
|
||||||
itemsPerPage: 6,
|
itemsPerPage: 6,
|
||||||
sortBy: 'People',
|
sortBy: 'userCount',
|
||||||
items: [],
|
items: [],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: document.getElementById("explore-template").innerHTML,
|
template: document.getElementById("explore-template").innerHTML,
|
||||||
|
@ -544,7 +605,7 @@
|
||||||
if (messageData.action == "addressListv2") {
|
if (messageData.action == "addressListv2") {
|
||||||
self.permission = messageData.permission;
|
self.permission = messageData.permission;
|
||||||
locationData = messageData.myAddress;
|
locationData = messageData.myAddress;
|
||||||
exploreComponent.updateData(locationData);
|
exploreComponent.updateData(blendedData());
|
||||||
self.isHomeSet = messageData.isHomeSet;
|
self.isHomeSet = messageData.isHomeSet;
|
||||||
}
|
}
|
||||||
if (messageData.action == "bookmarksList") {
|
if (messageData.action == "bookmarksList") {
|
||||||
|
@ -553,9 +614,9 @@
|
||||||
}
|
}
|
||||||
if (messageData.action == "retrievePortInformationResponse") {
|
if (messageData.action == "retrievePortInformationResponse") {
|
||||||
addLocationData = messageData.goToAddresses;
|
addLocationData = messageData.goToAddresses;
|
||||||
for (let i = 0; i < addLocationData.length; i++) {
|
for (let i = 0; i < addLocationData.length; i++) {
|
||||||
var metaverseProvider = addLocationData[i].split("/")[2].split(":")[0];
|
var metaverseProvider = addLocationData[i].split("/")[2].split(":")[0];
|
||||||
addLocationData[i] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
addLocationData[i] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
||||||
}
|
}
|
||||||
addLocationComponent.updateData(addLocationData);
|
addLocationComponent.updateData(addLocationData);
|
||||||
}
|
}
|
||||||
|
|
19
scripts/communityScripts/libraries/axios/LICENSE
Normal file
19
scripts/communityScripts/libraries/axios/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2014-present Matt Zabriskie
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
3
scripts/communityScripts/libraries/axios/axios.min.js
vendored
Normal file
3
scripts/communityScripts/libraries/axios/axios.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue