Shard.DonwloadLibrary
1.0.2.4
See the version list below for details.
dotnet add package Shard.DonwloadLibrary --version 1.0.2.4
NuGet\Install-Package Shard.DonwloadLibrary -Version 1.0.2.4
<PackageReference Include="Shard.DonwloadLibrary" Version="1.0.2.4" />
paket add Shard.DonwloadLibrary --version 1.0.2.4
#r "nuget: Shard.DonwloadLibrary, 1.0.2.4"
// Install Shard.DonwloadLibrary as a Cake Addin #addin nuget:?package=Shard.DonwloadLibrary&version=1.0.2.4 // Install Shard.DonwloadLibrary as a Cake Tool #tool nuget:?package=Shard.DonwloadLibrary&version=1.0.2.4
DownloadLibrary
Shard HttpClient Library to handle Requests
The Shard Download Library is an on .Net 6.0 based wrapper around the HttpClient
to manage your HTTP requests. But it can also be used without the HttpClient
to handle CPU intensive tasks.
All Requests
will be handled by an PriorityQueue
in a Parallel state to have a simple and efficient way to handle many (tested with more than 1000) HTTP Requests.
- Easy to use!
- Efficient
- ✨ Contains file downloader! ✨
Features
At the moment:
- StatusRequest: Calls a Head request and returns a response message with the header information.
- OwnRequest: Wrapper around your own requests. Easy to self-expand function of handling the downloads.
- RequestContainer A container class to merge requests together and to start, pause and await them.
- Request: Main abstract class that can be used to expand functionality on class-based level.
- All subclasses have a retry function
- A completed and failed event
- A priority function
- A second thread for bigger files to hold the app responsive
- Implementation for custom
CancellationToken
and a mainCancellationTokenSource
onDownloader
to cancel all downloads
- LoadRequest: To download the response content into files.
- This is an HTTP file downloader with these functions:
- Pause and Start a download
- Resume a download
- Get the file name and extension from the server
- Monitor the progress of the download with
IProgress<float>
- Can set path and filename
- Download a specified range of a file
- Download a file into chunks
- Exclude extensions for safety (.exe; .bat.; etc...)
Expand and use as you like!
Tech
It is available on GitHub: Repository: https://github.com/Meyn1/DownloadLibrary
Installation
Installation over NuGet Package manager in Visual Studio or online. URL: https://www.nuget.org/packages/Shard.DonwloadLibrary. Package Manager Console: PM> NuGet\Install-Package Shard.DonwloadLibrary -Version 1.0.2.2
How to use
Import the Library.
using DownloaderLibrary.Requests;
Then create a new Request
object like this LoadRequest
.
This LoadRequest
downloads a file into the download's folder of the PC with a ".part" file and uses the name that the server provides.
//To download a file and store it in "Downloads" folder
new LoadRequest("[Your URL]"); // e.g. https://www.sample-videos.com/video123/mkv/240/big_buck_bunny_240p_30mb.mkv
To set options on the Request
create a RequestOption
or for a LoadRequest
a LoadRequestOption
.
// Create an option for a LoadRequest
LoadRequestOptions requestOptions = new()
{
// Sets the filename of the download without the extension
// The extension will be added automatically!
FileName = "downloadfile",
// If this download has priority (default is false)
PriorityLevel = PriorityLevel.High,
//(default is download folder)
Path = "C:\\Users\\[Your Username]\\Desktop",
// If this Request contains a heavy request put it in second thread (default is false)
IsDownload = true,
//If the downloader should Override, Create a new file or Append (default is Append)
//Resume function only available with append!
Mode = LoadMode.Create,
// Progress that writes the % to the Console
Progress = new Progress<float>(f => Console.WriteLine((f).ToString("0.0%"))),
//Chunk a file to download faster
Chunks = 3
};
And use it in the request.
//To download a file and store it on the Desktop with a different name
new LoadRequest(" https://speed.hetzner.de/100MB.bin",requestOptions);
To wait on the request, use await or WaitToFinish();.
await new LoadRequest(" https://speed.hetzner.de/100MB.bin",requestOptions).Task;
//new LoadRequest(" https://speed.hetzner.de/100MB.bin",requestOptions).WaitToFinish();
Create an OwnRequest
like this:
//Create an object that passes a CancellationToken
new OwnRequest((downloadToken) =>
{
//Create your request Message. Here the body of google.com
HttpRequestMessage requestMessage = new(HttpMethod.Get, "https://www.google.com");
//Send your request and get the result. Pass the CancellationToken for handling it later over the Request object
var response = DownloadHandler.Instance.SendAsync(requestMessage, downloadToken).Result;
//If the response does not succeed
if (!response.IsSuccessStatusCode)
return false; // Return false to retry and call the failed method
//If the response succeed. Do what you want and return to to finish the request
Console.WriteLine("Finished");
return true;
});
To create your own Request
child. Here is the implementation of the OwnRequest
class:
public class OwnRequest : Request
{
private readonly Func<CancellationToken, Task<bool>> _own;
//Parent sets the URL field but doesn't need it and doesn't require a RequestOption because it creates then a new one.
//But to use the options it have to be passed over to the parent
public OwnRequest(Func<CancellationToken, Task<bool>> own, RequestOptions? requestOptions = null) : base(string.Empty, requestOptions)
{
_own = own;
//Has to be called to inject it into the management process
Start();
}
// Here will the Request be handled and a bool returned that indicates if it succeed
protected override async Task<bool> RunRequestAsync()
{
bool result = await _own.Invoke(Token);
if (result)
Options.CompleatedAction?.Invoke(null);
else
Options.FaultedAction?.Invoke(new HttpResponseMessage());
return result;
}
}
License
MIT
Free Code and Free to Use
Have fun!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Fixed issue with retry function