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

Commit 3ad7318

Browse files
Checking for the keychain of the current repository in the LocksView
1 parent 0af4305 commit 3ad7318

File tree

1 file changed

+48
-20
lines changed
  • src/UnityExtension/Assets/Editor/GitHub.Unity/UI

1 file changed

+48
-20
lines changed

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

Lines changed: 48 additions & 20 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,33 @@ 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;
599+
Connection[] connections;
600+
if (HasRepository && !string.IsNullOrEmpty(Repository.CloneUrl))
601+
{
602+
var host = Repository.CloneUrl
603+
.ToRepositoryUri()
604+
.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped);
605+
606+
connections = Platform.Keychain.Connections.OrderByDescending(x => x.Host == host).ToArray();
607+
}
608+
else
609+
{
610+
connections = Platform.Keychain.Connections.OrderByDescending(HostAddress.IsGitHubDotCom).ToArray();
611+
}
612+
613+
if (connections.Any())
614+
{
615+
currentUsername = connections.First().Username;
616+
}
593617
else
618+
{
594619
currentUsername = "";
595-
currentUserHasUpdate = false;
620+
}
621+
622+
keychainHasUpdate = false;
623+
currentRemoteHasUpdate = false;
596624
}
597625

598626
if (currentLocksHasUpdate)

0 commit comments

Comments
 (0)