TransferEventArgs.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System.Globalization;
  2. using System.Runtime.InteropServices;
  3. namespace WinSCP
  4. {
  5. [Guid("772FACCC-0786-42E1-B1C8-F08D13C9CD07")]
  6. [ClassInterface(Constants.ClassInterface)]
  7. [ComVisible(true)]
  8. public sealed class TransferEventArgs : FileOperationEventArgs
  9. {
  10. public ProgressSide Side { get; internal set; }
  11. public string Destination { get; private set; }
  12. public long Length { get; private set; }
  13. public TouchEventArgs Touch { get; internal set; }
  14. public ChmodEventArgs Chmod { get; internal set; }
  15. public RemovalEventArgs Removal { get; internal set; }
  16. internal const string UploadTag = "upload";
  17. internal const string DownloadTag = "download";
  18. internal const string MkDirTag = "mkdir";
  19. internal TransferEventArgs()
  20. {
  21. }
  22. internal static TransferEventArgs Read(ProgressSide side, CustomLogReader areader)
  23. {
  24. TransferEventArgs args = new TransferEventArgs() { Side = side };
  25. using (ElementLogReader reader = new ElementLogReader(areader))
  26. {
  27. while (reader.Read(0))
  28. {
  29. if (reader.GetEmptyElementValue("filename", out string value))
  30. {
  31. args.FileName = value;
  32. }
  33. else if (reader.GetEmptyElementValue("destination", out value))
  34. {
  35. args.Destination = value;
  36. }
  37. else if (reader.GetEmptyElementValue("size", out value))
  38. {
  39. args.Length = long.Parse(value, CultureInfo.InvariantCulture);
  40. }
  41. else if (SessionRemoteException.IsResult(reader))
  42. {
  43. args.Error = SessionRemoteException.ReadResult(reader);
  44. }
  45. }
  46. }
  47. return args;
  48. }
  49. }
  50. }