public static void AttachListener(this IRepositoryManagerListener listener, IRepositoryManager repositoryManager, RepositoryManagerEvents managerEvents = null, bool trace = true) { var logger = trace ? Logging.GetLogger <IRepositoryManagerListener>() : null; repositoryManager.OnIsBusyChanged += isBusy => { logger?.Trace("OnIsBusyChanged: {0}", isBusy); listener.OnIsBusyChanged(isBusy); if (isBusy) { managerEvents?.OnIsBusy.Set(); } else { managerEvents?.OnIsNotBusy.Set(); } }; repositoryManager.OnCurrentBranchAndRemoteUpdated += (configBranch, configRemote) => { logger?.Trace("OnCurrentBranchAndRemoteUpdated"); listener.OnCurrentBranchAndRemoteUpdated(configBranch, configRemote); managerEvents?.OnCurrentBranchAndRemoteUpdated.Set(); }; repositoryManager.OnLocalBranchListUpdated += branchList => { logger?.Trace("OnLocalBranchListUpdated"); listener.OnLocalBranchListUpdated(branchList); managerEvents?.OnLocalBranchListUpdated.Set(); }; repositoryManager.OnRemoteBranchListUpdated += (remotesList, branchList) => { logger?.Trace("OnRemoteBranchListUpdated"); listener.OnRemoteBranchListUpdated(remotesList, branchList); managerEvents?.OnRemoteBranchListUpdated.Set(); }; repositoryManager.OnLocalBranchUpdated += name => { logger?.Trace("OnLocalBranchUpdated Name:{0}", name); listener.OnLocalBranchUpdated(name); managerEvents?.OnLocalBranchUpdated.Set(); }; repositoryManager.OnLocalBranchAdded += name => { logger?.Trace("OnLocalBranchAdded Name:{0}", name); listener.OnLocalBranchAdded(name); managerEvents?.OnLocalBranchAdded.Set(); }; repositoryManager.OnLocalBranchRemoved += name => { logger?.Trace("OnLocalBranchRemoved Name:{0}", name); listener.OnLocalBranchRemoved(name); managerEvents?.OnLocalBranchRemoved.Set(); }; repositoryManager.OnRemoteBranchAdded += (origin, name) => { logger?.Trace("OnRemoteBranchAdded Origin:{0} Name:{1}", origin, name); listener.OnRemoteBranchAdded(origin, name); managerEvents?.OnRemoteBranchAdded.Set(); }; repositoryManager.OnRemoteBranchRemoved += (origin, name) => { logger?.Trace("OnRemoteBranchRemoved Origin:{0} Name:{1}", origin, name); listener.OnRemoteBranchRemoved(origin, name); managerEvents?.OnRemoteBranchRemoved.Set(); }; }