Renamed PuttySessionManager.AddSessionsToTree to just AddSessions to reflect that it does not directly work on any tree objects. Implemented the CollectionChanged event for the sessions providers collection

This commit is contained in:
David Sparer
2016-09-20 10:12:46 -06:00
parent 00b0552e5e
commit 0907a19821
3 changed files with 45 additions and 33 deletions

View File

@@ -67,7 +67,7 @@ namespace mRemoteNG.Config.Connections
frmMain.Default.ConnectionsFileName = ConnectionFileName;
if (import) return;
PuttySessionsManager.Instance.AddSessionsToTree();
PuttySessionsManager.Instance.AddSessions();
Runtime.ConnectionTreeModel.RootNodes.AddRange(PuttySessionsManager.Instance.RootPuttySessionsNodes);
}
}

View File

@@ -11,31 +11,27 @@ namespace mRemoteNG.Config.Putty
{
public static PuttySessionsManager Instance { get; } = new PuttySessionsManager();
private List<AbstractPuttySessionsProvider> _providers;
public IEnumerable<AbstractPuttySessionsProvider> Providers
{
get
{
if (_providers == null || _providers.Count == 0)
AddProviders();
return _providers;
}
}
public List<RootPuttySessionsNodeInfo> RootPuttySessionsNodes { get; } = new List<RootPuttySessionsNodeInfo>();
private readonly List<AbstractPuttySessionsProvider> _providers = new List<AbstractPuttySessionsProvider>();
public IEnumerable<AbstractPuttySessionsProvider> Providers => _providers;
public List<RootPuttySessionsNodeInfo> RootPuttySessionsNodes { get; } = new List<RootPuttySessionsNodeInfo>();
private PuttySessionsManager()
{
AddProvider(new PuttySessionsRegistryProvider());
AddProvider(new PuttySessionsXmingProvider());
}
private PuttySessionsManager()
{ }
#region Public Methods
public void AddSessionsToTree()
public void AddSessions()
{
foreach (var provider in Providers)
{
AddSessionsToTreeForProvider(provider);
AddSessionsFromProvider(provider);
}
}
private void AddSessionsToTreeForProvider(AbstractPuttySessionsProvider provider)
private void AddSessionsFromProvider(AbstractPuttySessionsProvider provider)
{
var rootTreeNode = provider.RootInfo;
provider.GetSessions();
@@ -62,24 +58,33 @@ namespace mRemoteNG.Config.Putty
provider.SessionChanged -= SessionChanged;
}
}
public void SessionChanged(object sender, AbstractPuttySessionsProvider.SessionChangedEventArgs e)
public void AddProvider(AbstractPuttySessionsProvider newProvider)
{
_providers.Add(newProvider);
RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newProvider));
}
public void AddProviders(IEnumerable<AbstractPuttySessionsProvider> newProviders)
{
_providers.AddRange(newProviders);
RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, newProviders));
}
public void RemoveProvider(AbstractPuttySessionsProvider providerToRemove)
{
var wasRemoved = _providers.Remove(providerToRemove);
if (wasRemoved)
RaiseSessionProvidersCollectionChangedEvent(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, providerToRemove));
}
public void SessionChanged(object sender, AbstractPuttySessionsProvider.SessionChangedEventArgs e)
{
AddSessionsToTree();
AddSessions();
}
#endregion
#region Private Methods
public void AddProvider(AbstractPuttySessionsProvider provider)
{
_providers.Add(provider);
}
private void AddProviders()
{
_providers = new List<AbstractPuttySessionsProvider> {new PuttySessionsRegistryProvider(), new PuttySessionsXmingProvider()};
}
private string[] GetSessionNames(bool raw = false)
{
var sessionNames = new List<string>();
@@ -135,9 +140,16 @@ namespace mRemoteNG.Config.Putty
public event NotifyCollectionChangedEventHandler PuttySessionsCollectionChanged;
protected void RaiseCollectionChangedEvent(NotifyCollectionChangedEventArgs args)
protected void RaisePuttySessionCollectionChangedEvent(NotifyCollectionChangedEventArgs args)
{
PuttySessionsCollectionChanged?.Invoke(this, args);
}
public event NotifyCollectionChangedEventHandler SessionProvidersCollectionChanged;
protected void RaiseSessionProvidersCollectionChangedEvent(NotifyCollectionChangedEventArgs args)
{
SessionProvidersCollectionChanged?.Invoke(this, args);
}
}
}

View File

@@ -80,7 +80,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
if (puttyPathChanged)
{
PuttyBase.PuttyPath = Settings.Default.UseCustomPuttyPath ? Settings.Default.CustomPuttyPath : GeneralAppInfo.PuttyPath;
PuttySessionsManager.Instance.AddSessionsToTree();
PuttySessionsManager.Instance.AddSessions();
}
Settings.Default.MaxPuttyWaitTime = (int) numPuttyWaitTime.Value;