The ability to use Karazeh without the launcher. Technically this is already doable, but it would be better to provide an option to build as a library which the client can link against (and it would be free of any renderers and the launcher)
In case of an interruption or termination of the patcher while patching, the client might choose to retain the data in order not to download the whole repository again
Either have a hard-coded list of patch servers within the binary and loop through them in a round-robin fashion until an alive one is found, or by contacting a "master" patch server to retrieve a list of patch servers dynamically..
This can be achieved either by adding a whole new operation type, or by combining a DELETE op with a CREATE one. In the latter case, whenever a CREATE op is staged and finds out that the target already exists, it has to check the repository for any DELETE ops with the target as its own target.
Clearly, the second option is more complex and could be messy as things will go bad if the order of operations in the script was not properly set.
using libcurl, fetch the patch list from a remote server, store it locally, parse it, build up the patch entry list for the Patcher component to process, and download every needed file
Currently, Karazeh only checksums the actual patch file but not the target after patching, which is required to verify that the patching was done successfully. In the case it didn't, a rollback is required.
Instead of having the launcher do it which is resulting in some race conditions using certain frontends with certain thread providors... just make it the responsibility of the renderer to initiate the validation process as well as the patching (it already does the latter) when it's ready
Currently progress is injected based on files retrieved out of total files to fetch... we should report real progress as in how many bytes left for transfer