public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { if (!TaskAvailable()) { return(CommandResult.Disabled); } IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer); if (flavorHandler != null) { var workflow = _workflowProvider.GetOrCreate(); var getPackagesTask = workflow.Packages.GetInstalledPackagesAsync(); getPackagesTask.Wait(5000); var packages = getPackagesTask.Result; if (!packages.Any(p => p.Package.EqualsIgnoreCase(flavorHandler.RequiredPackageName))) { _coreShell.ShowErrorMessage(string.Format(CultureInfo.InvariantCulture, Resources.Error_PackageMissing, flavorHandler.RequiredPackageName)); return(CommandResult.Disabled); } if (!CheckPrerequisites()) { return(CommandResult.Disabled); } // Save the file var document = EditorExtensions.FindInProjectedBuffers <MdEditorDocument>(TextView.TextBuffer, MdContentTypeDefinition.ContentType); var tb = document.TextBuffer; if (!tb.CanBeSavedInCurrentEncoding()) { if (MessageButtons.No == _coreShell.ShowMessage(Resources.Warning_SaveInUtf8, MessageButtons.YesNo)) { return(CommandResult.Executed); } tb.Save(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)); } else { tb.Save(); } var inputFilePath = tb.GetFilePath(); _outputFilePath = Path.ChangeExtension(inputFilePath, FileExtension); try { _fs.DeleteFile(_outputFilePath); } catch (IOException ex) { _coreShell.ShowErrorMessage(ex.Message); return(CommandResult.Executed); } var session = workflow.RSession; _lastCommandTask = flavorHandler.PublishAsync(session, _coreShell, _fs, inputFilePath, _outputFilePath, Format, tb.GetEncoding()).ContinueWith(t => LaunchViewer()); } return(CommandResult.Executed); }
public override CommandResult Invoke(Guid group, int id, object inputArg, ref object outputArg) { if (!TaskAvailable()) { return(CommandResult.Disabled); } IMarkdownFlavorPublishHandler flavorHandler = GetFlavorHandler(TextView.TextBuffer); if (flavorHandler == null) { return(CommandResult.Disabled); } var workflow = _workflowProvider.GetOrCreate(); _lastCommandTask = Task.Run(async() => { // Get list of installed packages and verify that all the required ones are installed var packages = await workflow.Packages.GetInstalledPackagesAsync(); if (packages.Any(p => p.Package.EqualsIgnoreCase(flavorHandler.RequiredPackageName))) { // Text buffer operations should be performed in UI thread await Services.MainThread().SwitchToAsync(); if (await CheckPrerequisitesAsync()) { var textBuffer = SaveFile(); if (textBuffer != null) { var inputFilePath = textBuffer.GetFilePath(); _outputFilePath = Path.ChangeExtension(inputFilePath, FileExtension); try { _fs.DeleteFile(_outputFilePath); } catch (IOException ex) { Services.UI().ShowErrorMessage(ex.Message); return; } var session = workflow.RSession; await flavorHandler.PublishAsync(session, Services, inputFilePath, _outputFilePath, Format, textBuffer.GetEncoding()).ContinueWith(t => LaunchViewer()); } } } else { await Services.ShowErrorMessageAsync(Resources.Error_PackageMissing.FormatInvariant(flavorHandler.RequiredPackageName)); } }); return(CommandResult.Executed); }