navigation to market / my purchases from message dialog links

This commit is contained in:
Alexander Ivash 2018-05-14 23:54:13 +03:00
parent 4ce8e29d97
commit bcb373618f
4 changed files with 51 additions and 22 deletions

View file

@ -431,7 +431,10 @@ Rectangle {
popup.showGetWearables(function() { popup.showGetWearables(function() {
emitSendToScript({'method' : 'navigate', 'url' : 'hifi://AvatarIsland'}) emitSendToScript({'method' : 'navigate', 'url' : 'hifi://AvatarIsland'})
}) }, function(link) {
console.debug('link clicked', link);
emitSendToScript({'method' : 'navigate', 'url' : link})
});
} }
} }
} }
@ -675,6 +678,9 @@ Rectangle {
onClicked: { onClicked: {
popup.showBuyAvatars(function() { popup.showBuyAvatars(function() {
emitSendToScript({'method' : 'navigate', 'url' : 'hifi://BodyMart'}) emitSendToScript({'method' : 'navigate', 'url' : 'hifi://BodyMart'})
}, function(link) {
console.debug('link clicked', link);
emitSendToScript({'method' : 'navigate', 'url' : link})
}); });
} }
} }

View file

@ -27,6 +27,7 @@ Rectangle {
property var onButton2Clicked; property var onButton2Clicked;
property var onButton1Clicked; property var onButton1Clicked;
property var onLinkClicked;
function open() { function open() {
visible = true; visible = true;
@ -110,6 +111,11 @@ Rectangle {
height: paintedHeight; height: paintedHeight;
verticalAlignment: Text.AlignTop; verticalAlignment: Text.AlignTop;
wrapMode: Text.WordWrap; wrapMode: Text.WordWrap;
onLinkActivated: {
if(onLinkClicked)
onLinkClicked(link);
}
} }
Image { Image {

View file

@ -18,12 +18,12 @@ MessageBox {
property url getWearablesUrl: '../../../images/samples/hifi-place-77312e4b-6f48-4eb4-87e2-50444d8e56d1.png' property url getWearablesUrl: '../../../images/samples/hifi-place-77312e4b-6f48-4eb4-87e2-50444d8e56d1.png'
function showGetWearables(callback) { function showGetWearables(callback, linkCallback) {
popup.button2text = 'AvatarIsland' popup.button2text = 'AvatarIsland'
popup.button1text = 'CANCEL' popup.button1text = 'CANCEL'
popup.titleText = 'Get Wearables' popup.titleText = 'Get Wearables'
popup.bodyText = 'Buy wearables from <a href="https://fake.link">Marketplace</a>' + '\n' + popup.bodyText = 'Buy wearables from <a href="app://marketplace">Marketplace</a>' + '\n' +
'Wear wearable from <a href="https://fake.link">My Purchases</a>' + '\n' + 'Wear wearable from <a href="app://purchases">My Purchases</a>' + '\n' +
'You can visit the domain “AvatarIsland”' + '\n' + 'You can visit the domain “AvatarIsland”' + '\n' +
'to get wearables' 'to get wearables'
@ -34,6 +34,14 @@ MessageBox {
if(callback) if(callback)
callback(); callback();
} }
popup.onLinkClicked = function(link) {
popup.close();
if(linkCallback)
linkCallback(link);
}
popup.open(); popup.open();
} }
@ -70,13 +78,13 @@ MessageBox {
property url getAvatarsUrl: '../../../images/samples/hifi-place-get-avatars.png' property url getAvatarsUrl: '../../../images/samples/hifi-place-get-avatars.png'
function showBuyAvatars(callback) { function showBuyAvatars(callback, linkCallback) {
popup.button2text = 'BodyMart' popup.button2text = 'BodyMart'
popup.button1text = 'CANCEL' popup.button1text = 'CANCEL'
popup.titleText = 'Get Avatars' popup.titleText = 'Get Avatars'
popup.bodyText = 'Buy avatars from <a href="https://fake.link">Marketplace</a>' + '\n' + popup.bodyText = 'Buy avatars from <a href="app://marketplace">Marketplace</a>' + '\n' +
'Wear avatars from <a href="https://fake.link">My Purchases</a>' + '\n' + 'Wear avatars from <a href="app://purchases">My Purchases</a>' + '\n' +
'You can visit the domain “BodyMart”' + '\n' + 'You can visit the domain “BodyMart”' + '\n' +
'to get avatars' 'to get avatars'
@ -87,6 +95,14 @@ MessageBox {
if(callback) if(callback)
callback(); callback();
} }
popup.onLinkClicked = function(link) {
popup.close();
if(linkCallback)
linkCallback(link);
}
popup.open(); popup.open();
} }
} }

View file

@ -47,20 +47,6 @@ function getMyAvatarWearables() {
} }
return wearablesArray; return wearablesArray;
/*
var getAttachedModelEntities = function() {
var resultEntities = [];
Entities.findEntitiesByType('Model', MyAvatar.position, 100).forEach(function(entityID) {
if (isEntityBeingWorn(entityID)) {
resultEntities.push({properties : entityID});
}
});
return resultEntities;
};
return getAttachedModelEntities();
*/
} }
function getMyAvatar() { function getMyAvatar() {
@ -114,6 +100,10 @@ var currentAvatar = null;
var selectedAvatarEntityGrabbable = false; var selectedAvatarEntityGrabbable = false;
var selectedAvatarEntity = null; var selectedAvatarEntity = null;
var MARKETPLACE_PURCHASES_QML_PATH = "hifi/commerce/purchases/Purchases.qml";
var MARKETPLACE_URL = Account.metaverseServerURL + "/marketplace";
var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js");
function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml.
console.debug('fromQml: message = ', JSON.stringify(message, null, '\t')) console.debug('fromQml: message = ', JSON.stringify(message, null, '\t'))
@ -191,7 +181,18 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
break; break;
case 'navigate': case 'navigate':
console.debug('avatarapp.js: navigate: ', message.url); console.debug('avatarapp.js: navigate: ', message.url);
AddressManager.handleLookupString(message.url, false); if(message.url.indexOf('app://') === 0) {
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system")
if(message.url === 'app://marketplace') {
tablet.gotoWebScreen(MARKETPLACE_URL, MARKETPLACES_INJECT_SCRIPT_URL);
} else if(message.url === 'app://purchases') {
tablet.pushOntoStack(MARKETPLACE_PURCHASES_QML_PATH);
}
} else if(message.url.indexOf('hifi://') === 0) {
AddressManager.handleLookupString(message.url, false);
}
break; break;
default: default:
print('Unrecognized message from AvatarApp.qml:', JSON.stringify(message)); print('Unrecognized message from AvatarApp.qml:', JSON.stringify(message));