Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libalpm/alpm.h32
-rw-r--r--lib/libalpm/dload.c3
-rw-r--r--lib/libalpm/handle.c13
-rw-r--r--lib/libalpm/handle.h1
-rw-r--r--lib/libalpm/sync.c25
5 files changed, 23 insertions, 51 deletions
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;