get rid of 'isExternal' due to changes requirements

show avatar thumbnail if url was specified & valid, show 'guy-in-circle' otherwise
This commit is contained in:
Alexander Ivash 2018-05-25 04:22:32 +03:00
parent 9925bc2822
commit 5381dce8d8
4 changed files with 61 additions and 49 deletions

View file

@ -109,9 +109,10 @@ Rectangle {
currentAvatar.avatarScale = message.value; currentAvatar.avatarScale = message.value;
updateCurrentAvatarInBookmarks(currentAvatar); updateCurrentAvatarInBookmarks(currentAvatar);
} else if(message.method === 'externalAvatarApplied') { } else if(message.method === 'externalAvatarApplied') {
currentAvatar.isExternal = true; console.debug('externalAvatarApplied...');
currentAvatar.name = allAvatars.encodedName('', true); currentAvatar.avatarUrl = message.avatarURL;
currentAvatar.thumbnailUrl = externalAvatarThumbnailUrl.toString(); currentAvatar.thumbnailUrl = allAvatars.makeThumbnailUrl(message.avatarURL);
console.debug('externalAvatarApplied: ', currentAvatar.avatarUrl, currentAvatar.thumbnailUrl);
updateCurrentAvatarInBookmarks(currentAvatar); updateCurrentAvatarInBookmarks(currentAvatar);
} else if(message.method === 'settingChanged') { } else if(message.method === 'settingChanged') {
currentAvatarSettings[message.name] = message.value; currentAvatarSettings[message.name] = message.value;
@ -340,11 +341,25 @@ Rectangle {
anchors.left: displayNameLabel.left anchors.left: displayNameLabel.left
anchors.top: displayNameLabel.bottom anchors.top: displayNameLabel.bottom
anchors.topMargin: 31 anchors.topMargin: 31
source: avatarUrl Binding on source {
visible: avatarImage.status !== Image.Loading when: avatarUrl !== ''
value: avatarUrl
}
onSourceChanged: {
console.debug('avatarImage: source = ', source);
}
visible: avatarImage.status !== Image.Loading && avatarImage.status !== Image.Error
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
} }
ShadowImage {
id: customAvatarImage
anchors.fill: avatarImage;
visible: avatarUrl === '' || avatarImage.status === Image.Error
source: externalAvatarThumbnailUrl
}
ShadowRectangle { ShadowRectangle {
anchors.fill: avatarImage; anchors.fill: avatarImage;
color: 'white' color: 'white'
@ -407,14 +422,17 @@ Rectangle {
} }
entry.avatarEntites = wearables; entry.avatarEntites = wearables;
currentAvatar.name = allAvatars.encodedName(createFavorite.favoriteNameText, currentAvatar.isExternal); currentAvatar.name = createFavorite.favoriteNameText;
console.debug('became: ', JSON.stringify(entry, 0, 4)); console.debug('became: ', JSON.stringify(entry, 0, 4));
emitSendToScript({'method': 'addAvatar', 'name' : currentAvatar.name}); emitSendToScript({'method': 'addAvatar', 'name' : currentAvatar.name});
createFavorite.close(); createFavorite.close();
} }
createFavorite.open(root.currentAvatar); var avatarThumbnail = (avatarUrl === '' || avatarImage.status === Image.Error) ?
externalAvatarThumbnailUrl : avatarUrl;
createFavorite.open(root.currentAvatar.wearables.count, avatarThumbnail);
} }
} }
@ -564,16 +582,15 @@ Rectangle {
property int verticalSpacing: 44 property int verticalSpacing: 44
function selectAvatar(avatar) { function selectAvatar(avatar) {
emitSendToScript({'method' : 'selectAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)}) emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
} }
function deleteAvatar(avatar) { function deleteAvatar(avatar) {
emitSendToScript({'method' : 'deleteAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)}) emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name})
} }
AvatarsModel { AvatarsModel {
id: allAvatars id: allAvatars
externalAvatarThumbnailUrl: root.externalAvatarThumbnailUrl
} }
property int itemsPerPage: 8 property int itemsPerPage: 8
@ -676,7 +693,8 @@ Rectangle {
AvatarThumbnail { AvatarThumbnail {
id: favoriteAvatarImage id: favoriteAvatarImage
imageUrl: thumbnailUrl externalAvatarThumbnailUrl: root.externalAvatarThumbnailUrl
avatarUrl: thumbnailUrl
border.color: container.highlighted ? style.colors.blueHighlight : 'transparent' border.color: container.highlighted ? style.colors.blueHighlight : 'transparent'
border.width: container.highlighted ? 4 : 0 border.width: container.highlighted ? 4 : 0
wearablesCount: { wearablesCount: {

View file

@ -15,15 +15,32 @@ Item {
property alias dropShadowHorizontalOffset: avatarImage.dropShadowHorizontalOffset property alias dropShadowHorizontalOffset: avatarImage.dropShadowHorizontalOffset
property alias dropShadowVerticalOffset: avatarImage.dropShadowVerticalOffset property alias dropShadowVerticalOffset: avatarImage.dropShadowVerticalOffset
property alias imageUrl: avatarImage.source property url externalAvatarThumbnailUrl;
property var avatarUrl;
property alias border: avatarImage.border property alias border: avatarImage.border
ShadowImage { ShadowImage {
id: avatarImage id: avatarImage
anchors.fill: parent anchors.fill: parent
visible: status !== Image.Loading
radius: 5 radius: 5
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
Binding on source {
when: avatarUrl !== ''
value: avatarUrl
}
onSourceChanged: {
console.debug('avatarImage: source = ', source);
}
visible: avatarImage.status !== Image.Loading && avatarImage.status !== Image.Error
}
ShadowImage {
id: customAvatarImage
anchors.fill: avatarImage;
visible: avatarUrl === '' || avatarImage.status === Image.Error
source: externalAvatarThumbnailUrl
} }
ShadowRectangle { ShadowRectangle {

View file

@ -2,8 +2,6 @@ import QtQuick 2.9
ListModel { ListModel {
id: model id: model
property url externalAvatarThumbnailUrl;
function extractMarketId(avatarUrl) { function extractMarketId(avatarUrl) {
var guidRegexp = '([A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12})'; var guidRegexp = '([A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12})';
@ -27,39 +25,21 @@ ListModel {
} }
function makeThumbnailUrl(avatarUrl) { function makeThumbnailUrl(avatarUrl) {
var marketId = extractMarketId(avatarUrl);
if(marketId === '')
return '';
var avatarThumbnailUrl = "https://hifi-metaverse.s3-us-west-1.amazonaws.com/marketplace/previews/%marketId%/large/hifi-mp-%marketId%.jpg" var avatarThumbnailUrl = "https://hifi-metaverse.s3-us-west-1.amazonaws.com/marketplace/previews/%marketId%/large/hifi-mp-%marketId%.jpg"
.split('%marketId%').join(extractMarketId(avatarUrl)); .split('%marketId%').join(marketId);
return avatarThumbnailUrl; return avatarThumbnailUrl;
} }
function encodedName(avatarName, isExternal) {
if(isExternal) {
if(avatarName.indexOf('external:') !== 0) {
return 'external:' + avatarName;
}
}
return avatarName;
}
function decodedName(avatarName, isExternal) {
if(isExternal) {
if(avatarName.indexOf('external:') === 0) {
avatarName = avatarName.replace('external:', '');
}
}
return avatarName;
}
function makeAvatarObject(avatar, avatarName) { function makeAvatarObject(avatar, avatarName) {
console.debug('makeAvatarEntry: ', avatarName, JSON.stringify(avatar)); console.debug('makeAvatarEntry: ', avatarName, JSON.stringify(avatar));
var isExternal = avatarName.indexOf('external:') === 0;
avatarName = decodedName(avatarName, isExternal);
var avatarThumbnailUrl = isExternal ? externalAvatarThumbnailUrl.toString() : makeThumbnailUrl(avatar.avatarUrl); var avatarThumbnailUrl = makeThumbnailUrl(avatar.avatarUrl);
console.debug('isExternal:', isExternal, 'avatarThumbnailUrl:', avatarThumbnailUrl, 'externalAvatarThumbnailUrl:', externalAvatarThumbnailUrl); console.debug('avatarThumbnailUrl:', avatarThumbnailUrl);
return { return {
'name' : avatarName, 'name' : avatarName,
@ -69,7 +49,6 @@ ListModel {
'wearables' : avatar.avatarEntites ? avatar.avatarEntites : [], 'wearables' : avatar.avatarEntites ? avatar.avatarEntites : [],
'attachments' : avatar.attachments ? avatar.attachments : [], 'attachments' : avatar.attachments ? avatar.attachments : [],
'entry' : avatar, 'entry' : avatar,
'isExternal' : isExternal,
'getMoreAvatars' : false 'getMoreAvatars' : false
}; };

View file

@ -25,14 +25,12 @@ Rectangle {
property var onSaveClicked; property var onSaveClicked;
property var onCancelClicked; property var onCancelClicked;
function open(avatar) { function open(wearables, thumbnail) {
favoriteName.text = ''; favoriteName.text = '';
favoriteName.forceActiveFocus(); favoriteName.forceActiveFocus();
console.debug('CreateFavoriteDialog: ', avatar.thumbnailUrl); avatarImageUrl = thumbnail;
wearablesCount = wearables;
avatarImageUrl = avatar.thumbnailUrl;
wearablesCount = avatar.wearables.count;
visible = true; visible = true;
} }
@ -101,9 +99,9 @@ Rectangle {
anchors.right: parent.right anchors.right: parent.right
AvatarThumbnail { AvatarThumbnail {
imageUrl: avatarImageUrl avatarUrl: avatarImageUrl
onImageUrlChanged: { onAvatarUrlChanged: {
console.debug('CreateFavoritesDialog: imageUrlChanged: ', imageUrl); console.debug('CreateFavoritesDialog: onAvatarUrlChanged: ', avatarUrl);
} }
wearablesCount: avatarWearablesCount wearablesCount: avatarWearablesCount