@@ -18,20 +18,23 @@ public AbstractProvider(IFileJobOptions jobOptions) : base(jobOptions)
1818 throw new ArgumentException ( "this instance has no information about syncing files, it has type " + JobOptions . GetType ( ) . ToString ( ) ) ;
1919 if ( syncJobOptions . SourcePath . StartsWith ( "scp:" ) )
2020 {
21- SourceAccess = new ScpAccessProvider ( syncJobOptions . SourcePath , syncJobOptions . Credentials ) ;
21+ SourceAccess = new ScpAccessProvider ( syncJobOptions . Credentials ) ;
22+
2223 }
2324 else
2425 {
25- SourceAccess = new FileIoAccessProvider ( syncJobOptions . SourcePath ) ;
26+ SourceAccess = new FileIoAccessProvider ( ) ;
2627 }
28+ SourceAccess . UpdateAccessPath ( syncJobOptions . SourcePath ) ;
2729 if ( syncJobOptions . DestinationPath . StartsWith ( "scp:" ) )
2830 {
29- DestinationAccess = new ScpAccessProvider ( syncJobOptions . DestinationPath , syncJobOptions . Credentials ) ;
31+ DestinationAccess = new ScpAccessProvider ( syncJobOptions . Credentials ) ;
3032 }
3133 else
3234 {
33- DestinationAccess = new FileIoAccessProvider ( syncJobOptions . DestinationPath ) ;
35+ DestinationAccess = new FileIoAccessProvider ( ) ;
3436 }
37+
3538 }
3639
3740 public override void DeleteFiles ( )
@@ -44,29 +47,40 @@ public override void SyncSourceToDest()
4447 if ( ! ( JobOptions is IFileSyncJobOptions jobOptions ) )
4548 throw new ArgumentException ( "this instance has no information about syncing files, it has type " + JobOptions . GetType ( ) . ToString ( ) ) ;
4649 var sw = Stopwatch . StartNew ( ) ;
50+
4751 try
4852 {
49- DestinationAccess . CreateDirectory ( "" ) ;
53+ string formattedDestinationPath = string . Format ( jobOptions . DestinationPath , DateTime . Now ) ;
54+ DestinationAccess . UpdateAccessPath ( formattedDestinationPath ) ;
5055 }
51- catch ( Exception ex ) { logger ? . LogError ( ex , "exception creating destination directory {A}" , jobOptions . DestinationPath ) ; }
52- if ( JobOptions . Credentials != null )
53- {
56+ catch ( Exception ex ) { logger ? . LogError ( ex , "exception formatting destination accesspath with DateTime.Now as 0 arg {A}" , jobOptions . DestinationPath ) ; }
5457
55- }
58+ bool createDestinationDir = true ;
5659 int copied = 0 ;
5760 int skipped = 0 ;
5861 var minimumLastWriteTime = jobOptions . RememberLastSync ? ( LastRun - jobOptions . Interval - jobOptions . Interval ) : DateTime . MinValue ;
5962 bool error_occured = false ;
6063 try
6164 {
62- var sourceFiles = SourceAccess . GetFiles ( minimumLastWriteTime . DateTime , JobOptions . SearchPattern , recursive : JobOptions . Recursive , subfolders : JobOptions . Subfolders ) ;
63-
65+ var sourceFiles = SourceAccess . GetFiles ( minimumLastWriteTime : minimumLastWriteTime . DateTime ,
66+ pattern : JobOptions . SearchPattern ,
67+ recursive : JobOptions . Recursive ,
68+ subfolders : JobOptions . Subfolders ) ;
6469 foreach ( var sourceFile in sourceFiles )
6570 {
6671 var remoteFile = DestinationAccess . GetFileInfo ( sourceFile . Name ) ;
6772 bool copy = ! remoteFile . Exists || remoteFile . Length != sourceFile . Length || remoteFile . LastWriteTime != sourceFile . LastWriteTime ;
6873 if ( copy )
6974 {
75+ if ( createDestinationDir )
76+ {
77+ try
78+ {
79+ DestinationAccess . CreateDirectory ( "" ) ;
80+ }
81+ catch ( Exception ex ) { logger ? . LogError ( ex , "exception creating destination directory {A}" , jobOptions . DestinationPath ) ; }
82+ createDestinationDir = false ;
83+ }
7084 try
7185 {
7286 logger . LogDebug ( "Copy {A}" , sourceFile . Name ) ;
@@ -100,7 +114,7 @@ public override void SyncSourceToDest()
100114 LastRun = DateTimeOffset . Now ;
101115 }
102116 }
103- catch ( Exception exc )
117+ catch ( Exception exc )
104118 {
105119 logger . LogError ( exc , "Exception in main logic of abstract provider" ) ;
106120 }
0 commit comments