зеркало из https://github.com/github/VisualStudio.git
Merge pull request #1854 from github/fixes/1832-explicit-github-and-enterprise-gists
Allow user to choose between creating GitHub or GitHub Enterprise Gist
This commit is contained in:
Коммит
d3641f4a63
|
@ -51,10 +51,19 @@ namespace GitHub.Services
|
|||
return (string)await showDialog.ShowWithFirstConnection(viewModel);
|
||||
}
|
||||
|
||||
public async Task ShowCreateGist()
|
||||
public async Task ShowCreateGist(IConnection connection)
|
||||
{
|
||||
var viewModel = factory.CreateViewModel<IGistCreationViewModel>();
|
||||
await showDialog.ShowWithFirstConnection(viewModel);
|
||||
|
||||
if (connection != null)
|
||||
{
|
||||
await viewModel.InitializeAsync(connection);
|
||||
await showDialog.Show(viewModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
await showDialog.ShowWithFirstConnection(viewModel);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task ShowCreateRepositoryDialog(IConnection connection)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
using System;
|
||||
|
||||
namespace GitHub.Commands
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a GitHub Enterprise gist from the currently selected text.
|
||||
/// </summary>
|
||||
public interface ICreateGistEnterpriseCommand : IVsCommand
|
||||
{
|
||||
}
|
||||
}
|
|
@ -149,6 +149,7 @@
|
|||
<ItemGroup>
|
||||
<Compile Include="Commands\ICopyLinkCommand.cs" />
|
||||
<Compile Include="Commands\IBlameLinkCommand.cs" />
|
||||
<Compile Include="Commands\ICreateGistEnterpriseCommand.cs" />
|
||||
<Compile Include="Commands\IOpenFromClipboardCommand.cs" />
|
||||
<Compile Include="Commands\IOpenFromUrlCommand.cs" />
|
||||
<Compile Include="Commands\IToggleInlineCommentMarginCommand.cs" />
|
||||
|
|
|
@ -39,7 +39,11 @@ namespace GitHub.Services
|
|||
/// <summary>
|
||||
/// Shows the Create Gist dialog.
|
||||
/// </summary>
|
||||
Task ShowCreateGist();
|
||||
/// <param name="connection">
|
||||
/// The connection to use. If null, the first connection will be used, or the user promted
|
||||
/// to log in if there are no connections.
|
||||
/// </param>
|
||||
Task ShowCreateGist(IConnection connection);
|
||||
|
||||
/// <summary>
|
||||
/// Shows the Create Repository dialog.
|
||||
|
|
|
@ -19,6 +19,7 @@ namespace GitHub.VisualStudio
|
|||
public const int refreshCommand = 0x302;
|
||||
public const int pullRequestCommand = 0x310;
|
||||
public const int createGistCommand = 0x400;
|
||||
public const int createGistEnterpriseCommand = 0x401;
|
||||
public const int openLinkCommand = 0x100;
|
||||
public const int copyLinkCommand = 0x101;
|
||||
public const int goToSolutionOrPullRequestFileCommand = 0x102;
|
||||
|
|
|
@ -1,28 +1,30 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Threading.Tasks;
|
||||
using GitHub.Models;
|
||||
using GitHub.Commands;
|
||||
using GitHub.Logging;
|
||||
using GitHub.Services;
|
||||
using GitHub.Extensions;
|
||||
using GitHub.Services.Vssdk.Commands;
|
||||
|
||||
namespace GitHub.VisualStudio.Commands
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a gist from the currently selected text.
|
||||
/// Creates a GitHub Gist from the currently selected text.
|
||||
/// </summary>
|
||||
[Export(typeof(ICreateGistCommand))]
|
||||
public class CreateGistCommand : VsCommand, ICreateGistCommand
|
||||
public class CreateGistCommand : CreateGistCommandBase, ICreateGistCommand
|
||||
{
|
||||
readonly Lazy<IDialogService> dialogService;
|
||||
readonly Lazy<ISelectedTextProvider> selectedTextProvider;
|
||||
|
||||
[ImportingConstructor]
|
||||
protected CreateGistCommand(Lazy<IDialogService> dialogService, Lazy<ISelectedTextProvider> selectedTextProvider)
|
||||
: base(CommandSet, CommandId)
|
||||
protected CreateGistCommand(
|
||||
Lazy<IDialogService> dialogService,
|
||||
Lazy<ISelectedTextProvider> selectedTextProvider,
|
||||
Lazy<IConnectionManager> connectionManager)
|
||||
: base(CommandSet, CommandId, dialogService, selectedTextProvider, connectionManager, true,
|
||||
isNotLoggedInDefault: true)
|
||||
{
|
||||
this.dialogService = dialogService;
|
||||
this.selectedTextProvider = selectedTextProvider;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -34,21 +36,100 @@ namespace GitHub.VisualStudio.Commands
|
|||
/// Gets the numeric identifier of the command.
|
||||
/// </summary>
|
||||
public const int CommandId = PkgCmdIDList.createGistCommand;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a GitHub Enterprise Gist from the currently selected text.
|
||||
/// </summary>
|
||||
[Export(typeof(ICreateGistEnterpriseCommand))]
|
||||
public class CreateGistEnterpriseCommand : CreateGistCommandBase, ICreateGistEnterpriseCommand
|
||||
{
|
||||
[ImportingConstructor]
|
||||
protected CreateGistEnterpriseCommand(
|
||||
Lazy<IDialogService> dialogService,
|
||||
Lazy<ISelectedTextProvider> selectedTextProvider,
|
||||
Lazy<IConnectionManager> connectionManager)
|
||||
: base(CommandSet, CommandId, dialogService, selectedTextProvider, connectionManager, false)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the GUID of the group the command belongs to.
|
||||
/// </summary>
|
||||
public static readonly Guid CommandSet = Guids.guidContextMenuSet;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the numeric identifier of the command.
|
||||
/// </summary>
|
||||
public const int CommandId = PkgCmdIDList.createGistEnterpriseCommand;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a GitHub or GitHub Enterprise Gist from the currently selected text.
|
||||
/// </summary>
|
||||
public abstract class CreateGistCommandBase : VsCommand
|
||||
{
|
||||
readonly bool isGitHubDotCom;
|
||||
readonly bool isNotLoggedInDefault;
|
||||
readonly Lazy<IDialogService> dialogService;
|
||||
readonly Lazy<ISelectedTextProvider> selectedTextProvider;
|
||||
readonly Lazy<IConnectionManager> connectionManager;
|
||||
|
||||
protected CreateGistCommandBase(
|
||||
Guid commandSet, int commandId,
|
||||
Lazy<IDialogService> dialogService,
|
||||
Lazy<ISelectedTextProvider> selectedTextProvider,
|
||||
Lazy<IConnectionManager> connectionManager,
|
||||
bool isGitHubDotCom,
|
||||
bool isNotLoggedInDefault = false)
|
||||
: base(commandSet, commandId)
|
||||
{
|
||||
this.dialogService = dialogService;
|
||||
this.selectedTextProvider = selectedTextProvider;
|
||||
this.connectionManager = connectionManager;
|
||||
this.isGitHubDotCom = isGitHubDotCom;
|
||||
this.isNotLoggedInDefault = isNotLoggedInDefault;
|
||||
}
|
||||
|
||||
ISelectedTextProvider SelectedTextProvider => selectedTextProvider.Value;
|
||||
|
||||
/// <summary>
|
||||
/// Shows the Create Gist dialog.
|
||||
/// </summary>
|
||||
public override Task Execute()
|
||||
public override async Task Execute()
|
||||
{
|
||||
return dialogService.Value.ShowCreateGist();
|
||||
var connection = await FindConnectionAsync();
|
||||
await dialogService.Value.ShowCreateGist(connection);
|
||||
}
|
||||
|
||||
protected override void QueryStatus()
|
||||
{
|
||||
Log.Assert(SelectedTextProvider != null, "Could not get an instance of ISelectedTextProvider");
|
||||
Visible = !string.IsNullOrWhiteSpace(SelectedTextProvider?.GetSelectedText());
|
||||
Visible = !string.IsNullOrWhiteSpace(SelectedTextProvider?.GetSelectedText()) &&
|
||||
(HasConnection() || isNotLoggedInDefault && IsLoggedIn() == false);
|
||||
}
|
||||
|
||||
bool HasConnection()
|
||||
{
|
||||
var task = FindConnectionAsync();
|
||||
return task.IsCompleted && task.Result != null;
|
||||
}
|
||||
|
||||
async Task<IConnection> FindConnectionAsync()
|
||||
{
|
||||
var connections = await connectionManager.Value.GetLoadedConnections();
|
||||
return connections.FirstOrDefault(x => x.IsLoggedIn && x.HostAddress.IsGitHubDotCom() == isGitHubDotCom);
|
||||
}
|
||||
|
||||
bool? IsLoggedIn()
|
||||
{
|
||||
var task = connectionManager.Value.IsLoggedIn();
|
||||
if (task.IsCompleted)
|
||||
{
|
||||
return task.Result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -214,6 +214,18 @@
|
|||
</Strings>
|
||||
</Button>
|
||||
|
||||
<Button guid="guidContextMenuSet" id="idCreateGistEnterpriseCommand" priority="0x0101" type="Button">
|
||||
<Icon guid="guidImages" id="logo" />
|
||||
<CommandFlag>IconIsMoniker</CommandFlag>
|
||||
<CommandFlag>DefaultInvisible</CommandFlag>
|
||||
<CommandFlag>DynamicVisibility</CommandFlag>
|
||||
<Strings>
|
||||
<ButtonText>Create an Enterprise Gist</ButtonText>
|
||||
<CanonicalName>.GitHub.CreateGistEnterprise</CanonicalName>
|
||||
<LocCanonicalName>.GitHub.CreateGistEnterprise</LocCanonicalName>
|
||||
</Strings>
|
||||
</Button>
|
||||
|
||||
<Button guid="guidContextMenuSet" id="openLinkCommand" type="Button">
|
||||
<Icon guid="guidImages" id="link_external" />
|
||||
<CommandFlag>IconIsMoniker</CommandFlag>
|
||||
|
@ -303,7 +315,11 @@
|
|||
<Parent guid="guidContextMenuSet" id="idGitHubContextSubMenuGroup"/>
|
||||
</CommandPlacement>
|
||||
|
||||
<CommandPlacement guid="guidContextMenuSet" id="idBlameCommand" priority="0x104">
|
||||
<CommandPlacement guid="guidContextMenuSet" id="idCreateGistEnterpriseCommand" priority="0x104">
|
||||
<Parent guid="guidContextMenuSet" id="idGitHubContextSubMenuGroup"/>
|
||||
</CommandPlacement>
|
||||
|
||||
<CommandPlacement guid="guidContextMenuSet" id="idBlameCommand" priority="0x105">
|
||||
<Parent guid="guidContextMenuSet" id="idGitHubContextSubMenuGroup"/>
|
||||
</CommandPlacement>
|
||||
|
||||
|
@ -410,6 +426,7 @@
|
|||
<IDSymbol name="copyLinkCommand" value="0x101"/>
|
||||
<IDSymbol name="goToSolutionOrPullRequestFileCommand" value="0x0102" />
|
||||
<IDSymbol name="idCreateGistCommand" value="0x0400" />
|
||||
<IDSymbol name="idCreateGistEnterpriseCommand" value="0x0401" />
|
||||
<IDSymbol name="idBlameCommand" value="0x0500" />
|
||||
</GuidSymbol>
|
||||
|
||||
|
|
|
@ -85,6 +85,7 @@ namespace GitHub.VisualStudio
|
|||
exports.GetExportedValue<IBlameLinkCommand>(),
|
||||
exports.GetExportedValue<ICopyLinkCommand>(),
|
||||
exports.GetExportedValue<ICreateGistCommand>(),
|
||||
exports.GetExportedValue<ICreateGistEnterpriseCommand>(),
|
||||
exports.GetExportedValue<IOpenLinkCommand>(),
|
||||
exports.GetExportedValue<IOpenPullRequestsCommand>(),
|
||||
exports.GetExportedValue<IShowCurrentPullRequestCommand>(),
|
||||
|
|
Загрузка…
Ссылка в новой задаче