in source/uwp/Visualizer/ViewModel/DocumentViewModel.cs [49:203]
protected override async void LoadPayload(string payload)
{
var newErrors = await PayloadValidator.ValidateAsync(payload);
if (newErrors.Any(i => i.Type == ErrorViewModelType.Error))
{
errors = newErrors;
TimeCounter.ResetCounter();
return;
}
try
{
if (_renderer == null)
{
InitializeRenderer(MainPageViewModel.HostConfigEditor.HostConfig);
}
}
catch (Exception ex)
{
newErrors.Add(new ErrorViewModel()
{
Message = "Initializing renderer error: " + ex.ToString(),
Type = ErrorViewModelType.Error
});
errors = newErrors;
TimeCounter.ResetCounter();
return;
}
try
{
JsonObject jsonObject;
if (JsonObject.TryParse(payload, out jsonObject))
{
AdaptiveElementParserRegistration reg = new AdaptiveElementParserRegistration();
reg.Set(CSharpKeywordInput.customInputType, new CustomInputParser());
AdaptiveCardParseResult parseResult = AdaptiveCard.FromJson(jsonObject, reg, new AdaptiveActionParserRegistration());
_renderer.ElementRenderers.Set(CSharpKeywordInput.customInputType, new CustomInputRenderer());
_renderedAdaptiveCard = _renderer.RenderAdaptiveCard(parseResult.AdaptiveCard);
if (_renderedAdaptiveCard.FrameworkElement != null)
{
RenderedCard = _renderedAdaptiveCard.FrameworkElement;
_renderedAdaptiveCard.Action += async (sender, e) =>
{
var m_actionDialog = new ContentDialog();
if (e.Action.ActionType == ActionType.ShowCard)
{
AdaptiveShowCardAction showCardAction = (AdaptiveShowCardAction)e.Action;
RenderedAdaptiveCard renderedShowCard = _renderer.RenderAdaptiveCard(showCardAction.Card);
if (renderedShowCard.FrameworkElement != null)
{
m_actionDialog.Content = renderedShowCard.FrameworkElement;
}
}
else
{
m_actionDialog.Content = SerializeActionEventArgsToString(e);
}
m_actionDialog.PrimaryButtonText = "Close";
await m_actionDialog.ShowAsync();
};
if (!MainPageViewModel.HostConfigEditor.HostConfig.Media.AllowInlinePlayback)
{
_renderedAdaptiveCard.MediaClicked += async (sender, e) =>
{
var onPlayDialog = new ContentDialog();
onPlayDialog.Content = "MediaClickedEvent:";
foreach (var source in e.Media.Sources)
{
onPlayDialog.Content += "\n" + source.Url + " (" + source.MimeType + ")";
}
onPlayDialog.PrimaryButtonText = "Close";
await onPlayDialog.ShowAsync();
};
}
}
else
{
newErrors.Add(new ErrorViewModel()
{
Message = "There was an error Rendering this card",
Type = ErrorViewModelType.Error
});
}
foreach (var error in parseResult.Errors)
{
newErrors.Add(new ErrorViewModel()
{
Message = error.Message,
Type = ErrorViewModelType.Error
});
}
foreach (var error in _renderedAdaptiveCard.Errors)
{
newErrors.Add(new ErrorViewModel()
{
Message = error.Message,
Type = ErrorViewModelType.Error
});
}
foreach (var error in parseResult.Warnings)
{
newErrors.Add(new ErrorViewModel()
{
Message = error.Message,
Type = ErrorViewModelType.Warning
});
}
foreach (var error in _renderedAdaptiveCard.Warnings)
{
newErrors.Add(new ErrorViewModel()
{
Message = error.Message,
Type = ErrorViewModelType.Warning
});
}
}
else
{
newErrors.Add(new ErrorViewModel()
{
Message = "There was an error creating a JsonObject from the card",
Type = ErrorViewModelType.Error
});
}
if (RenderedCard is FrameworkElement)
{
(RenderedCard as FrameworkElement).VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top;
}
errors = newErrors;
TimeCounter.ResetCounter();
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
newErrors.Add(new ErrorViewModel()
{
Message = "Rendering failed",
Type = ErrorViewModelType.Error
});
errors = newErrors;
TimeCounter.ResetCounter();
}
}