// Download the file if it does not exist in the cache
if (access(cache_path, R_OK) != 0) {
r = pakfire_downloader_retrieve(downloader, BASEURL, mirrorlist,
- NULL, filename, cache_path);
+ NULL, filename, cache_path, 0);
if (r)
return r;
}
char title[NAME_MAX];
char url[PATH_MAX];
char path[PATH_MAX];
+ enum pakfire_transfer_flags flags;
int tries;
// Temporary file
static struct pakfire_transfer* pakfire_downloader_create_transfer(
struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors,
- const char* title, const char* url, const char* path) {
+ const char* title, const char* url, const char* path, enum pakfire_transfer_flags flags) {
DEBUG(downloader->pakfire, "Adding download of %s\n", url);
// Reset baseurl it points to an empty string
if (mirrors)
transfer->mirrors = pakfire_mirrorlist_ref(mirrors);
+ // Copy flags
+ transfer->flags = flags;
+
// Allocate handle
transfer->handle = curl_easy_init();
if (!transfer->handle)
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path) {
+ const char* url, const char* path, enum pakfire_transfer_flags flags) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, title, url, path);
+ downloader, baseurl, mirrors, title, url, path, flags);
if (!transfer)
return 1;
*/
static int pakfire_downloader_perform(
struct pakfire_downloader* downloader, struct pakfire_transfer* transfer) {
+ const int has_progress = !(transfer->flags & PAKFIRE_TRANSFER_NOPROGRESS);
int r;
// Create progressbar
- r = pakfire_downloader_make_single_progressbar(downloader, transfer);
- if (r)
- return r;
+ if (has_progress) {
+ r = pakfire_downloader_make_single_progressbar(downloader, transfer);
+ if (r)
+ return r;
+ }
AGAIN:
// Prepare the transfer
goto AGAIN;
// Finish the progressbar
- pakfire_progressbar_finish(downloader->progressbar);
+ if (has_progress)
+ pakfire_progressbar_finish(downloader->progressbar);
return r;
}
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path) {
+ const char* url, const char* path, enum pakfire_transfer_flags flags) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, title, url, path);
+ downloader, baseurl, mirrors, title, url, path, flags);
if (!transfer)
return 1;
struct pakfire_downloader;
struct pakfire_mirrorlist;
+enum pakfire_transfer_flags {
+ PAKFIRE_TRANSFER_NONE = 0,
+ PAKFIRE_TRANSFER_NOPROGRESS = (1 << 0),
+};
+
int pakfire_downloader_create(struct pakfire_downloader** downloader, Pakfire pakfire);
struct pakfire_downloader* pakfire_downloader_ref(struct pakfire_downloader* downloader);
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path);
+ const char* url, const char* path, enum pakfire_transfer_flags flags);
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
- const char* url, const char* path);
+ const char* url, const char* path, enum pakfire_transfer_flags flags);
int pakfire_downloader_run(struct pakfire_downloader* downloader);
}
static int pakfire_repo_retrieve(PakfireRepo repo, const char* title,
- const char* url, const char* path) {
+ const char* url, const char* path, enum pakfire_transfer_flags flags) {
struct pakfire_mirrorlist* mirrorlist = NULL;
struct pakfire_downloader* downloader;
// Retrieve the database file
r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist,
- title, url, path);
+ title, url, path, flags);
if (mirrorlist)
pakfire_mirrorlist_unref(mirrorlist);
// Make download URL
pakfire_string_format(database_url, "repodata/%s", database);
- return pakfire_repo_retrieve(repo, title, database_url, cache_path);
+ return pakfire_repo_retrieve(repo, title, database_url, cache_path, 0);
}
static int pakfire_repo_read_metadata(PakfireRepo repo, const char* path, int refresh) {
}
return pakfire_repo_retrieve(repo, NULL,
- repo->appdata->mirrorlist_url, repo->appdata->mirrorlist);
+ repo->appdata->mirrorlist_url, repo->appdata->mirrorlist, PAKFIRE_TRANSFER_NOPROGRESS);
}
static int pakfire_repo_refresh_metadata(PakfireRepo repo, const int force) {
}
}
- int r = pakfire_repo_retrieve(repo, NULL, "repodata/repomd.json", repo->appdata->metadata);
+ int r = pakfire_repo_retrieve(repo, NULL,
+ "repodata/repomd.json", repo->appdata->metadata, PAKFIRE_TRANSFER_NOPROGRESS);
if (r)
return r;
// Add transfer to downloader
r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist,
- nevra, filename, cache_path);
+ nevra, filename, cache_path, 0);
ERROR:
if (nevra)