]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Hide progressbar when downloading metadata
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Apr 2021 10:07:15 +0000 (10:07 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 20 Apr 2021 10:07:15 +0000 (10:07 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/dist.c
src/libpakfire/downloader.c
src/libpakfire/include/pakfire/downloader.h
src/libpakfire/repo.c
src/libpakfire/transaction.c

index 9bcdc6ea2bdd5fccc646495b054ccfb2c2b37a9c..c4bd2b4c2c541def150a5b83e09f84914bb11917 100644 (file)
@@ -168,7 +168,7 @@ static int pakfire_dist_add_source(Pakfire pakfire, struct pakfire_packager* pac
        // 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;
        }
index f33cbfbe31181dbf931a3e83b07f6b148da78f15..29d7ea0df7c48cca24310fdbed695058f93a1c8e 100644 (file)
@@ -57,6 +57,7 @@ struct pakfire_transfer {
        char title[NAME_MAX];
        char url[PATH_MAX];
        char path[PATH_MAX];
+       enum pakfire_transfer_flags flags;
        int tries;
 
        // Temporary file
@@ -236,7 +237,7 @@ static int debug_callback(CURL *handle, curl_infotype type,
 
 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
@@ -281,6 +282,9 @@ static struct pakfire_transfer* pakfire_downloader_create_transfer(
        if (mirrors)
                transfer->mirrors = pakfire_mirrorlist_ref(mirrors);
 
+       // Copy flags
+       transfer->flags = flags;
+
        // Allocate handle
        transfer->handle = curl_easy_init();
        if (!transfer->handle)
@@ -315,9 +319,9 @@ ERROR:
 
 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;
 
@@ -651,12 +655,15 @@ static int pakfire_downloader_make_single_progressbar(
 */
 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
@@ -675,16 +682,17 @@ AGAIN:
                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;
 
index b24c5eb8bad56d1ef8846ba529d045b45d17ef91..0044c040731bc150fc51d44c25afdadd57c7f1af 100644 (file)
 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);
@@ -35,10 +40,10 @@ struct pakfire_downloader* pakfire_downloader_unref(struct pakfire_downloader* d
 
 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);
 
index 1bba7117eb842f8876bb06befc7c3d1599ea49cd..e078149fbec756bca834d8f24c0f38408741c8d7 100644 (file)
@@ -175,7 +175,7 @@ struct pakfire_mirrorlist* pakfire_repo_get_mirrorlist(PakfireRepo repo) {
 }
 
 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;
@@ -188,7 +188,7 @@ static int pakfire_repo_retrieve(PakfireRepo repo, const char* title,
 
        // 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);
@@ -216,7 +216,7 @@ static int pakfire_repo_download_database(PakfireRepo repo, const char* database
        // 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) {
@@ -301,7 +301,7 @@ static int pakfire_repo_refresh_mirrorlist(PakfireRepo repo, const int force) {
        }
 
        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) {
@@ -315,7 +315,8 @@ 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;
 
index b690ba35dd6056adcc191129ecdbe98291eb5b77..88a9cb8a2cd1d0ad5a98ee91c1a203e6610417e2 100644 (file)
@@ -457,7 +457,7 @@ static int pakfire_transaction_download_package(PakfireTransaction transaction,
 
        // Add transfer to downloader
        r = pakfire_downloader_add_transfer(downloader, baseurl, mirrorlist,
-               nevra, filename, cache_path);
+               nevra, filename, cache_path, 0);
 
 ERROR:
        if (nevra)