1
0

TransferOptions.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Runtime.InteropServices;
  5. namespace WinSCP
  6. {
  7. [Guid("6B19CBFA-0D81-4B36-A587-E11AA6A06214")]
  8. [ComVisible(true)]
  9. public enum TransferMode
  10. {
  11. Binary = 0,
  12. Ascii = 1,
  13. Automatic = 2,
  14. }
  15. [Guid("E0F3C3C2-C812-48F1-A711-E0BD0F703976")]
  16. [ComVisible(true)]
  17. public enum OverwriteMode
  18. {
  19. Overwrite = 0,
  20. Resume = 1,
  21. Append = 2,
  22. }
  23. [Guid("155B841F-39D4-40C8-BA87-C79675E14CE3")]
  24. [ClassInterface(Constants.ClassInterface)]
  25. [ComVisible(true)]
  26. public sealed class TransferOptions
  27. {
  28. public bool PreserveTimestamp { get; set; }
  29. public FilePermissions FilePermissions { get; set; }
  30. public TransferMode TransferMode { get; set; }
  31. public string FileMask { get; set; }
  32. public TransferResumeSupport ResumeSupport { get; set; }
  33. public int SpeedLimit { get; set; }
  34. public OverwriteMode OverwriteMode { get; set; }
  35. internal Dictionary<string, string> RawSettings { get; private set; }
  36. public TransferOptions()
  37. {
  38. PreserveTimestamp = true;
  39. TransferMode = TransferMode.Binary;
  40. ResumeSupport = new TransferResumeSupport();
  41. OverwriteMode = OverwriteMode.Overwrite;
  42. RawSettings = new Dictionary<string,string>();
  43. }
  44. public void AddRawSettings(string setting, string value)
  45. {
  46. RawSettings.Add(setting, value);
  47. }
  48. internal string ToSwitches()
  49. {
  50. List<string> switches = new List<string>();
  51. if (FilePermissions != null)
  52. {
  53. switches.Add(Session.FormatSwitch("permissions", FilePermissions.Octal));
  54. }
  55. else
  56. {
  57. switches.Add("-nopermissions");
  58. }
  59. switches.Add(Session.BooleanSwitch(PreserveTimestamp, "preservetime", "nopreservetime"));
  60. string transferModeName;
  61. switch (TransferMode)
  62. {
  63. case TransferMode.Binary:
  64. transferModeName = "binary";
  65. break;
  66. case TransferMode.Ascii:
  67. transferModeName = "ascii";
  68. break;
  69. case TransferMode.Automatic:
  70. transferModeName = "automatic";
  71. break;
  72. default:
  73. throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", TransferMode));
  74. }
  75. switches.Add(Session.FormatSwitch("transfer", transferModeName));
  76. if (!string.IsNullOrEmpty(FileMask))
  77. {
  78. switches.Add(Session.FormatSwitch("filemask", FileMask));
  79. }
  80. if (ResumeSupport.State != TransferResumeSupportState.Default)
  81. {
  82. switches.Add(Session.FormatSwitch("resumesupport", ResumeSupport.ToString()));
  83. }
  84. if (SpeedLimit > 0)
  85. {
  86. switches.Add(Session.FormatSwitch("speed", SpeedLimit.ToString(CultureInfo.InvariantCulture)));
  87. }
  88. switch (OverwriteMode)
  89. {
  90. case OverwriteMode.Overwrite:
  91. // noop
  92. break;
  93. case OverwriteMode.Resume:
  94. switches.Add(Session.FormatSwitch("resume"));
  95. break;
  96. case OverwriteMode.Append:
  97. switches.Add(Session.FormatSwitch("append"));
  98. break;
  99. default:
  100. throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, "{0} is not supported", OverwriteMode));
  101. }
  102. string arguments = string.Join(" ", switches.ToArray());
  103. Tools.AddRawParameters(ref arguments, RawSettings, "-rawtransfersettings", true);
  104. return arguments;
  105. }
  106. }
  107. }