Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/GitHub.Api/LoginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class LoginManager : ILoginManager
{
readonly string[] scopes = { "user", "repo", "gist", "write:public_key" };
readonly IKeychain keychain;
readonly ITwoFactorChallengeHandler twoFactorChallengeHandler;
readonly Lazy<ITwoFactorChallengeHandler> twoFactorChallengeHandler;
readonly string clientId;
readonly string clientSecret;
readonly string authorizationNote;
Expand All @@ -31,7 +31,7 @@ public class LoginManager : ILoginManager
/// <param name="fingerprint">The machine fingerprint.</param>
public LoginManager(
IKeychain keychain,
ITwoFactorChallengeHandler twoFactorChallengeHandler,
Lazy<ITwoFactorChallengeHandler> twoFactorChallengeHandler,
string clientId,
string clientSecret,
string authorizationNote = null,
Expand Down Expand Up @@ -194,7 +194,7 @@ async Task<ApplicationAuthorization> HandleTwoFactorAuthorization(
{
for (;;)
{
var challengeResult = await twoFactorChallengeHandler.HandleTwoFactorException(exception);
var challengeResult = await twoFactorChallengeHandler.Value.HandleTwoFactorException(exception);

if (challengeResult == null)
{
Expand All @@ -218,7 +218,7 @@ async Task<ApplicationAuthorization> HandleTwoFactorAuthorization(
}
catch (Exception e)
{
await twoFactorChallengeHandler.ChallengeFailed(e);
await twoFactorChallengeHandler.Value.ChallengeFailed(e);
await keychain.Delete(hostAddress).ConfigureAwait(false);
throw;
}
Expand Down
24 changes: 20 additions & 4 deletions src/GitHub.InlineReviews/InlineCommentMarginProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,43 @@ internal sealed class InlineCommentMarginProvider : IWpfTextViewMarginProvider
const string MarginName = "InlineComment";
const string MarginPropertiesName = "Indicator Margin"; // Same background color as Glyph margin

readonly IGitHubServiceProvider serviceProvider;
readonly IEditorFormatMapService editorFormatMapService;
readonly IViewTagAggregatorFactoryService tagAggregatorFactory;
readonly IInlineCommentPeekService peekService;
readonly IPullRequestSessionManager sessionManager;
readonly IPackageSettings packageSettings;
IPullRequestSessionManager sessionManager;

[ImportingConstructor]
public InlineCommentMarginProvider(
IGitHubServiceProvider serviceProvider,
IEditorFormatMapService editorFormatMapService,
IViewTagAggregatorFactoryService tagAggregatorFactory,
IInlineCommentPeekService peekService,
IPullRequestSessionManager sessionManager,
IPackageSettings packageSettings)
{
this.serviceProvider = serviceProvider;
this.editorFormatMapService = editorFormatMapService;
this.tagAggregatorFactory = tagAggregatorFactory;
this.peekService = peekService;
this.sessionManager = sessionManager;
this.packageSettings = packageSettings;
}

IPullRequestSessionManager SessionManager
{
get
{
// Lazily load the pull request session manager to prevent all of our assemblies
// being loaded on VS startup.
if (sessionManager == null)
{
sessionManager = serviceProvider.GetService<IPullRequestSessionManager>();
}

return sessionManager;
}
}

public IWpfTextViewMargin CreateMargin(IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin parent)
{
if (IsMarginDisabled(wpfTextViewHost))
Expand Down Expand Up @@ -95,7 +111,7 @@ void TrackCommentGlyph(IWpfTextViewHost host, UIElement marginElement)

bool IsMarginVisible(ITextBuffer buffer)
{
if (sessionManager.GetTextBufferInfo(buffer) != null)
if (SessionManager.GetTextBufferInfo(buffer) != null)
{
return true;
}
Expand Down
12 changes: 4 additions & 8 deletions src/GitHub.TeamFoundation.14/Connect/GitHubConnectSection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ public class GitHubConnectSection : TeamExplorerSectionBase, IGitHubConnectSecti
readonly IPackageSettings packageSettings;
readonly IVSServices vsServices;
readonly int sectionIndex;
readonly IDialogService dialogService;
readonly IRepositoryCloneService cloneService;
readonly ILocalRepositories localRepositories;

bool isCloning;
Expand Down Expand Up @@ -100,8 +98,6 @@ public GitHubConnectSection(IGitHubServiceProvider serviceProvider,
IConnectionManager manager,
IPackageSettings packageSettings,
IVSServices vsServices,
IRepositoryCloneService cloneService,
IDialogService dialogService,
ILocalRepositories localRepositories,
int index)
: base(serviceProvider, apiFactory, holder, manager)
Expand All @@ -111,8 +107,6 @@ public GitHubConnectSection(IGitHubServiceProvider serviceProvider,
Guard.ArgumentNotNull(manager, nameof(manager));
Guard.ArgumentNotNull(packageSettings, nameof(packageSettings));
Guard.ArgumentNotNull(vsServices, nameof(vsServices));
Guard.ArgumentNotNull(cloneService, nameof(cloneService));
Guard.ArgumentNotNull(dialogService, nameof(dialogService));
Guard.ArgumentNotNull(localRepositories, nameof(localRepositories));

Title = "GitHub";
Expand All @@ -123,8 +117,6 @@ public GitHubConnectSection(IGitHubServiceProvider serviceProvider,

this.packageSettings = packageSettings;
this.vsServices = vsServices;
this.cloneService = cloneService;
this.dialogService = dialogService;
this.localRepositories = localRepositories;

Clone = CreateAsyncCommandHack(DoClone);
Expand All @@ -136,13 +128,15 @@ public GitHubConnectSection(IGitHubServiceProvider serviceProvider,

async Task DoClone()
{
var dialogService = ServiceProvider.GetService<IDialogService>();
var result = await dialogService.ShowCloneDialog(SectionConnection);

if (result != null)
{
try
{
ServiceProvider.GitServiceProvider = TEServiceProvider;
var cloneService = ServiceProvider.GetService<IRepositoryCloneService>();
await cloneService.CloneRepository(
result.Repository.CloneUrl,
result.Repository.Name,
Expand Down Expand Up @@ -381,6 +375,7 @@ async Task RefreshRepositories()

public void DoCreate()
{
var dialogService = ServiceProvider.GetService<IDialogService>();
dialogService.ShowCreateRepositoryDialog(SectionConnection);
}

Expand All @@ -391,6 +386,7 @@ public void SignOut()

public void Login()
{
var dialogService = ServiceProvider.GetService<IDialogService>();
dialogService.ShowLoginDialog();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ public GitHubConnectSection0(IGitHubServiceProvider serviceProvider,
IConnectionManager manager,
IPackageSettings settings,
IVSServices vsServices,
IRepositoryCloneService cloneService,
IDialogService dialogService,
ILocalRepositories localRepositories)
: base(serviceProvider, apiFactory, holder, manager, settings, vsServices, cloneService, dialogService, localRepositories, 0)
: base(serviceProvider, apiFactory, holder, manager, settings, vsServices, localRepositories, 0)
{
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ public GitHubConnectSection1(IGitHubServiceProvider serviceProvider,
IConnectionManager manager,
IPackageSettings settings,
IVSServices vsServices,
IRepositoryCloneService cloneService,
IDialogService dialogService,
ILocalRepositories localRepositories)
: base(serviceProvider, apiFactory, holder, manager, settings, vsServices, cloneService, dialogService, localRepositories, 1)
: base(serviceProvider, apiFactory, holder, manager, settings, vsServices, localRepositories, 1)
{
}
}
Expand Down
30 changes: 12 additions & 18 deletions src/GitHub.TeamFoundation.14/Home/GitHubHomeSection.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
using System;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Windows.Input;
using GitHub.Api;
using GitHub.Extensions;
using GitHub.Info;
using GitHub.Primitives;
using GitHub.Services;
using GitHub.Settings;
using GitHub.UI;
using GitHub.VisualStudio.Base;
using GitHub.VisualStudio.Helpers;
using GitHub.VisualStudio.UI;
using GitHub.VisualStudio.UI.Views;
using Microsoft.TeamFoundation.Controls;
using GitHub.Services;
using GitHub.Api;
using GitHub.Primitives;
using System.Threading.Tasks;
using System.Diagnostics;
using GitHub.Extensions;
using System.Windows.Input;
using ReactiveUI;
using GitHub.VisualStudio.UI;
using GitHub.Settings;
using System.Windows.Threading;
using GitHub.Info;

namespace GitHub.VisualStudio.TeamExplorer.Home
{
Expand All @@ -32,7 +29,6 @@ public class GitHubHomeSection : TeamExplorerSectionBase, IGitHubHomeSection
readonly ITeamExplorerServices teamExplorerServices;
readonly IPackageSettings settings;
readonly IUsageTracker usageTracker;
readonly IDialogService dialogService;

[ImportingConstructor]
public GitHubHomeSection(IGitHubServiceProvider serviceProvider,
Expand All @@ -41,8 +37,7 @@ public GitHubHomeSection(IGitHubServiceProvider serviceProvider,
IVisualStudioBrowser visualStudioBrowser,
ITeamExplorerServices teamExplorerServices,
IPackageSettings settings,
IUsageTracker usageTracker,
IDialogService dialogService)
IUsageTracker usageTracker)
: base(serviceProvider, apiFactory, holder)
{
Title = "GitHub";
Expand All @@ -52,10 +47,8 @@ public GitHubHomeSection(IGitHubServiceProvider serviceProvider,
this.teamExplorerServices = teamExplorerServices;
this.settings = settings;
this.usageTracker = usageTracker;
this.dialogService = dialogService;

var openOnGitHub = ReactiveCommand.Create();
openOnGitHub.Subscribe(_ => DoOpenOnGitHub());
var openOnGitHub = new RelayCommand(_ => DoOpenOnGitHub());
OpenOnGitHub = openOnGitHub;
}

Expand Down Expand Up @@ -118,6 +111,7 @@ static Octicon GetIcon(bool isPrivate, bool isHosted, bool isFork)

public void Login()
{
var dialogService = ServiceProvider.GetService<IDialogService>();
dialogService.ShowLoginDialog();
}

Expand Down
14 changes: 12 additions & 2 deletions src/GitHub.VisualStudio/GitHubPackage.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
Expand Down Expand Up @@ -211,11 +212,20 @@ async Task<object> CreateService(IAsyncServiceContainer container, CancellationT
{
var serviceProvider = await GetServiceAsync(typeof(IGitHubServiceProvider)) as IGitHubServiceProvider;
var keychain = serviceProvider.GetService<IKeychain>();
var twoFaHandler = serviceProvider.GetService<ITwoFactorChallengeHandler>();

// HACK: We need to make sure this is run on the main thread. We really
// shouldn't be injecting a view model concern into LoginManager - this
// needs to be refactored. See #1398.
var lazy2Fa = new Lazy<ITwoFactorChallengeHandler>(() =>
ThreadHelper.JoinableTaskFactory.Run(async () =>
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
return serviceProvider.GetService<ITwoFactorChallengeHandler>();
}));

return new LoginManager(
keychain,
twoFaHandler,
lazy2Fa,
ApiClientConfiguration.ClientId,
ApiClientConfiguration.ClientSecret,
ApiClientConfiguration.AuthorizationNote,
Expand Down
11 changes: 8 additions & 3 deletions src/GitHub.VisualStudio/Services/GitHubServiceProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Reactive.Disposables;
using GitHub.Logging;
using GitHub.Models;
using GitHub.Exports;
Expand Down Expand Up @@ -89,11 +88,11 @@ class OwnedComposablePart
}

static readonly ILogger log = LogManager.ForContext<GitHubServiceProvider>();
CompositeDisposable disposables = new CompositeDisposable();
readonly IServiceProviderPackage asyncServiceProvider;
readonly IServiceProvider syncServiceProvider;
readonly Dictionary<string, OwnedComposablePart> tempParts;
readonly Version currentVersion;
List<IDisposable> disposables = new List<IDisposable>();
bool initialized = false;

public ExportProvider ExportProvider { get; private set; }
Expand Down Expand Up @@ -290,7 +289,13 @@ protected void Dispose(bool disposing)
if (disposed) return;

if (disposables != null)
disposables.Dispose();
{
foreach (var disposable in disposables)
{
disposable.Dispose();
}
}

disposables = null;
if (tempContainer != null)
tempContainer.Dispose();
Expand Down
Loading