integrate deleting favorite avatars with backend

This commit is contained in:
Alexander Ivash 2018-05-11 02:07:51 +03:00
parent 6ff397e9e0
commit 512e72d6d1
5 changed files with 66 additions and 63 deletions

View file

@ -79,6 +79,31 @@ Rectangle {
var avatarIndex = allAvatars.findAvatarIndex(selectedAvatarId);
allAvatars.move(avatarIndex, 0, 1);
view.setPage(0);
} else if(message.method === 'bookmarkDeleted') {
pageOfAvatars.isUpdating = true;
var index = pageOfAvatars.findAvatarIndex(message.name);
var absoluteIndex = view.currentPage * view.itemsPerPage + index
console.debug('removed ', absoluteIndex, 'view.currentPage', view.currentPage,
'view.itemsPerPage: ', view.itemsPerPage, 'index', index, 'pageOfAvatars', pageOfAvatars, 'pageOfAvatars.count', pageOfAvatars)
allAvatars.remove(absoluteIndex)
pageOfAvatars.remove(index);
var itemsOnPage = pageOfAvatars.count;
var newItemIndex = view.currentPage * view.itemsPerPage + itemsOnPage;
console.debug('newItemIndex: ', newItemIndex, 'allAvatars.count - 1: ', allAvatars.count - 1, 'pageOfAvatars.count:', pageOfAvatars.count);
if(newItemIndex <= (allAvatars.count - 1)) {
pageOfAvatars.append(allAvatars.get(newItemIndex));
} else {
if(!pageOfAvatars.hasGetAvatars())
pageOfAvatars.appendGetAvatars();
}
console.debug('removed ', absoluteIndex, 'newItemIndex: ', newItemIndex, 'allAvatars.count:', allAvatars.count, 'pageOfAvatars.count:', pageOfAvatars.count)
pageOfAvatars.isUpdating = false;
} else if(message.method === getAvatarsMethod) {
var getAvatarsReply = message.reply;
allAvatars.populate(getAvatarsReply.bookmarks);
@ -144,10 +169,6 @@ Rectangle {
console.debug('onSelectedAvatarChanged.selectedAvatar: ', JSON.stringify(selectedAvatar, null, '\t'));
}
function isEqualById(avatar, avatarId) {
return (avatar.name) === avatarId
}
property string avatarName: selectedAvatar ? selectedAvatar.name : ''
property string avatarUrl: selectedAvatar ? selectedAvatar.url : null
property int avatarWearablesCount: selectedAvatar ? selectedAvatar.wearables.count : 0
@ -525,28 +546,12 @@ Rectangle {
emitSendToScript({'method' : 'selectAvatar', 'name' : avatar.name})
}
function deleteAvatar(avatar) {
emitSendToScript({'method' : 'deleteAvatar', 'name' : avatar.name})
}
AvatarsModel {
id: allAvatars
function findAvatarIndex(avatarId) {
for(var i = 0; i < count; ++i) {
if(isEqualById(get(i), avatarId)) {
console.debug('avatar found by index: ', i)
return i;
}
}
return -1;
}
function findAvatar(avatarId) {
console.debug('AvatarsModel: find avatar by', avatarId);
var avatarIndex = findAvatarIndex(avatarId);
if(avatarIndex === -1)
return undefined;
return get(avatarIndex);
}
}
property int itemsPerPage: 8
@ -593,25 +598,12 @@ Rectangle {
pageOfAvatars.isUpdating = false;
}
model: ListModel {
model: AvatarsModel {
id: pageOfAvatars
property bool isUpdating: false;
property var getMoreAvatarsEntry: {'url' : '', 'name' : '', 'getMoreAvatars' : true}
function findAvatar(avatarId) {
console.debug('pageOfAvatars.findAvatar: ', avatarId);
for(var i = 0; i < count; ++i) {
if(isEqualById(get(i), avatarId)) {
console.debug('avatar found by index: ', i)
return i;
}
}
return -1;
}
function appendGetAvatars() {
append(getMoreAvatarsEntry);
}
@ -682,31 +674,7 @@ Rectangle {
if(isInManageState) {
var currentItem = delegateRoot.GridView.view.model.get(index);
popup.showDeleteFavorite(currentItem.name, function() {
pageOfAvatars.isUpdating = true;
console.debug('removing ', index)
var absoluteIndex = view.currentPage * view.itemsPerPage + index
console.debug('removed ', absoluteIndex, 'view.currentPage', view.currentPage,
'view.itemsPerPage: ', view.itemsPerPage, 'index', index, 'pageOfAvatars', pageOfAvatars, 'pageOfAvatars.count', pageOfAvatars)
allAvatars.remove(absoluteIndex)
pageOfAvatars.remove(index);
var itemsOnPage = pageOfAvatars.count;
var newItemIndex = view.currentPage * view.itemsPerPage + itemsOnPage;
console.debug('newItemIndex: ', newItemIndex, 'allAvatars.count - 1: ', allAvatars.count - 1, 'pageOfAvatars.count:', pageOfAvatars.count);
if(newItemIndex <= (allAvatars.count - 1)) {
pageOfAvatars.append(allAvatars.get(newItemIndex));
} else {
if(!pageOfAvatars.hasGetAvatars())
pageOfAvatars.appendGetAvatars();
}
console.debug('removed ', absoluteIndex, 'newItemIndex: ', newItemIndex, 'allAvatars.count:', allAvatars.count, 'pageOfAvatars.count:', pageOfAvatars.count)
pageOfAvatars.isUpdating = false;
view.deleteAvatar(currentItem);
});
} else {
if(delegateRoot.GridView.view.currentIndex !== index) {

View file

@ -31,4 +31,25 @@ ListModel {
append(avatarEntry);
}
}
function findAvatarIndex(avatarName) {
for(var i = 0; i < count; ++i) {
if(get(i).name === avatarName) {
console.debug('avatar found by index: ', i)
return i;
}
}
return -1;
}
function findAvatar(avatarName) {
console.debug('AvatarsModel: find avatar by', avatarName);
var avatarIndex = findAvatarIndex(avatarName);
if(avatarIndex === -1)
return undefined;
return get(avatarIndex);
}
}

View file

@ -134,6 +134,8 @@ void AvatarBookmarks::removeBookmark(const QString& bookmarkName) {
if (_bookmarksMenu->actions().count() == 0) {
enableMenuItems(false);
}
emit bookmarkDeleted(bookmarkName);
}
void AvatarBookmarks::updateAvatarEntities(const QVariantList &avatarEntities)

View file

@ -48,6 +48,7 @@ public slots:
signals:
void bookmarkLoaded(const QString& bookmarkName);
void bookmarkDeleted(const QString& bookmarkName);
protected:
void addBookmarkToMenu(Menu* menubar, const QString& name, const QVariant& bookmark) override;

View file

@ -128,6 +128,10 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See
console.debug('avatarapp.js: selecting avatar: ', message.name);
AvatarBookmarks.loadBookmark(message.name);
break;
case 'deleteAvatar':
console.debug('avatarapp.js: deleting avatar: ', message.name);
AvatarBookmarks.removeBookmark(message.name);
break;
case 'adjustWearablesOpened':
currentAvatarWearablesBackup = getMyAvatarWearables();
adjustWearables.setOpened(true);
@ -254,6 +258,11 @@ function onBookmarkLoaded(bookmarkName) {
sendToQml({'method' : 'bookmarkLoaded', 'reply' : {'name' : bookmarkName, 'currentAvatar' : currentAvatar} });
}
function onBookmarkDeleted(bookmarkName) {
console.debug('avatarapp.js: onBookmarkDeleted: ', bookmarkName);
sendToQml({'method' : 'bookmarkDeleted', 'name' : bookmarkName});
}
//
// Manage the connection between the button and the window.
//
@ -272,6 +281,7 @@ function startup() {
button.clicked.connect(onTabletButtonClicked);
tablet.screenChanged.connect(onTabletScreenChanged);
AvatarBookmarks.bookmarkLoaded.connect(onBookmarkLoaded);
AvatarBookmarks.bookmarkDeleted.connect(onBookmarkDeleted);
// Window.domainChanged.connect(clearLocalQMLDataAndClosePAL);
// Window.domainConnectionRefused.connect(clearLocalQMLDataAndClosePAL);
@ -373,6 +383,7 @@ function shutdown() {
tablet.removeButton(button);
tablet.screenChanged.disconnect(onTabletScreenChanged);
AvatarBookmarks.bookmarkLoaded.disconnect(onBookmarkLoaded);
AvatarBookmarks.bookmarkDeleted.disconnect(onBookmarkDeleted);
// Window.domainChanged.disconnect(clearLocalQMLDataAndClosePAL);
// Window.domainConnectionRefused.disconnect(clearLocalQMLDataAndClosePAL);