attached the file backup pruner to listen to connection file save events

resolves #1020
This commit is contained in:
David Sparer
2018-07-23 12:53:03 -05:00
parent 7fc59e79f3
commit 29483b2625
4 changed files with 26 additions and 18 deletions

View File

@@ -3,6 +3,7 @@
Fixes:
------
#1030: Exception thrown if importing from port scan and no tree node is selected
#1020: BackupFileKeepCount setting not limiting backup file count
#1004: Duplicating root or PuTTy node through hotkey causes unhandled exception
#1002: Disabling filtering without clearing keyword leaves filtered state
#1001: Connection tree context menu hotkeys stop working and disappear in some cases

View File

@@ -4,7 +4,6 @@ using System.Security;
using System.Threading;
using System.Windows.Forms;
using mRemoteNG.App.Info;
using mRemoteNG.Config.DataProviders;
using mRemoteNG.Config.Putty;
using mRemoteNG.Connection;
using mRemoteNG.Credential;
@@ -78,12 +77,6 @@ namespace mRemoteNG.App
{
connectionFileName = ConnectionsService.GetStartupConnectionFileName();
}
var backupFileCreator = new FileBackupCreator();
backupFileCreator.CreateBackupFile(connectionFileName);
var backupPruner = new FileBackupPruner();
backupPruner.PruneBackupFiles(connectionFileName);
}
ConnectionsService.LoadConnections(Settings.Default.UseSQLServer, false, connectionFileName);

View File

@@ -1,26 +1,29 @@
using System;
using System.IO;
using System.IO;
using System.Linq;
namespace mRemoteNG.Config.DataProviders
{
public class FileBackupPruner
{
public void PruneBackupFiles(string baseName)
public void PruneBackupFiles(string filePath, int maxBackupsToKeep)
{
var fileName = Path.GetFileName(baseName);
var directoryName = Path.GetDirectoryName(baseName);
var fileName = Path.GetFileName(filePath);
var directoryName = Path.GetDirectoryName(filePath);
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(directoryName)) return;
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(directoryName))
return;
var searchPattern = string.Format(mRemoteNG.Settings.Default.BackupFileNameFormat, fileName, "*");
var files = Directory.GetFiles(directoryName, searchPattern);
if (files.Length <= mRemoteNG.Settings.Default.BackupFileKeepCount) return;
if (files.Length <= maxBackupsToKeep)
return;
Array.Sort(files);
Array.Resize(ref files, files.Length - mRemoteNG.Settings.Default.BackupFileKeepCount);
var filesToDelete = files
.OrderByDescending(s => s)
.Skip(maxBackupsToKeep);
foreach (var file in files)
foreach (var file in filesToDelete)
{
File.Delete(file);
}

View File

@@ -14,6 +14,7 @@ using mRemoteNG.App.Info;
using mRemoteNG.App.Initialization;
using mRemoteNG.Config;
using mRemoteNG.Config.Connections;
using mRemoteNG.Config.DataProviders;
using mRemoteNG.Config.Putty;
using mRemoteNG.Config.Settings;
using mRemoteNG.Connection;
@@ -31,7 +32,7 @@ using WeifenLuo.WinFormsUI.Docking;
namespace mRemoteNG.UI.Forms
{
public partial class FrmMain
public partial class FrmMain
{
public static FrmMain Default { get; } = new FrmMain();
@@ -46,6 +47,7 @@ namespace mRemoteNG.UI.Forms
private ConnectionInfo _selectedConnection;
private readonly IList<IMessageWriter> _messageWriters = new List<IMessageWriter>();
private readonly ThemeManager _themeManager;
private readonly FileBackupPruner _backupPruner = new FileBackupPruner();
internal FullscreenHandler Fullscreen { get; set; }
@@ -159,6 +161,7 @@ namespace mRemoteNG.UI.Forms
SetDefaultLayout();
Runtime.ConnectionsService.ConnectionsLoaded += ConnectionsServiceOnConnectionsLoaded;
Runtime.ConnectionsService.ConnectionsSaved += ConnectionsServiceOnConnectionsSaved;
var credsAndConsSetup = new CredsAndConsSetup();
credsAndConsSetup.LoadCredsAndCons();
@@ -217,6 +220,14 @@ namespace mRemoteNG.UI.Forms
UpdateWindowTitle();
}
private void ConnectionsServiceOnConnectionsSaved(object sender, ConnectionsSavedEventArgs connectionsSavedEventArgs)
{
if (connectionsSavedEventArgs.UsingDatabase)
return;
_backupPruner.PruneBackupFiles(connectionsSavedEventArgs.ConnectionFileName, Settings.Default.BackupFileKeepCount);
}
private void SetMenuDependencies()
{
var connectionInitiator = new ConnectionInitiator();