summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libalpm/alpm.h16
-rw-r--r--lib/libalpm/sync.c9
-rw-r--r--src/pacman/callback.c4
3 files changed, 29 insertions, 0 deletions
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index b129ff9b..5fc9c0d2 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -322,6 +322,15 @@ typedef enum _alpm_event_type_t {
ALPM_EVENT_RETRIEVE_DONE,
/** Not all files were successfully downloaded from a repository. */
ALPM_EVENT_RETRIEVE_FAILED,
+ /** A file will be downloaded from a repository; See alpm_event_pkgdownload_t
+ * for arguments */
+ ALPM_EVENT_PKGDOWNLOAD_START,
+ /** A file was downloaded from a repository; See alpm_event_pkgdownload_t
+ * for arguments */
+ ALPM_EVENT_PKGDOWNLOAD_DONE,
+ /** A file failed to be downloaded from a repository; See
+ * alpm_event_pkgdownload_t for arguments */
+ ALPM_EVENT_PKGDOWNLOAD_FAILED,
/** Disk space usage will be computed for a package. */
ALPM_EVENT_DISKSPACE_START,
/** Disk space usage was computed for a package. */
@@ -426,6 +435,13 @@ typedef struct _alpm_event_log_t {
va_list args;
} alpm_event_log_t;
+typedef struct _alpm_event_pkgdownload_t {
+ /** Type of event. */
+ alpm_event_type_t type;
+ /** Name of the file */
+ const char *file;
+} alpm_event_pkgdownload_t;
+
/** Event callback. */
typedef void (*alpm_cb_event)(alpm_event_t *);
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 68c33243..96db50a3 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -897,11 +897,16 @@ static int find_dl_candidates(alpm_db_t *repo, alpm_list_t **files, alpm_list_t
static int download_single_file(alpm_handle_t *handle, struct dload_payload *payload,
const char *cachedir)
{
+ alpm_event_pkgdownload_t event = {
+ .type = ALPM_EVENT_PKGDOWNLOAD_START,
+ .file = payload->remote_name
+ };
const alpm_list_t *server;
payload->handle = handle;
payload->allow_resume = 1;
+ EVENT(handle, &event);
for(server = payload->servers; server; server = server->next) {
const char *server_url = server->data;
size_t len;
@@ -912,6 +917,8 @@ static int download_single_file(alpm_handle_t *handle, struct dload_payload *pay
snprintf(payload->fileurl, len, "%s/%s", server_url, payload->remote_name);
if(_alpm_download(payload, cachedir, NULL, NULL) != -1) {
+ event.type = ALPM_EVENT_PKGDOWNLOAD_DONE;
+ EVENT(handle, &event);
return 0;
}
@@ -919,6 +926,8 @@ static int download_single_file(alpm_handle_t *handle, struct dload_payload *pay
payload->unlink_on_fail = 0;
}
+ event.type = ALPM_EVENT_PKGDOWNLOAD_FAILED;
+ EVENT(handle, &event);
return -1;
}
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index f512a5b4..2540b73c 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -302,6 +302,10 @@ void cb_event(alpm_event_t *event)
case ALPM_EVENT_DISKSPACE_DONE:
case ALPM_EVENT_RETRIEVE_DONE:
case ALPM_EVENT_RETRIEVE_FAILED:
+ /* we can safely ignore those as well */
+ case ALPM_EVENT_PKGDOWNLOAD_START:
+ case ALPM_EVENT_PKGDOWNLOAD_DONE:
+ case ALPM_EVENT_PKGDOWNLOAD_FAILED:
/* nothing */
break;
}