erickutcher / httpdownloader

HTTP(S) download manager that uses input/output completion ports (IOCP).
https://erickutcher.github.io/#HTTP_Downloader
571 stars 62 forks source link

[Feature Request] Metalink support? #269

Closed maliayas closed 7 months ago

maliayas commented 7 months ago

Supporting Metalink would be a nice addition. Thanks in advance.

erickutcher commented 7 months ago

I think I thought about this in the past. It's a lot more work than it's worth to be honest since the format looks kind of dead. You could always open the Metalink files in a text editor and pull out the URLs you want to download.

For multi-host downloads you could add them to HTTP Downloader's Add URL(s) window like this:

{
https://www.example.com/file.dat
https://www.mirroredhost.net/file.dat
}

That will split the download of file.dat between those two URLs. You can add up to 100 URLs for a single multi-host download.

If the browser extensions could intercept the Metalink files and give me the raw XML, then I could get it to work.

maliayas commented 7 months ago

Thanks for the reply. Actually I was considering drag&dropping the Metalink file rather than browser intercepting.

The case Metalink currently is superior to your syntax is the abilty to define custom subfolder for the file destination, such as: <file name="lorem/ipsum.zip">. This syntax allows to both define a custom name and also create subdirs.

In my tests, your syntax ([custom neme here]) is not designed for the subdirectory case yet. Maybe implementing only that rather than introducing a full xml parser to this "tiny" and powerful application is a better idea. What do you think?

erickutcher commented 7 months ago

I could add a new command-line parameter (--create-output-directory) for the Add URL(s) window that'll recreate the directory structure. Right now the --output-directory switch just checks to make sure that the download directory exists.

[ipsum.zip]{
https://www.example.com/test.zip
https://www.example.org/test.zip
}
--create-output-directory C:\Downloads\lorem

So in this example the --create-output-directory switch would create that directory structure if it doesn't exist and download the file to it.

I'll see what I can do with this. It might take a while since I have other projects I'm working on.

maliayas commented 7 months ago

Oh, somehow I missed the --output-directory parameter. I'll use it.

Regarding the design, instead of introducing a --create-output-directory, maybe --output-directory just should create the directory? I think that's more intuitive.

It might take a while

Sure! Thanks for taking a look into it.

erickutcher commented 7 months ago

I suppose I should just have --output-directory do it. Anyway, I have it implemented and I'll upload a new version this weekend.

maliayas commented 7 months ago

Thanks very much. You can close the issue as Metalink is not necessary any more.

erickutcher commented 7 months ago

A new version is up.

It's set to use --output-directory to create the folder structure.

[ipsum.zip]{
https://www.example.com/test.zip
https://www.example.org/test.zip
}
--output-directory C:\Downloads\lorem
maliayas commented 7 months ago

Thanks very much! Problem solved. You can close the issue as you wish.