mirror of
https://github.com/lubosz/overte.git
synced 2025-04-23 20:34:07 +02:00
simplify code a bit
explicite store attachments in model use models for comparison instead JS Objects
This commit is contained in:
parent
47ffcf8c42
commit
fe8bb3c8ea
3 changed files with 82 additions and 42 deletions
|
@ -31,12 +31,20 @@ Rectangle {
|
|||
|
||||
property var jointNames;
|
||||
|
||||
property string avatarName: currentAvatar ? currentAvatar.name : ''
|
||||
property string avatarUrl: currentAvatar ? currentAvatar.url : null
|
||||
property bool isAvatarInFavorites: currentAvatar ? allAvatars.findAvatar(currentAvatar.name) !== undefined : false
|
||||
property int avatarWearablesCount: currentAvatar ? currentAvatar.wearables.count : 0
|
||||
property var currentAvatar: null;
|
||||
function setCurrentAvatar(avatar) {
|
||||
|
||||
var avatarThumbnailUrl = allAvatars.makeThumbnailUrl(avatar.avatarUrl);
|
||||
var currentAvatarObject = {
|
||||
'name' : '',
|
||||
'url' : allAvatars.makeThumbnailUrl(avatar.avatarUrl),
|
||||
'scale' : avatar.avatarScale,
|
||||
'url' : avatarThumbnailUrl,
|
||||
'wearables' : avatar.avatarEntites ? avatar.avatarEntites : [],
|
||||
'attachments' : avatar.attachments ? avatar.attachments : [],
|
||||
'entry' : avatar,
|
||||
'getMoreAvatars' : false
|
||||
};
|
||||
|
@ -72,11 +80,11 @@ Rectangle {
|
|||
console.debug('wearable: ', wearablesModel.get(i).properties.id);
|
||||
}
|
||||
|
||||
adjustWearables.refresh(root.currentAvatar);
|
||||
adjustWearables.refresh(currentAvatar);
|
||||
} else if(message.method === 'bookmarkLoaded') {
|
||||
setCurrentAvatar(message.reply.currentAvatar);
|
||||
selectedAvatarId = message.reply.name;
|
||||
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
|
||||
selectedAvatarName = message.reply.name;
|
||||
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarName);
|
||||
allAvatars.move(avatarIndex, 0, 1);
|
||||
view.setPage(0);
|
||||
} else if(message.method === 'bookmarkDeleted') {
|
||||
|
@ -110,38 +118,33 @@ Rectangle {
|
|||
setCurrentAvatar(getAvatarsReply.currentAvatar);
|
||||
|
||||
console.debug('currentAvatar: ', JSON.stringify(currentAvatar, null, '\t'));
|
||||
var bookmarkAvatarIndex = allAvatars.findAvatarIndexByValue(currentAvatar);
|
||||
|
||||
if(bookmarkAvatarIndex === -1) {
|
||||
console.debug('bookmarkAvatarIndex = -1, avatar is not favorite')
|
||||
selectedAvatar = root.currentAvatar;
|
||||
view.setPage(0);
|
||||
|
||||
console.debug('selectedAvatar = ', JSON.stringify(selectedAvatar, null, '\t'))
|
||||
} else {
|
||||
view.selectAvatar(allAvatars.get(bookmarkAvatarIndex));
|
||||
}
|
||||
updateCurrentAvatarInBookmarks(currentAvatar);
|
||||
} else if(message.method === 'selectAvatarEntity') {
|
||||
adjustWearables.selectWearableByID(message.entityID);
|
||||
}
|
||||
}
|
||||
|
||||
property string selectedAvatarId: ''
|
||||
onSelectedAvatarIdChanged: {
|
||||
console.debug('selectedAvatarId: ', selectedAvatarId)
|
||||
selectedAvatar = allAvatars.findAvatar(selectedAvatarId);
|
||||
function updateCurrentAvatarInBookmarks(avatar) {
|
||||
var bookmarkAvatarIndex = allAvatars.findAvatarIndexByValue(avatar);
|
||||
|
||||
if(bookmarkAvatarIndex === -1) {
|
||||
console.debug('bookmarkAvatarIndex = -1, avatar is not favorite')
|
||||
avatar.name = '';
|
||||
selectedAvatarName = '';
|
||||
view.setPage(0);
|
||||
} else {
|
||||
console.debug('bookmarkAvatarIndex = ', bookmarkAvatarIndex, 'avatar is among favorites!')
|
||||
var bookmarkAvatar = allAvatars.get(bookmarkAvatarIndex);
|
||||
avatar.name = bookmarkAvatar.name;
|
||||
view.selectAvatar(bookmarkAvatar);
|
||||
}
|
||||
}
|
||||
|
||||
property var selectedAvatar;
|
||||
onSelectedAvatarChanged: {
|
||||
console.debug('onSelectedAvatarChanged.selectedAvatar: ', JSON.stringify(selectedAvatar, null, '\t'));
|
||||
property string selectedAvatarName: ''
|
||||
onSelectedAvatarNameChanged: {
|
||||
console.debug('selectedAvatarId: ', selectedAvatarName)
|
||||
}
|
||||
|
||||
property string avatarName: selectedAvatar ? selectedAvatar.name : ''
|
||||
property string avatarUrl: selectedAvatar ? selectedAvatar.url : null
|
||||
property int avatarWearablesCount: selectedAvatar ? selectedAvatar.wearables.count : 0
|
||||
property bool isAvatarInFavorites: selectedAvatar ? allAvatars.findAvatar(selectedAvatar.name) !== undefined : false
|
||||
|
||||
property bool isInManageState: false
|
||||
|
||||
Component.onCompleted: {
|
||||
|
@ -214,6 +217,9 @@ Rectangle {
|
|||
}
|
||||
onAdjustWearablesClosed: {
|
||||
emitSendToScript({'method' : 'adjustWearablesClosed', 'save' : status, 'avatarName' : avatarName});
|
||||
if(status) {
|
||||
updateCurrentAvatarInBookmarks(currentAvatar);
|
||||
}
|
||||
}
|
||||
onWearableSelected: {
|
||||
emitSendToScript({'method' : 'selectWearable', 'entityID' : id});
|
||||
|
@ -340,16 +346,28 @@ Rectangle {
|
|||
enabled: !isAvatarInFavorites
|
||||
anchors.fill: star
|
||||
onClicked: {
|
||||
console.debug('selectedAvatar.url', selectedAvatar.url)
|
||||
createFavorite.onSaveClicked = function() {
|
||||
var newAvatar = JSON.parse(JSON.stringify(selectedAvatar));
|
||||
var entry = currentAvatar.entry;
|
||||
console.debug('was: ', JSON.stringify(entry, 0, 4));
|
||||
|
||||
var wearables = [];
|
||||
for(var i = 0; i < currentAvatar.wearables.count; ++i) {
|
||||
wearables.push(currentAvatar.wearables.get(i));
|
||||
}
|
||||
|
||||
entry.avatarEntites = wearables;
|
||||
console.debug('became: ', JSON.stringify(entry, 0, 4));
|
||||
|
||||
/*
|
||||
var newAvatar = JSON.parse(JSON.stringify(currentAvatar));
|
||||
newAvatar.name = createFavorite.favoriteNameText;
|
||||
allAvatars.append(newAvatar);
|
||||
view.selectAvatar(newAvatar);
|
||||
*/
|
||||
createFavorite.close();
|
||||
}
|
||||
|
||||
createFavorite.open(selectedAvatar);
|
||||
createFavorite.open(root.currentAvatar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -505,7 +523,7 @@ Rectangle {
|
|||
id: view
|
||||
anchors.fill: parent
|
||||
interactive: false;
|
||||
currentIndex: (selectedAvatarId !== '' && !pageOfAvatars.isUpdating) ? pageOfAvatars.findAvatarIndex(selectedAvatarId) : -1
|
||||
currentIndex: (selectedAvatarName !== '' && !pageOfAvatars.isUpdating) ? pageOfAvatars.findAvatarIndex(selectedAvatarName) : -1
|
||||
|
||||
property int horizontalSpacing: 18
|
||||
property int verticalSpacing: 44
|
||||
|
@ -532,7 +550,7 @@ Rectangle {
|
|||
onCurrentPageChanged: {
|
||||
console.debug('currentPage: ', currentPage)
|
||||
currentIndex = Qt.binding(function() {
|
||||
return (selectedAvatarId !== '' && !pageOfAvatars.isUpdating) ? pageOfAvatars.findAvatar(selectedAvatarId) : -1
|
||||
return (selectedAvatarName !== '' && !pageOfAvatars.isUpdating) ? pageOfAvatars.findAvatar(selectedAvatarName) : -1
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -18,13 +18,16 @@ ListModel {
|
|||
|
||||
function populate(bookmarks) {
|
||||
for(var avatarName in bookmarks) {
|
||||
var avatarThumbnailUrl = makeThumbnailUrl(bookmarks[avatarName].avatarUrl);
|
||||
var avatar = bookmarks[avatarName];
|
||||
var avatarThumbnailUrl = makeThumbnailUrl(avatar.avatarUrl);
|
||||
|
||||
var avatarEntry = {
|
||||
'name' : avatarName,
|
||||
'scale' : avatar.avatarScale,
|
||||
'url' : avatarThumbnailUrl,
|
||||
'wearables' : bookmarks[avatarName].avatarEntites ? bookmarks[avatarName].avatarEntites : [],
|
||||
'entry' : bookmarks[avatarName],
|
||||
'wearables' : avatar.avatarEntites ? avatar.avatarEntites : [],
|
||||
'attachments' : avatar.attachments ? avatar.attachments : [],
|
||||
'entry' : avatar,
|
||||
'getMoreAvatars' : false
|
||||
};
|
||||
|
||||
|
@ -52,6 +55,25 @@ ListModel {
|
|||
return true;
|
||||
}
|
||||
|
||||
function modelsAreEqual(m1, m2, comparer) {
|
||||
if(m1.count !== m2.count) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for(var i = 0; i < m1.count; ++i) {
|
||||
var e1 = m1.get(i);
|
||||
var e2 = m2.get(i);
|
||||
|
||||
console.debug('comparing ', JSON.stringify(e1), JSON.stringify(e2));
|
||||
|
||||
if(!comparer(e1, e2)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function compareArrays(a1, a2, props) {
|
||||
for(var prop in props) {
|
||||
if(JSON.stringify(a1[prop]) !== JSON.stringify(a2[prop])) {
|
||||
|
@ -73,25 +95,25 @@ ListModel {
|
|||
function findAvatarIndexByValue(avatar) {
|
||||
|
||||
var index = -1;
|
||||
var avatarObject = avatar.entry;
|
||||
console.debug('findAvatarIndexByValue: ', JSON.stringify(avatar));
|
||||
|
||||
// 2DO: find better way of determining selected avatar in bookmarks
|
||||
console.debug('allAvatars.count: ', allAvatars.count);
|
||||
for(var i = 0; i < allAvatars.count; ++i) {
|
||||
var thesame = true;
|
||||
var bookmarkedAvatarObject = allAvatars.get(i).entry;
|
||||
var bookmarkedAvatar = allAvatars.get(i);
|
||||
|
||||
if(bookmarkedAvatarObject.avatarUrl !== avatarObject.avatarUrl)
|
||||
if(bookmarkedAvatar.avatarUrl !== avatar.avatarUrl)
|
||||
continue;
|
||||
|
||||
if(bookmarkedAvatarObject.avatarScale !== avatarObject.avatarScale)
|
||||
if(bookmarkedAvatar.avatarScale !== avatar.avatarScale)
|
||||
continue;
|
||||
|
||||
if(!arraysAreEqual(bookmarkedAvatarObject.attachments, avatarObject.attachments, compareAttachments)) {
|
||||
if(!modelsAreEqual(bookmarkedAvatar.attachments, avatar.attachments, compareAttachments)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!arraysAreEqual(bookmarkedAvatarObject.avatarEntities, avatarObject.avatarEntities, compareWearables)) {
|
||||
if(!modelsAreEqual(bookmarkedAvatar.wearables, avatar.wearables, compareWearables)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ Rectangle {
|
|||
function open(avatar) {
|
||||
favoriteName.text = '';
|
||||
avatarImageUrl = avatar.url;
|
||||
wearablesCount = avatar.wearables !== '' ? avatar.wearables.split('|').length : 0;
|
||||
wearablesCount = avatar.wearables.count;
|
||||
|
||||
visible = true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue