@@ -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 )
0 commit comments