Merge remote-tracking branch 'origin/master' into flakes

This commit is contained in:
Eelco Dolstra
2019-09-04 13:30:11 +02:00
21 changed files with 99 additions and 72 deletions
+8 -6
View File
@@ -131,23 +131,25 @@ protected:
}
void getFile(const std::string & path,
Callback<std::shared_ptr<std::string>> callback) override
Callback<std::shared_ptr<std::string>> callback) noexcept override
{
checkEnabled();
auto request(makeRequest(path));
auto callbackPtr = std::make_shared<decltype(callback)>(std::move(callback));
getDownloader()->enqueueDownload(request,
{[callback, this](std::future<DownloadResult> result) {
{[callbackPtr, this](std::future<DownloadResult> result) {
try {
callback(result.get().data);
(*callbackPtr)(result.get().data);
} catch (DownloadError & e) {
if (e.error == Downloader::NotFound || e.error == Downloader::Forbidden)
return callback(std::shared_ptr<std::string>());
return (*callbackPtr)(std::shared_ptr<std::string>());
maybeDisable();
callback.rethrow();
callbackPtr->rethrow();
} catch (...) {
callback.rethrow();
callbackPtr->rethrow();
}
}});
}