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

Commit a93cce1

Browse files
Merge pull request #970 from github-for-unity/github-enterprise-host
Fixing issues where the user has multiple connections
2 parents 3333b53 + edcef8b commit a93cce1

File tree

3 files changed

+92
-29
lines changed

3 files changed

+92
-29
lines changed

src/GitHub.Api/Application/ApiClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public void LoginWithToken(string token, Action<bool> result)
262262
Guard.ArgumentNotNull(result, "result");
263263

264264
new FuncTask<bool>(taskManager.Token,
265-
() => loginManager.LoginWithToken(UriString.ToUriString(HostAddress.WebUri), token))
265+
() => loginManager.LoginWithToken(HostAddress.WebUri.Host, token))
266266
.FinallyInUI((success, ex, res) =>
267267
{
268268
if (!success)

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

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -383,13 +383,14 @@ class LocksView : Subview
383383
{
384384
[NonSerialized] private bool isBusy;
385385

386+
[SerializeField] private bool currentRemoteHasUpdate;
386387
[SerializeField] private bool currentStatusEntriesHasUpdate;
387388
[SerializeField] private bool currentLocksHasUpdate;
388-
[SerializeField] private bool currentUserHasUpdate;
389+
[SerializeField] private bool keychainHasUpdate;
389390
[SerializeField] private LocksControl locksControl;
391+
[SerializeField] private CacheUpdateEvent lastCurrentRemoteChangedEvent;
390392
[SerializeField] private CacheUpdateEvent lastLocksChangedEvent;
391393
[SerializeField] private CacheUpdateEvent lastStatusEntriesChangedEvent;
392-
[SerializeField] private CacheUpdateEvent lastUserChangedEvent;
393394
[SerializeField] private List<GitLock> lockedFiles = new List<GitLock>();
394395
[SerializeField] private List<GitStatusEntry> gitStatusEntries = new List<GitStatusEntry>();
395396
[SerializeField] private string currentUsername;
@@ -407,6 +408,7 @@ public override void OnEnable()
407408

408409
AttachHandlers(Repository);
409410
ValidateCachedData(Repository);
411+
KeychainConnectionsChanged();
410412
}
411413

412414
public override void OnDisable()
@@ -523,9 +525,10 @@ private void AttachHandlers(IRepository repository)
523525
return;
524526
}
525527

528+
Platform.Keychain.ConnectionsChanged += KeychainConnectionsChanged;
529+
repository.CurrentRemoteChanged += RepositoryOnCurrentRemoteChanged;
526530
repository.LocksChanged += RepositoryOnLocksChanged;
527-
repository.LocksChanged += RepositoryOnStatusEntriesChanged;
528-
User.Changed += UserOnChanged;
531+
repository.StatusEntriesChanged += RepositoryOnStatusEntriesChanged;
529532
}
530533

531534
private void DetachHandlers(IRepository repository)
@@ -535,9 +538,20 @@ private void DetachHandlers(IRepository repository)
535538
return;
536539
}
537540

541+
Platform.Keychain.ConnectionsChanged -= KeychainConnectionsChanged;
542+
repository.CurrentRemoteChanged -= RepositoryOnCurrentRemoteChanged;
538543
repository.LocksChanged -= RepositoryOnLocksChanged;
539-
repository.LocksChanged -= RepositoryOnStatusEntriesChanged;
540-
User.Changed -= UserOnChanged;
544+
repository.StatusEntriesChanged -= RepositoryOnStatusEntriesChanged;
545+
}
546+
547+
private void RepositoryOnCurrentRemoteChanged(CacheUpdateEvent cacheUpdateEvent)
548+
{
549+
if (!lastCurrentRemoteChangedEvent.Equals(cacheUpdateEvent))
550+
{
551+
lastCurrentRemoteChangedEvent = cacheUpdateEvent;
552+
currentRemoteHasUpdate = true;
553+
Redraw();
554+
}
541555
}
542556

543557
private void RepositoryOnLocksChanged(CacheUpdateEvent cacheUpdateEvent)
@@ -560,21 +574,17 @@ private void RepositoryOnStatusEntriesChanged(CacheUpdateEvent cacheUpdateEvent)
560574
}
561575
}
562576

563-
private void UserOnChanged(CacheUpdateEvent cacheUpdateEvent)
577+
private void KeychainConnectionsChanged()
564578
{
565-
if (!lastUserChangedEvent.Equals(cacheUpdateEvent))
566-
{
567-
lastUserChangedEvent = cacheUpdateEvent;
568-
currentUserHasUpdate = true;
569-
Redraw();
570-
}
579+
keychainHasUpdate = true;
580+
Redraw();
571581
}
572582

573583
private void ValidateCachedData(IRepository repository)
574584
{
585+
repository.CheckAndRaiseEventsIfCacheNewer(CacheType.RepositoryInfo, lastCurrentRemoteChangedEvent);
575586
repository.CheckAndRaiseEventsIfCacheNewer(CacheType.GitLocks, lastLocksChangedEvent);
576587
repository.CheckAndRaiseEventsIfCacheNewer(CacheType.GitStatus, lastStatusEntriesChangedEvent);
577-
User.CheckAndRaiseEventsIfCacheNewer(CacheType.GitUser, lastUserChangedEvent);
578588
}
579589

580590
private void MaybeUpdateData()
@@ -584,15 +594,35 @@ private void MaybeUpdateData()
584594
return;
585595
}
586596

587-
if (currentUserHasUpdate)
597+
if (keychainHasUpdate || currentRemoteHasUpdate)
588598
{
589-
//TODO: ONE_USER_LOGIN This assumes only ever one user can login
590-
var keychainConnection = Platform.Keychain.Connections.FirstOrDefault();
591-
if (keychainConnection != null)
592-
currentUsername = keychainConnection.Username;
593-
else
594-
currentUsername = "";
595-
currentUserHasUpdate = false;
599+
var username = String.Empty;
600+
if (Repository != null)
601+
{
602+
Connection connection;
603+
if (!string.IsNullOrEmpty(Repository.CloneUrl))
604+
{
605+
var host = Repository.CloneUrl
606+
.ToRepositoryUri()
607+
.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped);
608+
609+
connection = Platform.Keychain.Connections.FirstOrDefault(x => x.Host == host);
610+
}
611+
else
612+
{
613+
connection = Platform.Keychain.Connections.FirstOrDefault(HostAddress.IsGitHubDotCom);
614+
}
615+
616+
if (connection != null)
617+
{
618+
username = connection.Username;
619+
}
620+
}
621+
622+
currentUsername = username;
623+
624+
keychainHasUpdate = false;
625+
currentRemoteHasUpdate = false;
596626
}
597627

598628
if (currentLocksHasUpdate)

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

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ class ProjectWindowInterface : AssetPostprocessor
1818
private static List<GitLock> locks = new List<GitLock>();
1919
private static List<string> guids = new List<string>();
2020
private static List<string> guidsLocks = new List<string>();
21-
private static string loggedInUser;
21+
private static string currentUsername;
2222

2323
private static IApplicationManager manager;
2424
private static bool isBusy = false;
2525
private static ILogging logger;
2626
private static ILogging Logger { get { return logger = logger ?? LogHelper.GetLogger<ProjectWindowInterface>(); } }
2727
private static CacheUpdateEvent lastRepositoryStatusChangedEvent;
2828
private static CacheUpdateEvent lastLocksChangedEvent;
29+
private static CacheUpdateEvent lastCurrentRemoteChangedEvent;
2930
private static IRepository Repository { get { return manager != null ? manager.Environment.Repository : null; } }
3031
private static IPlatform Platform { get { return manager != null ? manager.Platform : null; } }
3132
private static bool IsInitialized { get { return Repository != null; } }
@@ -37,13 +38,14 @@ public static void Initialize(IApplicationManager theManager)
3738

3839
manager = theManager;
3940

40-
Platform.Keychain.ConnectionsChanged += KeychainMayHaveChanged;
41-
KeychainMayHaveChanged();
41+
Platform.Keychain.ConnectionsChanged += UpdateCurrentUsername;
42+
UpdateCurrentUsername();
4243

4344
if (IsInitialized)
4445
{
4546
Repository.StatusEntriesChanged += RepositoryOnStatusEntriesChanged;
4647
Repository.LocksChanged += RepositoryOnLocksChanged;
48+
Repository.CurrentRemoteChanged += RepositoryOnCurrentRemoteChanged;
4749
ValidateCachedData();
4850
}
4951
}
@@ -88,9 +90,40 @@ private static void RepositoryOnLocksChanged(CacheUpdateEvent cacheUpdateEvent)
8890
}
8991
}
9092

91-
private static void KeychainMayHaveChanged()
93+
private static void RepositoryOnCurrentRemoteChanged(CacheUpdateEvent cacheUpdateEvent)
9294
{
93-
loggedInUser = Platform.Keychain.Connections.Select(x => x.Username).FirstOrDefault();
95+
if (!lastCurrentRemoteChangedEvent.Equals(cacheUpdateEvent))
96+
{
97+
lastCurrentRemoteChangedEvent = cacheUpdateEvent;
98+
}
99+
}
100+
101+
private static void UpdateCurrentUsername()
102+
{
103+
var username = String.Empty;
104+
if (Repository != null)
105+
{
106+
Connection connection;
107+
if (!string.IsNullOrEmpty(Repository.CloneUrl))
108+
{
109+
var host = Repository.CloneUrl
110+
.ToRepositoryUri()
111+
.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped);
112+
113+
connection = Platform.Keychain.Connections.FirstOrDefault(x => x.Host == host);
114+
}
115+
else
116+
{
117+
connection = Platform.Keychain.Connections.FirstOrDefault(HostAddress.IsGitHubDotCom);
118+
}
119+
120+
if (connection != null)
121+
{
122+
username = connection.Username;
123+
}
124+
}
125+
126+
currentUsername = username;
94127
}
95128

96129
[MenuItem(AssetsMenuRequestLock, true, 10000)]
@@ -202,7 +235,7 @@ private static bool IsObjectLocked(Object selected, bool isLockedByCurrentUser)
202235
NPath assetPath = AssetDatabase.GetAssetPath(selected.GetInstanceID()).ToNPath();
203236
NPath repositoryPath = manager.Environment.GetRepositoryPath(assetPath);
204237

205-
return locks.Any(x => repositoryPath == x.Path && (!isLockedByCurrentUser || x.Owner.Name == loggedInUser));
238+
return locks.Any(x => repositoryPath == x.Path && (!isLockedByCurrentUser || x.Owner.Name == currentUsername));
206239
}
207240

208241
private static ITask CreateUnlockObjectTask(Object selected, bool force)

0 commit comments

Comments
 (0)