public override void Execute(object parameter)
{
AskUser.ConfirmationAsync("Patch Documents", "Are you sure you want to apply this patch to all matching documents?")
.ContinueWhenTrueInTheUIThread(() =>
{
var values = patchModel.GetValues();
if (values == null)
{
return;
}
var request = new ScriptedPatchRequest {
Script = patchModel.Script.CurrentSnapshot.Text, Values = values
};
switch (patchModel.PatchOn)
{
case PatchOnOptions.Document:
var commands = new ICommandData[1];
commands[0] = new ScriptedPatchCommandData
{
Patch = request,
Key = patchModel.SelectedItem
};
ApplicationModel.Database.Value.AsyncDatabaseCommands.BatchAsync(commands).Catch().
ContinueOnSuccessInTheUIThread(
() => ApplicationModel.Database.Value.AsyncDatabaseCommands.GetAsync(patchModel.SelectedItem).
ContinueOnSuccessInTheUIThread(
doc =>
{
patchModel.OriginalDoc.SetText(doc.ToJson().ToString());
patchModel.NewDoc.SetText("");
patchModel.ShowAfterPrompt = true;
}));
break;
case PatchOnOptions.Collection:
ApplicationModel.Database.Value.AsyncDatabaseCommands.UpdateByIndex(PatchModel.CollectionsIndex,
new IndexQuery {
Query = "Tag:" + patchModel.SelectedItem
}, request)
.ContinueOnSuccessInTheUIThread(() => patchModel.UpdateCollectionSource())
.Catch();
break;
case PatchOnOptions.Index:
ApplicationModel.Database.Value.AsyncDatabaseCommands.UpdateByIndex(patchModel.SelectedItem, new IndexQuery()
{
Query = patchModel.QueryDoc.CurrentSnapshot.Text
},
request)
.ContinueOnSuccessInTheUIThread(() => patchModel.UpdateCollectionSource())
.Catch();
break;
}
});
}