mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 17:41:12 +02:00
external avatars support
This commit is contained in:
parent
856c95b52a
commit
91e1714b0e
4 changed files with 56 additions and 5 deletions
|
@ -46,6 +46,8 @@ Rectangle {
|
||||||
console.debug('currentAvatar.wearables: ', currentAvatar.wearables);
|
console.debug('currentAvatar.wearables: ', currentAvatar.wearables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property url externalAvatarThumbnailUrl: '../../images/avatarapp/AvatarApp_Favorite_Elements_NoPicture.svg'
|
||||||
|
|
||||||
function fromScript(message) {
|
function fromScript(message) {
|
||||||
console.debug('AvatarApp.qml: fromScript: ', JSON.stringify(message, null, '\t'))
|
console.debug('AvatarApp.qml: fromScript: ', JSON.stringify(message, null, '\t'))
|
||||||
|
|
||||||
|
@ -76,6 +78,11 @@ Rectangle {
|
||||||
} else if(message.method === 'scaleChanged') {
|
} else if(message.method === 'scaleChanged') {
|
||||||
currentAvatar.avatarScale = message.value;
|
currentAvatar.avatarScale = message.value;
|
||||||
updateCurrentAvatarInBookmarks(currentAvatar);
|
updateCurrentAvatarInBookmarks(currentAvatar);
|
||||||
|
} else if(message.method === 'externalAvatarApplied') {
|
||||||
|
currentAvatar.isExternal = true;
|
||||||
|
currentAvatar.name = allAvatars.encodedName('', true);
|
||||||
|
currentAvatar.thumbnailUrl = externalAvatarThumbnailUrl.toString();
|
||||||
|
updateCurrentAvatarInBookmarks(currentAvatar);
|
||||||
} else if(message.method === 'settingChanged') {
|
} else if(message.method === 'settingChanged') {
|
||||||
currentAvatarSettings[message.name] = message.value;
|
currentAvatarSettings[message.name] = message.value;
|
||||||
} else if(message.method === 'changeSettings') {
|
} else if(message.method === 'changeSettings') {
|
||||||
|
@ -332,8 +339,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
entry.avatarEntites = wearables;
|
entry.avatarEntites = wearables;
|
||||||
currentAvatar.name = createFavorite.favoriteNameText;
|
currentAvatar.name = allAvatars.encodedName(createFavorite.favoriteNameText, currentAvatar.isExternal);
|
||||||
|
|
||||||
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});
|
||||||
|
@ -374,6 +380,8 @@ Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
onClicked: {
|
onClicked: {
|
||||||
popup.showSpecifyAvatarUrl(function() {
|
popup.showSpecifyAvatarUrl(function() {
|
||||||
|
var url = popup.inputText.text;
|
||||||
|
emitSendToScript({'method' : 'applyExternalAvatar', 'avatarURL' : url})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -509,15 +517,16 @@ Rectangle {
|
||||||
property int verticalSpacing: 44
|
property int verticalSpacing: 44
|
||||||
|
|
||||||
function selectAvatar(avatar) {
|
function selectAvatar(avatar) {
|
||||||
emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
|
emitSendToScript({'method' : 'selectAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)})
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteAvatar(avatar) {
|
function deleteAvatar(avatar) {
|
||||||
emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name})
|
emitSendToScript({'method' : 'deleteAvatar', 'name' : allAvatars.encodedName(avatar.name, avatar.isExternal)})
|
||||||
}
|
}
|
||||||
|
|
||||||
AvatarsModel {
|
AvatarsModel {
|
||||||
id: allAvatars
|
id: allAvatars
|
||||||
|
externalAvatarThumbnailUrl: root.externalAvatarThumbnailUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
property int itemsPerPage: 8
|
property int itemsPerPage: 8
|
||||||
|
|
|
@ -2,6 +2,7 @@ import QtQuick 2.9
|
||||||
|
|
||||||
ListModel {
|
ListModel {
|
||||||
id: model
|
id: model
|
||||||
|
property url externalAvatarThumbnailUrl;
|
||||||
|
|
||||||
function makeThumbnailUrl(avatarUrl) {
|
function makeThumbnailUrl(avatarUrl) {
|
||||||
var splittedUrl = avatarUrl.split('/');
|
var splittedUrl = avatarUrl.split('/');
|
||||||
|
@ -16,9 +17,33 @@ ListModel {
|
||||||
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 avatarThumbnailUrl = makeThumbnailUrl(avatar.avatarUrl);
|
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);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'name' : avatarName,
|
'name' : avatarName,
|
||||||
|
@ -27,6 +52,7 @@ 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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,17 @@ MessageBox {
|
||||||
'(“.fst” extension) here. <a href="#">Learn to make a custom avatar by opening this link on your desktop.</a>'
|
'(“.fst” extension) here. <a href="#">Learn to make a custom avatar by opening this link on your desktop.</a>'
|
||||||
popup.inputText.visible = true;
|
popup.inputText.visible = true;
|
||||||
popup.inputText.placeholderText = 'Enter Avatar Url';
|
popup.inputText.placeholderText = 'Enter Avatar Url';
|
||||||
|
popup.inputText.forceActiveFocus();
|
||||||
popup.button1text = 'CANCEL';
|
popup.button1text = 'CANCEL';
|
||||||
popup.button2text = 'CONFIRM';
|
popup.button2text = 'CONFIRM';
|
||||||
|
|
||||||
|
popup.onButton2Clicked = function() {
|
||||||
|
if(callback)
|
||||||
|
callback();
|
||||||
|
|
||||||
|
popup.close();
|
||||||
|
}
|
||||||
|
|
||||||
popup.open();
|
popup.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -235,6 +235,14 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
|
||||||
UserActivityLogger.palAction("display_name_change", message.displayName);
|
UserActivityLogger.palAction("display_name_change", message.displayName);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'applyExternalAvatar':
|
||||||
|
console.debug('avatarapp.js: applyExternalAvatar: ', message.avatarURL);
|
||||||
|
var currentAvatarURL = MyAvatar.getFullAvatarURLFromPreferences();
|
||||||
|
if(currentAvatarURL !== message.avatarURL) {
|
||||||
|
MyAvatar.useFullAvatarURL(message.avatarURL);
|
||||||
|
sendToQml({'method' : 'externalAvatarApplied', 'avatarURL' : message.avatarURL})
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'navigate':
|
case 'navigate':
|
||||||
console.debug('avatarapp.js: navigate: ', message.url);
|
console.debug('avatarapp.js: navigate: ', message.url);
|
||||||
if(message.url.indexOf('app://') === 0) {
|
if(message.url.indexOf('app://') === 0) {
|
||||||
|
|
Loading…
Reference in a new issue