diff options
-rw-r--r-- | lib/libalpm/alpm.h | 16 | ||||
-rw-r--r-- | lib/libalpm/sync.c | 9 | ||||
-rw-r--r-- | src/pacman/callback.c | 4 |
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; } |