From 8489ef5ec0f1fae7a7f3947fe5b50b6eef18b76e Mon Sep 17 00:00:00 2001
From: Stefan Zermatten
Date: Mon, 11 Feb 2019 13:04:14 +0200
Subject: [PATCH] Fixed restoring characters not working correctly for sub
documents
---
.../views/characterList/characterList.js | 12 +---------
.../characterRestoreDialog.html | 3 +++
.../characterRestoreDialog.js | 21 ++++++++++++++++--
app/lib/functions/backupRestoreCharacter.js | 22 ++++++++++++++++---
4 files changed, 42 insertions(+), 16 deletions(-)
diff --git a/app/client/views/characterList/characterList.js b/app/client/views/characterList/characterList.js
index 53f6940b..f1113243 100644
--- a/app/client/views/characterList/characterList.js
+++ b/app/client/views/characterList/characterList.js
@@ -86,17 +86,7 @@ Template.characterList.events({
template: "characterRestoreDialog",
element: event.currentTarget,
callback(dump){
- if (!dump) return;
- dump.character.name += " - Restored"
- dump.character.owner = Meteor.userId();
- dump.character.readers = [];
- dump.character.writers = [];
- giveCharacterDumpNewIds(dump);
- restoreCharacter(dump);
- Router.go("characterSheet", {
- _id: dump.character._id,
- urlName: dump.character.urlName || '-',
- });
+ return;
},
})
},
diff --git a/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.html b/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.html
index d37292cb..5ff68c04 100644
--- a/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.html
+++ b/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.html
@@ -17,6 +17,9 @@
{{error}}
{{/if}}
+ {{#if loading}}
+
+ {{/if}}
diff --git a/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.js b/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.js
index 560a2429..ebc6a4dd 100644
--- a/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.js
+++ b/app/client/views/characterList/characterRestoreDialog/characterRestoreDialog.js
@@ -2,14 +2,18 @@ Template.characterRestoreDialog.onCreated(function(){
this.dump = {};
this.valid = new ReactiveVar(false);
this.error = new ReactiveVar(null);
+ this.loading = new ReactiveVar(false);
});
Template.characterRestoreDialog.helpers({
invalid(){
return !Template.instance().valid.get();
},
- error(){
+ error(){
return Template.instance().error.get();
+ },
+ loading(){
+ return Template.instance().loading.get();
},
});
@@ -44,6 +48,19 @@ Template.characterRestoreDialog.events({
popDialogStack();
},
"click .addButton": function(event, instance){
- popDialogStack(instance.dump);
+ let dump = instance.dump;
+ if (!dump) return;
+ Meteor.call('restoreCharacter', dump, (e, char) => {
+ instance.loading.set(false);
+ if (!char){
+ instance.error.set(e.message)
+ } else {
+ popDialogStack();
+ Router.go("characterSheet", {
+ _id: char._id,
+ urlName: char.urlName || '-',
+ });
+ }
+ });
},
});
diff --git a/app/lib/functions/backupRestoreCharacter.js b/app/lib/functions/backupRestoreCharacter.js
index 9863d12f..31fced03 100644
--- a/app/lib/functions/backupRestoreCharacter.js
+++ b/app/lib/functions/backupRestoreCharacter.js
@@ -73,11 +73,27 @@ giveCharacterDumpNewIds = function(characterDump){
}
restoreCharacter = function(characterDump){
- Characters.insert(characterDump.character);
+ Characters.direct.insert(characterDump.character);
for (collectionName in characterDump.collections){
let collection = Meteor.Collection.get(collectionName);
- for (doc in characterDump[collectionName]){
- collection.insert(doc);
+ for (doc of characterDump.collections[collectionName]){
+ // delete problematic keys that shouldn't ever be available on insert
+ delete doc.restoredAt;
+ delete doc.restoredBy;
+ // Insert the doc with no hooks
+ collection.direct.insert(doc);
}
}
};
+
+Meteor.methods({
+ restoreCharacter(characterDump){
+ characterDump.character.name += " - Restored"
+ characterDump.character.owner = Meteor.userId();
+ characterDump.character.readers = [];
+ characterDump.character.writers = [];
+ giveCharacterDumpNewIds(characterDump);
+ restoreCharacter(characterDump);
+ return characterDump.character
+ },
+});