From 5381dce8d819c34c91bc830f0affba13a9b256c5 Mon Sep 17 00:00:00 2001 From: Alexander Ivash Date: Fri, 25 May 2018 04:22:32 +0300 Subject: [PATCH] get rid of 'isExternal' due to changes requirements show avatar thumbnail if url was specified & valid, show 'guy-in-circle' otherwise --- interface/resources/qml/hifi/AvatarApp.qml | 40 ++++++++++++++----- .../qml/hifi/avatarapp/AvatarThumbnail.qml | 21 +++++++++- .../qml/hifi/avatarapp/AvatarsModel.qml | 35 ++++------------ .../hifi/avatarapp/CreateFavoriteDialog.qml | 14 +++---- 4 files changed, 61 insertions(+), 49 deletions(-) diff --git a/interface/resources/qml/hifi/AvatarApp.qml b/interface/resources/qml/hifi/AvatarApp.qml index 5ec30465d7..4c7111664a 100644 --- a/interface/resources/qml/hifi/AvatarApp.qml +++ b/interface/resources/qml/hifi/AvatarApp.qml @@ -109,9 +109,10 @@ Rectangle { currentAvatar.avatarScale = message.value; updateCurrentAvatarInBookmarks(currentAvatar); } else if(message.method === 'externalAvatarApplied') { - currentAvatar.isExternal = true; - currentAvatar.name = allAvatars.encodedName('', true); - currentAvatar.thumbnailUrl = externalAvatarThumbnailUrl.toString(); + console.debug('externalAvatarApplied...'); + currentAvatar.avatarUrl = message.avatarURL; + currentAvatar.thumbnailUrl = allAvatars.makeThumbnailUrl(message.avatarURL); + console.debug('externalAvatarApplied: ', currentAvatar.avatarUrl, currentAvatar.thumbnailUrl); updateCurrentAvatarInBookmarks(currentAvatar); } else if(message.method === 'settingChanged') { currentAvatarSettings[message.name] = message.value; @@ -340,11 +341,25 @@ Rectangle { anchors.left: displayNameLabel.left anchors.top: displayNameLabel.bottom anchors.topMargin: 31 - source: avatarUrl - visible: avatarImage.status !== Image.Loading + Binding on source { + when: avatarUrl !== '' + value: avatarUrl + } + onSourceChanged: { + console.debug('avatarImage: source = ', source); + } + + visible: avatarImage.status !== Image.Loading && avatarImage.status !== Image.Error fillMode: Image.PreserveAspectCrop } + ShadowImage { + id: customAvatarImage + anchors.fill: avatarImage; + visible: avatarUrl === '' || avatarImage.status === Image.Error + source: externalAvatarThumbnailUrl + } + ShadowRectangle { anchors.fill: avatarImage; color: 'white' @@ -407,14 +422,17 @@ Rectangle { } entry.avatarEntites = wearables; - currentAvatar.name = allAvatars.encodedName(createFavorite.favoriteNameText, currentAvatar.isExternal); + currentAvatar.name = createFavorite.favoriteNameText; console.debug('became: ', JSON.stringify(entry, 0, 4)); emitSendToScript({'method': 'addAvatar', 'name' : currentAvatar.name}); 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 function selectAvatar(avatar) { - emitSendToScript({'method' : 'selectAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)}) + emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name}) } function deleteAvatar(avatar) { - emitSendToScript({'method' : 'deleteAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)}) + emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name}) } AvatarsModel { id: allAvatars - externalAvatarThumbnailUrl: root.externalAvatarThumbnailUrl } property int itemsPerPage: 8 @@ -676,7 +693,8 @@ Rectangle { AvatarThumbnail { id: favoriteAvatarImage - imageUrl: thumbnailUrl + externalAvatarThumbnailUrl: root.externalAvatarThumbnailUrl + avatarUrl: thumbnailUrl border.color: container.highlighted ? style.colors.blueHighlight : 'transparent' border.width: container.highlighted ? 4 : 0 wearablesCount: { diff --git a/interface/resources/qml/hifi/avatarapp/AvatarThumbnail.qml b/interface/resources/qml/hifi/avatarapp/AvatarThumbnail.qml index d9b0f7b492..970d132ba6 100644 --- a/interface/resources/qml/hifi/avatarapp/AvatarThumbnail.qml +++ b/interface/resources/qml/hifi/avatarapp/AvatarThumbnail.qml @@ -15,15 +15,32 @@ Item { property alias dropShadowHorizontalOffset: avatarImage.dropShadowHorizontalOffset property alias dropShadowVerticalOffset: avatarImage.dropShadowVerticalOffset - property alias imageUrl: avatarImage.source + property url externalAvatarThumbnailUrl; + property var avatarUrl; property alias border: avatarImage.border ShadowImage { id: avatarImage anchors.fill: parent - visible: status !== Image.Loading radius: 5 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 { diff --git a/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml b/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml index f69a82abcd..8ba030b36e 100644 --- a/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml +++ b/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml @@ -2,8 +2,6 @@ import QtQuick 2.9 ListModel { id: model - property url externalAvatarThumbnailUrl; - 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})'; @@ -27,39 +25,21 @@ ListModel { } 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" - .split('%marketId%').join(extractMarketId(avatarUrl)); + .split('%marketId%').join(marketId); 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) { 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); - console.debug('isExternal:', isExternal, 'avatarThumbnailUrl:', avatarThumbnailUrl, 'externalAvatarThumbnailUrl:', externalAvatarThumbnailUrl); + var avatarThumbnailUrl = makeThumbnailUrl(avatar.avatarUrl); + console.debug('avatarThumbnailUrl:', avatarThumbnailUrl); return { 'name' : avatarName, @@ -69,7 +49,6 @@ ListModel { 'wearables' : avatar.avatarEntites ? avatar.avatarEntites : [], 'attachments' : avatar.attachments ? avatar.attachments : [], 'entry' : avatar, - 'isExternal' : isExternal, 'getMoreAvatars' : false }; diff --git a/interface/resources/qml/hifi/avatarapp/CreateFavoriteDialog.qml b/interface/resources/qml/hifi/avatarapp/CreateFavoriteDialog.qml index a614567d18..a8857c3fdb 100644 --- a/interface/resources/qml/hifi/avatarapp/CreateFavoriteDialog.qml +++ b/interface/resources/qml/hifi/avatarapp/CreateFavoriteDialog.qml @@ -25,14 +25,12 @@ Rectangle { property var onSaveClicked; property var onCancelClicked; - function open(avatar) { + function open(wearables, thumbnail) { favoriteName.text = ''; favoriteName.forceActiveFocus(); - console.debug('CreateFavoriteDialog: ', avatar.thumbnailUrl); - - avatarImageUrl = avatar.thumbnailUrl; - wearablesCount = avatar.wearables.count; + avatarImageUrl = thumbnail; + wearablesCount = wearables; visible = true; } @@ -101,9 +99,9 @@ Rectangle { anchors.right: parent.right AvatarThumbnail { - imageUrl: avatarImageUrl - onImageUrlChanged: { - console.debug('CreateFavoritesDialog: imageUrlChanged: ', imageUrl); + avatarUrl: avatarImageUrl + onAvatarUrlChanged: { + console.debug('CreateFavoritesDialog: onAvatarUrlChanged: ', avatarUrl); } wearablesCount: avatarWearablesCount