diff --git a/AutoTx/AutoTx.cs b/AutoTx/AutoTx.cs index 4539298ff8c40eb08d75ce6f3e3dd3f10d87ee73..7bdbfd554dad5dca41143548b4b89bb75bd6046f 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 }