public override void Execute(object parameter)
{
patchModel.ClearQueryError();
AskUser.ConfirmationAsync("Patch Documents", "Are you sure you want to apply this patch to all selected documents?")
.ContinueWhenTrueInTheUIThread(() =>
{
var values = patchModel.GetValues();
if (values == null)
{
return;
}
var request = new ScriptedPatchRequest {
Script = patchModel.Script.CurrentSnapshot.Text, Values = values
};
var selectedItems = patchModel.QueryResults.ItemSelection.GetSelectedItems();
var commands = new ICommandData[selectedItems.Count()];
var counter = 0;
foreach (var item in selectedItems)
{
commands[counter] = new ScriptedPatchCommandData
{
Patch = request,
Key = item.Item.Id
};
counter++;
}
ApplicationModel.Database.Value.AsyncDatabaseCommands
.BatchAsync(commands)
.ContinueOnUIThread(t => { if (t.IsFaulted)
{
patchModel.HandlePatchError(t.Exception);
}
})
.ContinueOnSuccessInTheUIThread(() => ApplicationModel.Database.Value
.AsyncDatabaseCommands
.GetAsync(patchModel.SelectedItem)
.ContinueOnSuccessInTheUIThread(doc =>
{
if (doc != null)
{
patchModel.OriginalDoc.SetText(doc.ToJson().ToString());
patchModel.NewDoc.SetText("");
patchModel.ShowAfterPrompt = true;
}
else
{
patchModel.OriginalDoc.SetText("");
patchModel.NewDoc.SetText("");
patchModel.ShowAfterPrompt = true;
patchModel.ShowBeforeAndAfterPrompt = true;
}
}));
});
}