Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 21cdc4e

Browse files
Merge pull request #198 from github-for-unity/fixes/publish-view-faster-load
Fix to load the PublishView faster
2 parents d4d4ded + 0f556c4 commit 21cdc4e

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed

src/GitHub.Api/Application/ApiClient.cs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ public async Task GetOrganizations(Action<IList<Organization>> callback)
7979
callback(organizations);
8080
}
8181

82+
public async Task LoadKeychain(Action<bool> callback)
83+
{
84+
Guard.ArgumentNotNull(callback, "callback");
85+
var hasLoadedKeys = await LoadKeychainInternal();
86+
callback(hasLoadedKeys);
87+
}
88+
8289
public async Task GetCurrentUser(Action<Octokit.User> callback)
8390
{
8491
Guard.ArgumentNotNull(callback, "callback");
@@ -188,7 +195,7 @@ public async Task<bool> ContinueLoginAsync(LoginResult loginResult, Func<LoginRe
188195
{
189196
logger.Trace("Creating repository");
190197

191-
if (!await EnsureKeychainLoaded())
198+
if (!await LoadKeychainInternal())
192199
{
193200
throw new InvalidOperationException("The keychain did not load");
194201
}
@@ -223,9 +230,9 @@ private async Task<IList<Organization>> GetOrganizationInternal()
223230
{
224231
logger.Trace("Getting Organizations");
225232

226-
if (!await EnsureKeychainLoaded())
233+
if (!await LoadKeychainInternal())
227234
{
228-
return null;
235+
return new List<Organization>();
229236
}
230237

231238
var organizations = await githubClient.Organization.GetAllForCurrent();
@@ -252,7 +259,7 @@ private async Task<IList<Organization>> GetOrganizationInternal()
252259
{
253260
logger.Trace("Getting Organizations");
254261

255-
if (!await EnsureKeychainLoaded())
262+
if (!await LoadKeychainInternal())
256263
{
257264
return null;
258265
}
@@ -268,27 +275,28 @@ private async Task<IList<Organization>> GetOrganizationInternal()
268275
return userCache;
269276
}
270277

271-
private async Task<bool> EnsureKeychainLoaded()
278+
private async Task<bool> LoadKeychainInternal()
272279
{
273-
logger.Trace("EnsureKeychainLoaded");
280+
logger.Trace("LoadKeychainInternal");
274281

275282
if (keychain.HasKeys)
276283
{
277284
if (!keychain.NeedsLoad)
278285
{
279-
logger.Trace("EnsureKeychainLoaded: Has keys does not need load");
286+
logger.Trace("LoadKeychainInternal: Has keys does not need load");
280287
return true;
281288
}
282289

283-
logger.Trace("EnsureKeychainLoaded: Loading");
290+
logger.Trace("LoadKeychainInternal: Loading");
284291

292+
//TODO: ONE_USER_LOGIN This assumes only ever one user can login
285293
var uriString = keychain.Connections.First().Host;
286294
var keychainAdapter = await keychain.Load(uriString);
287295

288296
return keychainAdapter.OctokitCredentials != Credentials.Anonymous;
289297
}
290298

291-
logger.Trace("EnsureKeychainLoaded: No keys to load");
299+
logger.Trace("LoadKeychainInternal: No keys to load");
292300

293301
return false;
294302
}

src/GitHub.Api/Application/IApiClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ interface IApiClient
1717
Task<bool> ValidateCredentials();
1818
Task Logout(UriString host);
1919
Task GetCurrentUser(Action<Octokit.User> callback);
20+
Task LoadKeychain(Action<bool> callback);
2021
}
2122
}

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/PUblishView.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Threading.Tasks;
34
using Octokit;
45
using Rackspace.Threading;
56
using UnityEditor;
@@ -65,40 +66,33 @@ private void PopulateView()
6566
try
6667
{
6768
var keychainConnections = Platform.Keychain.Connections;
69+
//TODO: ONE_USER_LOGIN This assumes only ever one user can login
6870
if (keychainConnections.Any())
6971
{
7072
Logger.Trace("GetCurrentUser");
7173

7274
isBusy = true;
7375

74-
Client.GetCurrentUser(user => {
75-
if (user == null)
76+
Client.LoadKeychain(hasKeys => {
77+
if (!hasKeys)
7678
{
7779
Logger.Warning("Unable to get current user");
7880
isBusy = false;
7981
return;
8082
}
8183

82-
owners = owners.Union(new[] { user.Login }).ToArray();
83-
username = user.Login;
84-
85-
Logger.Trace("GetOrganizations");
84+
//TODO: ONE_USER_LOGIN This assumes only ever one user can login
85+
username = keychainConnections.First().Username;
8686

8787
Client.GetOrganizations(organizations => {
88-
if (organizations == null)
89-
{
90-
Logger.Warning("Unable to get list of organizations");
91-
isBusy = false;
92-
return;
93-
}
94-
9588
Logger.Trace("Loaded {0} organizations", organizations.Count);
9689

9790
var organizationLogins = organizations
9891
.OrderBy(organization => organization.Login)
9992
.Select(organization => organization.Login);
10093

101-
owners = owners.Union(organizationLogins).ToArray();
94+
owners = new[] { username }.Union(organizationLogins).ToArray();
95+
10296
isBusy = false;
10397
});
10498
});

0 commit comments

Comments
 (0)