Пример #1
0
        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);
        }
Пример #2
0
        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);
        }