mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
refactored repo unlocker select-next method
This commit is contained in:
@@ -74,6 +74,24 @@ namespace mRemoteNGTests.Credential
|
||||
Assert.That(_repositoryUnlocker.SelectedRepository, Is.EqualTo(_repos[0]));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void NothingIsSelectedIfNoReposExist()
|
||||
{
|
||||
var repositoryUnlocker = new CompositeRepositoryUnlocker(new ICredentialRepository[0]);
|
||||
repositoryUnlocker.SelectNextLockedRepository();
|
||||
Assert.That(repositoryUnlocker.SelectedRepository, Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FirstLockedRepoSelectedIfNoRepoCurrentlySelected()
|
||||
{
|
||||
var repo = BuildRepos(1);
|
||||
repo[0].IsLoaded.Returns(false);
|
||||
var repositoryUnlocker = new CompositeRepositoryUnlocker(repo);
|
||||
repositoryUnlocker.SelectNextLockedRepository();
|
||||
Assert.That(repositoryUnlocker.SelectedRepository, Is.EqualTo(repo[0]));
|
||||
}
|
||||
|
||||
private IList<ICredentialRepository> BuildRepos(int count)
|
||||
{
|
||||
var list = new List<ICredentialRepository>();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security;
|
||||
|
||||
namespace mRemoteNG.Credential
|
||||
@@ -17,7 +18,7 @@ namespace mRemoteNG.Credential
|
||||
throw new ArgumentNullException(nameof(repositories));
|
||||
|
||||
_repositories.AddRange(repositories);
|
||||
SelectedRepository = _repositories[0];
|
||||
SelectNextLockedRepository();
|
||||
}
|
||||
|
||||
public void Unlock(SecureString key)
|
||||
@@ -32,18 +33,42 @@ namespace mRemoteNG.Credential
|
||||
|
||||
private ICredentialRepository GetNextLockedRepo()
|
||||
{
|
||||
var initialIndex = _repositories.IndexOf(SelectedRepository);
|
||||
var currentIndex = initialIndex + 1;
|
||||
if (currentIndex >= _repositories.Count) return SelectedRepository;
|
||||
while (_repositories[currentIndex].IsLoaded)
|
||||
{
|
||||
if (currentIndex == initialIndex)
|
||||
return null;
|
||||
currentIndex += 1;
|
||||
if (currentIndex >= _repositories.Count)
|
||||
currentIndex = 0;
|
||||
}
|
||||
return _repositories[currentIndex];
|
||||
var newOrder = OrderListForNextLockedRepo();
|
||||
return newOrder.Any() ? newOrder.First() : null;
|
||||
}
|
||||
|
||||
private IList<ICredentialRepository> OrderListForNextLockedRepo()
|
||||
{
|
||||
if (_repositories.Count == 0)
|
||||
return new List<ICredentialRepository>();
|
||||
var reorderedList = new List<ICredentialRepository>();
|
||||
var itemsAfterCurrent = BuildListOfItemsAfterCurrent();
|
||||
var itemsBeforeAndIncludingCurrent = BuildListOfItemsBeforeAndIncludingCurrent();
|
||||
reorderedList.AddRange(itemsAfterCurrent.Where(repository => !repository.IsLoaded));
|
||||
reorderedList.AddRange(itemsBeforeAndIncludingCurrent.Where(repository => !repository.IsLoaded));
|
||||
return reorderedList;
|
||||
}
|
||||
|
||||
private IList<ICredentialRepository> BuildListOfItemsAfterCurrent()
|
||||
{
|
||||
var lastListIndex = _repositories.Count - 1;
|
||||
var newListStartIndex = GetNewListStartIndex();
|
||||
|
||||
if (newListStartIndex > lastListIndex) newListStartIndex--;
|
||||
var countToEndOfList = _repositories.Count - newListStartIndex;
|
||||
return _repositories.GetRange(newListStartIndex, countToEndOfList);
|
||||
}
|
||||
|
||||
private IList<ICredentialRepository> BuildListOfItemsBeforeAndIncludingCurrent()
|
||||
{
|
||||
var newListStartIndex = GetNewListStartIndex();
|
||||
return _repositories.GetRange(0, newListStartIndex);
|
||||
}
|
||||
|
||||
private int GetNewListStartIndex()
|
||||
{
|
||||
var currentItemIndex = _repositories.IndexOf(SelectedRepository);
|
||||
return currentItemIndex + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user