diff --git a/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml b/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml index bfd66f1a30..012cfc3b79 100644 --- a/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml +++ b/interface/resources/qml/hifi/avatarapp/AvatarsModel.qml @@ -21,17 +21,47 @@ ListModel { return marketItemUrl; } + + function makeMarketThumbnailUrl(marketId) { + var avatarThumbnailUrl = "https://hifi-metaverse.s3-us-west-1.amazonaws.com/marketplace/previews/%marketId%/large/hifi-mp-%marketId%.jpg" + .split('%marketId%').join(marketId); + + return avatarThumbnailUrl; + } + + function trimFileExtension(url) { + var trimmedUrl = url.substring(0, (url.indexOf("#") === -1) ? url.length : url.indexOf("#")); + trimmedUrl = trimmedUrl.substring(0, (trimmedUrl.indexOf("?") === -1) ? trimmedUrl.length : trimmedUrl.indexOf("?")); + trimmedUrl = trimmedUrl.substring(0, trimmedUrl.lastIndexOf(".")); + + return trimmedUrl; + } + + function imageExists(imageUrl) { + + var http = new XMLHttpRequest(); + + http.open('HEAD', imageUrl, false); + http.send(); + + return http.status !== 404; + + } function makeThumbnailUrl(avatarUrl) { var marketId = extractMarketId(avatarUrl); - if (marketId === '') { + if (marketId !== '') { + return makeMarketThumbnailUrl(marketId); + } + + var avatarThumbnailFileUrl = trimFileExtension(avatarUrl) + ".jpg"; + var thumbnailExist = imageExists(avatarThumbnailFileUrl); + + if (!thumbnailExist) { return ''; } - - var avatarThumbnailUrl = "https://hifi-metaverse.s3-us-west-1.amazonaws.com/marketplace/previews/%marketId%/large/hifi-mp-%marketId%.jpg" - .split('%marketId%').join(marketId); - - return avatarThumbnailUrl; + + return avatarThumbnailFileUrl; } function makeAvatarObject(avatar, avatarName) {