summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
authorAnatol Pomozov <anatol.pomozov@gmail.com>2020-05-06 03:28:49 +0200
committerAllan McRae <allan@archlinux.org>2020-05-09 03:58:21 +0200
commit64c4669f579dc5ad8d05329abffbd752ad0ed8f2 (patch)
treede8625be678a7fe5414961a0c92134a27728ea8c /lib/libalpm
parent6a331af27fe6dc7842725d067fd2fb4a1c60c139 (diff)
downloadpacman-64c4669f579dc5ad8d05329abffbd752ad0ed8f2.tar.gz
pacman-64c4669f579dc5ad8d05329abffbd752ad0ed8f2.tar.xz
Introduce event types for start/end database list download
Multiplexed database/files downloads will use multiple progress bars. The UI logic is quite complicated and printing error messages while handling multiple progress bars is going to be challenging. Instead we are going to save all ALPM error messages to a list and flush it at the end of the download process. Use on_progress variable that blocks error messages printing. Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/alpm.h18
-rw-r--r--lib/libalpm/be_sync.c7
-rw-r--r--lib/libalpm/sync.c6
3 files changed, 22 insertions, 9 deletions
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 2cf20343..a31f7a8a 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -402,12 +402,18 @@ typedef enum _alpm_event_type_t {
/** Scriptlet has printed information; See alpm_event_scriptlet_info_t for
* arguments. */
ALPM_EVENT_SCRIPTLET_INFO,
- /** Files will be downloaded from a repository. */
- ALPM_EVENT_RETRIEVE_START,
- /** Files were downloaded from a repository. */
- ALPM_EVENT_RETRIEVE_DONE,
- /** Not all files were successfully downloaded from a repository. */
- ALPM_EVENT_RETRIEVE_FAILED,
+ /** Database files will be downloaded from a repository. */
+ ALPM_EVENT_DB_RETRIEVE_START,
+ /** Database files were downloaded from a repository. */
+ ALPM_EVENT_DB_RETRIEVE_DONE,
+ /** Not all database files were successfully downloaded from a repository. */
+ ALPM_EVENT_DB_RETRIEVE_FAILED,
+ /** Package files will be downloaded from a repository. */
+ ALPM_EVENT_PKG_RETRIEVE_START,
+ /** Package files were downloaded from a repository. */
+ ALPM_EVENT_PKG_RETRIEVE_DONE,
+ /** Not all package files were successfully downloaded from a repository. */
+ ALPM_EVENT_PKG_RETRIEVE_FAILED,
/** A file will be downloaded from a repository; See alpm_event_pkgdownload_t
* for arguments */
ALPM_EVENT_PKGDOWNLOAD_START,
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index b4a94315..add1a576 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -308,6 +308,7 @@ int SYMEXPORT alpm_dbs_update(alpm_handle_t *handle, alpm_list_t *dbs, int force
int ret = -1;
mode_t oldmask;
alpm_list_t *payloads = NULL;
+ alpm_event_t event;
/* Sanity checks */
CHECK_HANDLE(handle, return -1);
@@ -384,10 +385,16 @@ int SYMEXPORT alpm_dbs_update(alpm_handle_t *handle, alpm_list_t *dbs, int force
}
}
+ event.type = ALPM_EVENT_DB_RETRIEVE_START;
+ EVENT(handle, &event);
ret = _alpm_multi_download(handle, payloads, syncpath);
if(ret < 0) {
+ event.type = ALPM_EVENT_DB_RETRIEVE_FAILED;
+ EVENT(handle, &event);
goto cleanup;
}
+ event.type = ALPM_EVENT_DB_RETRIEVE_DONE;
+ EVENT(handle, &event);
for(i = dbs; i; i = i->next) {
alpm_db_t *db = i->data;
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 8a9dcae8..855ca69c 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -812,9 +812,9 @@ static int download_files(alpm_handle_t *handle)
}
}
- event.type = ALPM_EVENT_RETRIEVE_START;
+ event.type = ALPM_EVENT_PKG_RETRIEVE_START;
EVENT(handle, &event);
- event.type = ALPM_EVENT_RETRIEVE_DONE;
+ event.type = ALPM_EVENT_PKG_RETRIEVE_DONE;
for(i = files; i; i = i->next) {
const alpm_pkg_t *pkg = i->data;
struct dload_payload payload = {0};
@@ -825,7 +825,7 @@ static int download_files(alpm_handle_t *handle)
if(download_single_file(handle, &payload, cachedir) == -1) {
errors++;
- event.type = ALPM_EVENT_RETRIEVE_FAILED;
+ event.type = ALPM_EVENT_PKG_RETRIEVE_FAILED;
_alpm_log(handle, ALPM_LOG_WARNING, _("failed to retrieve some files\n"));
}
_alpm_dload_payload_reset(&payload);