[pacman-dev] [PATCH v3] Remove "total download" callback in favor of generic event callback
Total download callback called right before packages start downloaded. But we already have an event for such event (ALPM_EVENT_PKG_RETRIEVE_START) and it is naturally to use the event to pass information about expected download size. Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> --- README | 1 - lib/libalpm/alpm.h | 32 ++++++++++++-------------------- lib/libalpm/dload.c | 3 ++- lib/libalpm/handle.c | 13 ------------- lib/libalpm/handle.h | 1 - lib/libalpm/sync.c | 25 +++++++++---------------- src/pacman/callback.c | 9 ++------- src/pacman/callback.h | 2 -- src/pacman/conf.c | 4 ---- 9 files changed, 25 insertions(+), 65 deletions(-) diff --git a/README b/README index 6aa68374..470ccf3c 100644 --- a/README +++ b/README @@ -52,7 +52,6 @@ library is initialized. * logcb: The callback function for "log" operations. * dlcb: The callback function for download progress of each package. * fetchcb: Callback for custom download function. -* totaldlcb: The callback function for overall download progress. * eventcb: Callback for transaction messages. * questioncb: Callback for selecting amongst choices. * progresscb: Callback to handle display of transaction progress. diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 0909fe11..833df829 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -926,6 +926,16 @@ typedef struct _alpm_event_hook_run_t { size_t total; } alpm_event_hook_run_t; +/** Packages downloading about to start. */ +typedef struct _alpm_event_pkg_retrieve_t { + /** Type of event */ + alpm_event_type_t type; + /** Number of packages to download */ + size_t num; + /** Total size of packages to download */ + off_t total_size; +} alpm_event_pkg_retrieve_t; + /** Events. * This is a union passed to the callback that allows the frontend to know * which type of event was triggered (via type). It is then possible to @@ -954,6 +964,8 @@ typedef union _alpm_event_t { alpm_event_hook_t hook; /** A hook was ran */ alpm_event_hook_run_t hook_run; + /** Download packages */ + alpm_event_pkg_retrieve_t pkg_retrieve; } alpm_event_t; /** Event callback. @@ -1197,12 +1209,6 @@ typedef void (*alpm_cb_download)(const char *filename, alpm_download_event_type_t event, void *data); -/** Total Download callback. - * @param howmany the number of packages that will be downloaded during \link alpm_trans_commit \endlink. - * @param total amount that will be downloaded during \link alpm_trans_commit \endlink. - */ -typedef void (*alpm_cb_totaldl)(size_t howmany, off_t total); - /** A callback for downloading files * @param url the URL of the file to be downloaded * @param localpath the directory to which the file should be downloaded @@ -1525,20 +1531,6 @@ alpm_cb_fetch alpm_option_get_fetchcb(alpm_handle_t *handle); */ int alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb); -/** Returns the callback used to report total download size. - * @param handle the context handle - * @return the currently set total download callback - */ -alpm_cb_totaldl alpm_option_get_totaldlcb(alpm_handle_t *handle); - -/** Sets the callback used to report total download size. - * @param handle the context handle - * @param cb the cb to use - * @return 0 on success, -1 on error (pm_errno is set accordingly) - */ -int alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb); - - /** Returns the callback used for events. * @param handle the context handle * @return the currently set event callback diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 0d0936c7..3e20d335 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -851,7 +851,7 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls, const char *cachedir; alpm_list_t *payloads = NULL; const alpm_list_t *i; - alpm_event_t event; + alpm_event_t event = {0}; CHECK_HANDLE(handle, return -1); ASSERT(*fetched == NULL, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1)); @@ -884,6 +884,7 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls, if(payloads) { event.type = ALPM_EVENT_PKG_RETRIEVE_START; + event.pkg_retrieve.num = alpm_list_count(payloads); EVENT(handle, &event); if(_alpm_download(handle, payloads, cachedir) == -1) { _alpm_log(handle, ALPM_LOG_WARNING, _("failed to retrieve some files\n")); diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index d1ea5886..7b8cb1da 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -174,12 +174,6 @@ alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb(alpm_handle_t *handle) return handle->fetchcb; } -alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb(alpm_handle_t *handle) -{ - CHECK_HANDLE(handle, return NULL); - return handle->totaldlcb; -} - alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle) { CHECK_HANDLE(handle, return NULL); @@ -327,13 +321,6 @@ int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb) return 0; } -int SYMEXPORT alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb) -{ - CHECK_HANDLE(handle, return -1); - handle->totaldlcb = cb; - return 0; -} - int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb) { CHECK_HANDLE(handle, return -1); diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h index 349ef2c7..2ebaafb2 100644 --- a/lib/libalpm/handle.h +++ b/lib/libalpm/handle.h @@ -72,7 +72,6 @@ struct __alpm_handle_t { /* callback functions */ alpm_cb_log logcb; /* Log callback function */ alpm_cb_download dlcb; /* Download callback function */ - alpm_cb_totaldl totaldlcb; /* Total download callback function */ alpm_cb_fetch fetchcb; /* Download file callback function */ alpm_cb_event eventcb; alpm_cb_question questioncb; diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index d258b8d1..7fa50a13 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -749,7 +749,7 @@ static int download_files(alpm_handle_t *handle) const char *cachedir; alpm_list_t *i, *files = NULL; int ret = 0; - alpm_event_t event; + alpm_event_t event = {0}; alpm_list_t *payloads = NULL; cachedir = _alpm_filecache_setup(handle); @@ -760,21 +760,6 @@ static int download_files(alpm_handle_t *handle) goto finish; } - /* Total progress - figure out the total download size if required to - * pass to the callback. This function is called once, and it is up to the - * frontend to compute incremental progress. */ - if(handle->totaldlcb) { - off_t total_size = (off_t)0; - size_t howmany = 0; - /* sum up the download size for each package and store total */ - for(i = files; i; i = i->next) { - alpm_pkg_t *spkg = i->data; - total_size += spkg->download_size; - howmany++; - } - handle->totaldlcb(howmany, total_size); - } - if(files) { /* check for necessary disk space for download */ if(handle->checkspace) { @@ -800,6 +785,14 @@ static int download_files(alpm_handle_t *handle) } event.type = ALPM_EVENT_PKG_RETRIEVE_START; + + /* sum up the number of packages to download and its total size */ + for(i = files; i; i = i->next) { + alpm_pkg_t *spkg = i->data; + event.pkg_retrieve.total_size += spkg->download_size; + event.pkg_retrieve.num++; + } + EVENT(handle, &event); for(i = files; i; i = i->next) { alpm_pkg_t *pkg = i->data; diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 40973340..a28a79a9 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -338,6 +338,8 @@ void cb_event(alpm_event_t *event) case ALPM_EVENT_PKG_RETRIEVE_START: colon_printf(_("Retrieving packages...\n")); on_progress = 1; + list_total_pkgs = event->pkg_retrieve.num; + list_total = event->pkg_retrieve.total_size; total_enabled = config->totaldownload && list_total; if(total_enabled) { init_total_progressbar(); @@ -696,13 +698,6 @@ void cb_progress(alpm_progress_t event, const char *pkgname, int percent, } } -/* callback to handle receipt of total download value */ -void cb_dl_total(size_t howmany, off_t total) -{ - list_total_pkgs = howmany; - list_total = total; -} - static int dload_progressbar_enabled(void) { return !config->noprogressbar && (getcols() != 0); diff --git a/src/pacman/callback.h b/src/pacman/callback.h index 9b5deb6f..8ac9d960 100644 --- a/src/pacman/callback.h +++ b/src/pacman/callback.h @@ -35,8 +35,6 @@ void cb_question(alpm_question_t *question); void cb_progress(alpm_progress_t event, const char *pkgname, int percent, size_t howmany, size_t remain); -/* callback to handle receipt of total download value */ -void cb_dl_total(size_t howmany, off_t total); /* callback to handle display of download progress */ void cb_download(const char *filename, alpm_download_event_type_t event, void *data); diff --git a/src/pacman/conf.c b/src/pacman/conf.c index 96e5790f..a4f2ba35 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -892,10 +892,6 @@ static int setup_libalpm(void) pm_printf(ALPM_LOG_WARNING, _("no '%s' configured\n"), "XferCommand"); } - if(config->totaldownload) { - alpm_option_set_totaldlcb(handle, cb_dl_total); - } - alpm_option_set_arch(handle, config->arch); alpm_option_set_checkspace(handle, config->checkspace); alpm_option_set_usesyslog(handle, config->usesyslog); -- 2.31.0
participants (1)
-
Anatol Pomozov