From b823c340781eacba25b91cb7d75540c851a4ac6d Mon Sep 17 00:00:00 2001 From: Ilya P Date: Sun, 23 Oct 2016 14:12:34 +0300 Subject: [PATCH] Move upload helper to helpers --- TLSharp.Core/TLSharp.Core.csproj | 2 +- .../{Requests => Utils}/UploadHelper.cs | 271 +++++++++--------- TLSharp.Tests/TLSharpTests.cs | 1 + 3 files changed, 137 insertions(+), 137 deletions(-) rename TLSharp.Core/{Requests => Utils}/UploadHelper.cs (95%) diff --git a/TLSharp.Core/TLSharp.Core.csproj b/TLSharp.Core/TLSharp.Core.csproj index 31fee3a..0b8ac8d 100644 --- a/TLSharp.Core/TLSharp.Core.csproj +++ b/TLSharp.Core/TLSharp.Core.csproj @@ -63,7 +63,7 @@ - + diff --git a/TLSharp.Core/Requests/UploadHelper.cs b/TLSharp.Core/Utils/UploadHelper.cs similarity index 95% rename from TLSharp.Core/Requests/UploadHelper.cs rename to TLSharp.Core/Utils/UploadHelper.cs index f7d14fe..68fc176 100644 --- a/TLSharp.Core/Requests/UploadHelper.cs +++ b/TLSharp.Core/Utils/UploadHelper.cs @@ -1,136 +1,135 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Text; -using System.Threading.Tasks; -using TeleSharp.TL; -using TeleSharp.TL.Upload; -using TLSharp.Core.Utils; - -namespace TLSharp.Core.Requests -{ - public static class UploadHelper - { - private static string GetFileHash(byte[] data) - { - string md5_checksum; - using (var md5 = MD5.Create()) - { - var hash = md5.ComputeHash(data); - var hashResult = new StringBuilder(hash.Length * 2); - - foreach (byte t in hash) - hashResult.Append(t.ToString("x2")); - - md5_checksum = hashResult.ToString(); - } - - return md5_checksum; - } - - public static async Task UploadFile(this TelegramClient client, string name, StreamReader reader) - { - const long tenMb = 10 * 1024 * 1024; - return await UploadFile(name, reader, client, reader.BaseStream.Length >= tenMb); - } - - private static byte[] GetFile(StreamReader reader) - { - var file = new byte[reader.BaseStream.Length]; - - using (reader) - { - reader.BaseStream.Read(file, 0, (int)reader.BaseStream.Length); - } - - return file; - } - - private static Queue GetFileParts(byte[] file) - { - var fileParts = new Queue(); - - const int maxFilePart = 512 * 1024; - - using (var stream = new MemoryStream(file)) - { - while (stream.Position != stream.Length) - { - if ((stream.Length - stream.Position) > maxFilePart) - { - var temp = new byte[maxFilePart]; - stream.Read(temp, 0, maxFilePart); - fileParts.Enqueue(temp); - } - else - { - var length = stream.Length - stream.Position; - var temp = new byte[length]; - stream.Read(temp, 0, (int)(length)); - fileParts.Enqueue(temp); - } - } - } - - return fileParts; - } - - private static async Task UploadFile(string name, StreamReader reader, - TelegramClient client, bool isBigFileUpload) - { - var file = GetFile(reader); - var fileParts = GetFileParts(file); - - int partNumber = 0; - int partsCount = fileParts.Count; - long file_id = BitConverter.ToInt64(Helpers.GenerateRandomBytes(8), 0); - while (fileParts.Count != 0) - { - var part = fileParts.Dequeue(); - - if (isBigFileUpload) - { - await client.SendRequestAsync(new TLRequestSaveBigFilePart - { - file_id = file_id, - file_part = partNumber, - bytes = part, - file_total_parts = partsCount - }); - } - else - { - await client.SendRequestAsync(new TLRequestSaveFilePart - { - file_id = file_id, - file_part = partNumber, - bytes = part - }); - } - partNumber++; - } - - if (isBigFileUpload) - { - return new TLInputFileBig - { - id = file_id, - name = name, - parts = partsCount - }; - } - else - { - return new TLInputFile - { - id = file_id, - name = name, - parts = partsCount, - md5_checksum = GetFileHash(file) - }; - } - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using TeleSharp.TL; +using TeleSharp.TL.Upload; + +namespace TLSharp.Core.Utils +{ + public static class UploadHelper + { + private static string GetFileHash(byte[] data) + { + string md5_checksum; + using (var md5 = MD5.Create()) + { + var hash = md5.ComputeHash(data); + var hashResult = new StringBuilder(hash.Length * 2); + + foreach (byte t in hash) + hashResult.Append(t.ToString("x2")); + + md5_checksum = hashResult.ToString(); + } + + return md5_checksum; + } + + public static async Task UploadFile(this TelegramClient client, string name, StreamReader reader) + { + const long tenMb = 10 * 1024 * 1024; + return await UploadFile(name, reader, client, reader.BaseStream.Length >= tenMb); + } + + private static byte[] GetFile(StreamReader reader) + { + var file = new byte[reader.BaseStream.Length]; + + using (reader) + { + reader.BaseStream.Read(file, 0, (int)reader.BaseStream.Length); + } + + return file; + } + + private static Queue GetFileParts(byte[] file) + { + var fileParts = new Queue(); + + const int maxFilePart = 512 * 1024; + + using (var stream = new MemoryStream(file)) + { + while (stream.Position != stream.Length) + { + if ((stream.Length - stream.Position) > maxFilePart) + { + var temp = new byte[maxFilePart]; + stream.Read(temp, 0, maxFilePart); + fileParts.Enqueue(temp); + } + else + { + var length = stream.Length - stream.Position; + var temp = new byte[length]; + stream.Read(temp, 0, (int)(length)); + fileParts.Enqueue(temp); + } + } + } + + return fileParts; + } + + private static async Task UploadFile(string name, StreamReader reader, + TelegramClient client, bool isBigFileUpload) + { + var file = GetFile(reader); + var fileParts = GetFileParts(file); + + int partNumber = 0; + int partsCount = fileParts.Count; + long file_id = BitConverter.ToInt64(Helpers.GenerateRandomBytes(8), 0); + while (fileParts.Count != 0) + { + var part = fileParts.Dequeue(); + + if (isBigFileUpload) + { + await client.SendRequestAsync(new TLRequestSaveBigFilePart + { + file_id = file_id, + file_part = partNumber, + bytes = part, + file_total_parts = partsCount + }); + } + else + { + await client.SendRequestAsync(new TLRequestSaveFilePart + { + file_id = file_id, + file_part = partNumber, + bytes = part + }); + } + partNumber++; + } + + if (isBigFileUpload) + { + return new TLInputFileBig + { + id = file_id, + name = name, + parts = partsCount + }; + } + else + { + return new TLInputFile + { + id = file_id, + name = name, + parts = partsCount, + md5_checksum = GetFileHash(file) + }; + } + } + } +} diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs index 7ce34f7..05965d3 100644 --- a/TLSharp.Tests/TLSharpTests.cs +++ b/TLSharp.Tests/TLSharpTests.cs @@ -12,6 +12,7 @@ using TeleSharp.TL; using TeleSharp.TL.Messages; using TLSharp.Core; using TLSharp.Core.Requests; +using TLSharp.Core.Utils; namespace TLSharp.Tests {