diff --git a/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj b/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj index c26bc90..9b3e04e 100644 --- a/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj +++ b/EftPatchHelper/EftPatchHelper/EftPatchHelper.csproj @@ -25,6 +25,9 @@ Resources\Gitea.dll + + Resources\WinSCPnet.dll + diff --git a/EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs b/EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs index 3dfcdd1..3484e85 100644 --- a/EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Interfaces/IFileUpload.cs @@ -12,6 +12,7 @@ namespace EftPatchHelper.Interfaces public string ServiceName { get; set; } public string HubEntryText { get; set; } public FileInfo UploadFileInfo { get; } + public bool AddHubEntry { get; } public string GetLink(); public Task UploadAsync(IProgress? progress = null); } diff --git a/EftPatchHelper/EftPatchHelper/Model/DownloadMirror.cs b/EftPatchHelper/EftPatchHelper/Model/DownloadMirror.cs index 9e4efcd..f5cec57 100644 --- a/EftPatchHelper/EftPatchHelper/Model/DownloadMirror.cs +++ b/EftPatchHelper/EftPatchHelper/Model/DownloadMirror.cs @@ -1,7 +1,11 @@ -namespace EftPatchHelper.Model +using System.Text.Json.Serialization; + +namespace EftPatchHelper.Model { public class DownloadMirror { + [JsonIgnore] + public bool AddHubEntry { get; set; } public string Link { get; set; } public string Hash { get; set; } } diff --git a/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs b/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs index 2bb1e65..3ec7941 100644 --- a/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Model/GoFileUpload.cs @@ -18,6 +18,7 @@ namespace EftPatchHelper.Model public string DisplayName { get; set; } public string ServiceName { get; set; } public string HubEntryText { get; set; } + public bool AddHubEntry { get; } public GoFileUpload(FileInfo file, string apiToken, string folderId) { @@ -31,6 +32,7 @@ namespace EftPatchHelper.Model ServiceName = "GoFile"; DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; HubEntryText = $"Download from {ServiceName}"; + AddHubEntry = true; } public string GetLink() diff --git a/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs b/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs index 18102c7..87583d2 100644 --- a/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs +++ b/EftPatchHelper/EftPatchHelper/Model/MegaUpload.cs @@ -17,6 +17,8 @@ namespace EftPatchHelper.Model public string DisplayName { get; set; } public string ServiceName { get; set; } public string HubEntryText { get; set; } + public bool AddHubEntry { get; } + public MegaUpload(FileInfo file, string email, string password, string mfaKey = null) { @@ -27,6 +29,7 @@ namespace EftPatchHelper.Model ServiceName = "Mega"; DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; HubEntryText = $"Download from {ServiceName}"; + AddHubEntry = true; } private async Task CheckLoginStatus() diff --git a/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs b/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs new file mode 100644 index 0000000..4d9632c --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Model/SftpUpload.cs @@ -0,0 +1,72 @@ +using EftPatchHelper.Interfaces; +using WinSCP; + +namespace EftPatchHelper.Model; + +public class SftpUpload : IFileUpload +{ + private readonly SftpUploadInfo _sftpInfo; + private readonly SessionOptions _sessionOptions; + public string DisplayName { get; set; } + public string ServiceName { get; set; } + public string HubEntryText { get; set; } + public bool AddHubEntry { get; } + + public FileInfo UploadFileInfo { get; } + + public SftpUpload(FileInfo file, SftpUploadInfo sftpInfo) + { + UploadFileInfo = file; + _sftpInfo = sftpInfo; + + _sessionOptions = new SessionOptions + { + Protocol = Protocol.Sftp, + HostName = _sftpInfo.Hostname, + PortNumber = _sftpInfo.Port, + SshHostKeyFingerprint = _sftpInfo.HostKey + }; + + ServiceName = _sftpInfo.Hostname; + DisplayName = $"{ServiceName} Upload: {UploadFileInfo.Name}"; + HubEntryText = $"Download from {ServiceName}"; + AddHubEntry = false; + } + + public string GetLink() + { + return $"{_sftpInfo.HttpPath}/${UploadFileInfo.Name}"; + } + + public Task UploadAsync(IProgress? progress = null) + { + TransferOptions transferOptions = new TransferOptions() + { + TransferMode = TransferMode.Binary, + }; + + using Session session = new Session(); + using var uploadStream = UploadFileInfo.OpenRead(); + + if (progress != null) + { + session.FileTransferProgress += (_, args) => progress.Report(args.FileProgress); + } + + try + { + + session.Open(_sessionOptions); + + session.PutFile(uploadStream, _sftpInfo.uploadPath, transferOptions); + + return Task.FromResult(true); + } + catch + { + // ignored + } + + return Task.FromResult(false); + } +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Model/SftpUploadInfo.cs b/EftPatchHelper/EftPatchHelper/Model/SftpUploadInfo.cs new file mode 100644 index 0000000..ac96629 --- /dev/null +++ b/EftPatchHelper/EftPatchHelper/Model/SftpUploadInfo.cs @@ -0,0 +1,12 @@ +namespace EftPatchHelper.Model; + +public class SftpUploadInfo +{ + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + public string HostKey { get; set; } = ""; + public string Hostname { get; set; } = ""; + public int Port { get; set; } = 0; + public string uploadPath { get; set; } = ""; + public string HttpPath { get; set; } = ""; +} \ No newline at end of file diff --git a/EftPatchHelper/EftPatchHelper/Resources/WinSCPnet.dll b/EftPatchHelper/EftPatchHelper/Resources/WinSCPnet.dll new file mode 100644 index 0000000..0d01b09 Binary files /dev/null and b/EftPatchHelper/EftPatchHelper/Resources/WinSCPnet.dll differ diff --git a/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs b/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs index 68ae0c5..182cc3f 100644 --- a/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs +++ b/EftPatchHelper/EftPatchHelper/Tasks/UploadTasks.cs @@ -58,6 +58,12 @@ namespace EftPatchHelper.Tasks foreach (var pair in _options.MirrorList) { + if (!pair.Value.AddHubEntry) + { + continue; + } + + var displayText = pair.Key; var link = pair.Value.Link; @@ -90,8 +96,12 @@ namespace EftPatchHelper.Tasks static string BytesToString(long byteCount) { string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; + if (byteCount == 0) + { return "0" + suf[0]; + } + long bytes = Math.Abs(byteCount); int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); double num = Math.Round(bytes / Math.Pow(1024, place), 1); @@ -134,8 +144,9 @@ namespace EftPatchHelper.Tasks } else { - DownloadMirror mirror = new DownloadMirror() + DownloadMirror mirror = new DownloadMirror { + AddHubEntry = pair.Key.AddHubEntry, Link = pair.Key.GetLink(), Hash = GetFileHash(pair.Key.UploadFileInfo) };