Browse Source

Bug 1470: Add Side property to TransferEventArgs

https://winscp.net/tracker/1470

+ First real SynchronizeDirectories test + ProgressSide type exported to COM

Source commit: 88024169b9e71db0dd71566d3465fd830aad2ae9
Martin Prikryl 9 năm trước cách đây
mục cha
commit
bb65cd0ac5
3 tập tin đã thay đổi với 30 bổ sung15 xóa
  1. 0 1
      dotnet/FileTransferProgressEventArgs.cs
  2. 26 12
      dotnet/Session.cs
  3. 4 2
      dotnet/TransferEventArgs.cs

+ 0 - 1
dotnet/FileTransferProgressEventArgs.cs

@@ -4,7 +4,6 @@ using System.Runtime.InteropServices;
 namespace WinSCP
 {
     public enum ProgressOperation { Transfer }
-    public enum ProgressSide { Local, Remote }
 
     [Guid("E421924E-87F0-433E-AF38-CE034DC8E8CB")]
     [ClassInterface(Constants.ClassInterface)]

+ 26 - 12
dotnet/Session.cs

@@ -44,6 +44,14 @@ namespace WinSCP
         EnumerateDirectories = 0x04,
     }
 
+    [Guid("16B6D8F6-C0B4-487D-9546-A25BBF582ED6")]
+    [ComVisible(true)]
+    public enum ProgressSide
+    {
+        Local = 0,
+        Remote = 1,
+    }
+
     public delegate void OutputDataReceivedEventHandler(object sender, OutputDataReceivedEventArgs e);
     public delegate void FileTransferredEventHandler(object sender, TransferEventArgs e);
     public delegate void FileTransferProgressEventHandler(object sender, FileTransferProgressEventArgs e);
@@ -611,7 +619,7 @@ namespace WinSCP
                         if (groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag))
                         {
                             AddTransfer(result, args);
-                            args = TransferEventArgs.Read(groupReader);
+                            args = TransferEventArgs.Read(ProgressSide.Local, groupReader);
                             mkdir = false;
                         }
                         else if (groupReader.IsNonEmptyElement(TransferEventArgs.MkDirTag))
@@ -691,7 +699,7 @@ namespace WinSCP
                         if (groupReader.IsNonEmptyElement(TransferEventArgs.DownloadTag))
                         {
                             AddTransfer(result, args);
-                            args = TransferEventArgs.Read(groupReader);
+                            args = TransferEventArgs.Read(ProgressSide.Remote, groupReader);
                         }
                         else if (groupReader.IsNonEmptyElement(RemovalEventArgs.Tag))
                         {
@@ -827,18 +835,24 @@ namespace WinSCP
                 using (RegisterOperationResult(result))
                 using (CreateProgressHandler())
                 {
-                    bool transferIsUpload = false;
                     TransferEventArgs transfer = null;
 
                     while (groupReader.Read(0))
                     {
-                        bool transferWillBeUpload;
-                        if ((transferWillBeUpload = groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag)) ||
-                            groupReader.IsNonEmptyElement(TransferEventArgs.DownloadTag))
+                        ProgressSide? newSide = null;
+                        if (groupReader.IsNonEmptyElement(TransferEventArgs.UploadTag))
+                        {
+                            newSide = ProgressSide.Local;
+                        }
+                        else if (groupReader.IsNonEmptyElement(TransferEventArgs.DownloadTag))
+                        {
+                            newSide = ProgressSide.Remote;
+                        }
+
+                        if (newSide.HasValue)
                         {
-                            AddSynchronizationTransfer(result, transferIsUpload, transfer);
-                            transfer = TransferEventArgs.Read(groupReader);
-                            transferIsUpload = transferWillBeUpload;
+                            AddSynchronizationTransfer(result, transfer);
+                            transfer = TransferEventArgs.Read(newSide.Value, groupReader);
                         }
                         else if (groupReader.IsNonEmptyElement(RemovalEventArgs.Tag))
                         {
@@ -862,7 +876,7 @@ namespace WinSCP
                         }
                     }
 
-                    AddSynchronizationTransfer(result, transferIsUpload, transfer);
+                    AddSynchronizationTransfer(result, transfer);
                 }
                 return result;
             }
@@ -1236,11 +1250,11 @@ namespace WinSCP
             return flag ? string.Format(CultureInfo.InvariantCulture, "-{0}", onName) : string.Format(CultureInfo.InvariantCulture, "-{0}", offName);
         }
 
-        private void AddSynchronizationTransfer(SynchronizationResult result, bool transferIsUpload, TransferEventArgs transfer)
+        private void AddSynchronizationTransfer(SynchronizationResult result, TransferEventArgs transfer)
         {
             if (transfer != null)
             {
-                if (transferIsUpload)
+                if (transfer.Side == ProgressSide.Local)
                 {
                     result.AddUpload(transfer);
                 }

+ 4 - 2
dotnet/TransferEventArgs.cs

@@ -7,6 +7,8 @@ namespace WinSCP
     [ComVisible(true)]
     public sealed class TransferEventArgs : FileOperationEventArgs
     {
+        public ProgressSide Side { get; internal set; }
+
         public string Destination { get; private set; }
 
         public TouchEventArgs Touch { get; internal set; }
@@ -21,9 +23,9 @@ namespace WinSCP
         {
         }
 
-        internal static TransferEventArgs Read(CustomLogReader areader)
+        internal static TransferEventArgs Read(ProgressSide side, CustomLogReader areader)
         {
-            TransferEventArgs args = new TransferEventArgs();
+            TransferEventArgs args = new TransferEventArgs() { Side = side };
 
             using (ElementLogReader reader = new ElementLogReader(areader))
             {