From 59118d428bb4305d384bd96498244aecb5cf6755 Mon Sep 17 00:00:00 2001 From: Niko Ehrenfeuchter <nikolaus.ehrenfeuchter@unibas.ch> Date: Fri, 15 Sep 2017 20:18:50 +0200 Subject: [PATCH] Auto-create user directories in incoming. If a directory in C:\Users\ has a matching one in the target location, make sure the corresponding one exists in the incoming directory. Fixes #10. --- AutoTx/AutoTx.cs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/AutoTx/AutoTx.cs b/AutoTx/AutoTx.cs index 4539298..7bdbfd5 100644 --- a/AutoTx/AutoTx.cs +++ b/AutoTx/AutoTx.cs @@ -21,10 +21,16 @@ namespace AutoTx private string _statusPath; private string _incomingPath; private string _managedPath; + + private string[] _remoteUserDirs; + private string[] _localUserDirs; + private List<string> _transferredFiles = new List<string>(); private int _txProgress; + private DateTime _lastUserDirCheck = DateTime.Now; + // the transfer state: private enum TxState { @@ -60,6 +66,7 @@ namespace AutoTx InitializeComponent(); CreateEventLog(); LoadSettings(); + CreateIncomingDirectories(); } /// <summary> @@ -410,6 +417,10 @@ namespace AutoTx CheckFreeDiskSpace(); UpdateServiceState(); + var delta = DateTime.Now - _lastUserDirCheck; + if (delta.Seconds >= 10) + CreateIncomingDirectories(); + // tasks depending on the service state: if (_serviceSuspended) { // make sure to pause any running transfer: @@ -852,6 +863,35 @@ namespace AutoTx return retval; } + /// <summary> + /// Helper to create directories for all users that have one in the local + /// user directory (C:\Users) AND in the DestinationDirectory. + /// </summary> + private void CreateIncomingDirectories() { + _localUserDirs = new DirectoryInfo(@"C:\Users") + .GetDirectories() + .Select(d => d.Name) + .ToArray(); + _remoteUserDirs = new DirectoryInfo(_config.DestinationDirectory) + .GetDirectories() + .Select(d => d.Name) + .ToArray(); + + foreach (var userDir in _localUserDirs) { + // don't create an incoming directory for the same name as the + // temporary transfer location: + if (_config.TmpTransferDir == userDir) + continue; + + // don't create a directory if it doesn't exist on the target: + if (!_remoteUserDirs.Contains(userDir)) + continue; + + CreateNewDirectory(Path.Combine(_incomingPath, userDir), false); + } + _lastUserDirCheck = DateTime.Now; + } + #endregion } -- GitLab