// 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, filename, cache_path);
+ r = pakfire_downloader_retrieve(downloader, BASEURL, mirrorlist,
+ NULL, filename, cache_path);
if (r)
return r;
}
TAILQ_ENTRY(pakfire_transfer) nodes;
CURL* handle;
+ char title[NAME_MAX];
char url[PATH_MAX];
char path[PATH_MAX];
int tries;
static struct pakfire_transfer* pakfire_downloader_create_transfer(
struct pakfire_downloader* downloader, const char* baseurl, struct pakfire_mirrorlist* mirrors,
- const char* url, const char* path) {
+ const char* title, const char* url, const char* path) {
DEBUG(downloader->pakfire, "Adding download of %s\n", url);
// Reset baseurl it points to an empty string
if (!transfer)
return NULL;
+ // Copy title
+ if (title) {
+ pakfire_string_set(transfer->title, title);
+
+ // Or use the filename
+ } else {
+ char* filename = pakfire_basename(url);
+ if (filename) {
+ pakfire_string_set(transfer->title, filename);
+ free(filename);
+ }
+ }
+
// Copy URL
pakfire_string_set(transfer->url, url);
}
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
- const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
+ const char* url, const char* path) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, url, path);
+ downloader, baseurl, mirrors, title, url, path);
if (!transfer)
return 1;
pakfire_progressbar_reset(downloader->progressbar);
// Add title
- char* filename = pakfire_basename(transfer->url);
- if (filename) {
- r = pakfire_progressbar_add_string(downloader->progressbar, "%s", filename);
- free(filename);
+ if (transfer->title) {
+ r = pakfire_progressbar_add_string(downloader->progressbar, "%s", transfer->title);
if (r)
return r;
}
}
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
- const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path) {
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
+ const char* url, const char* path) {
struct pakfire_transfer* transfer = pakfire_downloader_create_transfer(
- downloader, baseurl, mirrors, url, path);
+ downloader, baseurl, mirrors, title, url, path);
if (!transfer)
return 1;
struct pakfire_downloader* pakfire_downloader_unref(struct pakfire_downloader* downloader);
int pakfire_downloader_retrieve(struct pakfire_downloader* downloader,
- const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
+ const char* url, const char* path);
int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
- const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* url, const char* path);
+ const char* baseurl, struct pakfire_mirrorlist* mirrors, const char* title,
+ const char* url, const char* path);
int pakfire_downloader_run(struct pakfire_downloader* downloader);
return pakfire_mirrorlist_ref(repo->mirrorlist);
}
-static int pakfire_repo_retrieve(PakfireRepo repo, const char* url, const char* path) {
+static int pakfire_repo_retrieve(PakfireRepo repo, const char* title,
+ const char* url, const char* path) {
struct pakfire_mirrorlist* mirrorlist = NULL;
struct pakfire_downloader* downloader;
mirrorlist = pakfire_repo_get_mirrorlist(repo);
// Retrieve the database file
- r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist, url, path);
+ r = pakfire_downloader_retrieve(downloader, repo->appdata->baseurl, mirrorlist,
+ title, url, path);
if (mirrorlist)
pakfire_mirrorlist_unref(mirrorlist);
static int pakfire_repo_download_database(PakfireRepo repo, const char* database,
const char* cache_path) {
+ char title[NAME_MAX];
char database_url[PATH_MAX];
// Do nothing if the file already exists
return 0;
}
+ const char* name = pakfire_repo_get_name(repo);
+
+ // Make title
+ pakfire_string_format(title, _("Package Database: %s"), name);
+
// Make download URL
pakfire_string_format(database_url, "repodata/%s", database);
- return pakfire_repo_retrieve(repo, database_url, cache_path);
+ return pakfire_repo_retrieve(repo, title, database_url, cache_path);
}
static int pakfire_repo_read_metadata(PakfireRepo repo, const char* path, int refresh) {
}
}
- return pakfire_repo_retrieve(repo,
+ return pakfire_repo_retrieve(repo, NULL,
repo->appdata->mirrorlist_url, repo->appdata->mirrorlist);
}
}
}
- int r = pakfire_repo_retrieve(repo, "repodata/repomd.json", repo->appdata->metadata);
+ int r = pakfire_repo_retrieve(repo, NULL, "repodata/repomd.json", repo->appdata->metadata);
if (r)
return r;
PakfireRepo repo = NULL;
struct pakfire_mirrorlist* mirrorlist = NULL;
char* cache_path = NULL;
+ char* nevra = NULL;
// Fetch the repository to download from
repo = pakfire_package_get_repo(pkg);
if (!filename)
goto ERROR;
+ nevra = pakfire_package_get_nevra(pkg);
+ if (!nevra)
+ goto ERROR;
+
// Add transfer to downloader
- r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist, filename, cache_path);
+ r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist,
+ nevra, filename, cache_path);
ERROR:
+ if (nevra)
+ free(nevra);
if (cache_path)
free(cache_path);
if (mirrorlist)