Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src/lib/search.sh
diff options
context:
space:
mode:
authorLevente Polyak <anthraxx@archlinux.org>2024-01-18 19:44:11 +0100
committerLevente Polyak <anthraxx@archlinux.org>2024-02-06 17:37:17 +0100
commit67fdb58758db553d2c081cf16fbfb54e8d4e932d (patch)
tree1f8371b508d0f666125d6f5d7361fe5e1a3f4486 /src/lib/search.sh
parenteabb1a9313a83baa5789992004dba3eb28efd070 (diff)
feat(search): add status spinner to long running GitLab calls
This helps people to be slightly more patient as the progress status update includes the current percentage. Component: pkgctl search Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
Diffstat (limited to 'src/lib/search.sh')
-rw-r--r--src/lib/search.sh24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/lib/search.sh b/src/lib/search.sh
index e737dfa..d3bad68 100644
--- a/src/lib/search.sh
+++ b/src/lib/search.sh
@@ -14,6 +14,8 @@ source "${_DEVTOOLS_LIBRARY_DIR}"/lib/cache.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/api/gitlab.sh
# shellcheck source=src/lib/valid-search.sh
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/valid-search.sh
+# shellcheck source=src/lib/util/term.sh
+source "${_DEVTOOLS_LIBRARY_DIR}"/lib/util/term.sh
source /usr/share/makepkg/util/util.sh
source /usr/share/makepkg/util/message.sh
@@ -167,9 +169,12 @@ pkgctl_search() {
fi
# call the gitlab search API
- stat_busy "Querying gitlab search api"
- output=$(gitlab_api_search "${search}")
- stat_done
+ status_dir=$(mktemp --tmpdir="${WORKDIR}" --directory pkgctl-gitlab-api.XXXXXXXXXX)
+ printf "📡 Querying GitLab search API..." > "${status_dir}/status"
+ term_spinner_start "${status_dir}"
+ output=$(gitlab_api_search "${search}" "${status_dir}/status")
+ term_spinner_stop "${status_dir}"
+ msg_success "Querying GitLab search API"
# collect project ids whose name needs to be looked up
project_name_cache_file=$(get_cache_file gitlab/project_id_to_name)
@@ -179,7 +184,9 @@ pkgctl_search() {
grep --invert-match --file <(awk '{ print $1 }' < "${project_name_cache_file}" ))
# look up project names
- stat_busy "Querying project names"
+ tmp_file=$(mktemp --tmpdir="${WORKDIR}" pkgctl-gitlab-api-spinner.tmp.XXXXXXXXXX)
+ printf "📡 Querying GitLab project names..." > "${status_dir}/status"
+ term_spinner_start "${status_dir}"
local entries="${#project_ids[@]}"
local until=0
while (( until < entries )); do
@@ -190,6 +197,12 @@ pkgctl_search() {
fi
length=$(( until - from ))
+ percentage=$(( 100 * until / entries ))
+ printf "📡 Querying GitLab project names: %s/%s [%s] %%spinner%%" \
+ "${BOLD}${until}" "${entries}" "${percentage}%${ALL_OFF}" \
+ > "${tmp_file}"
+ mv "${tmp_file}" "${status_dir}/status"
+
project_slice=("${project_ids[@]:${from}:${length}}")
printf -v projects '"gid://gitlab/Project/%s",' "${project_slice[@]}"
query='{
@@ -214,7 +227,8 @@ pkgctl_search() {
'.[] | "\(.id | rindex("/") as $lastSlash | .[$lastSlash+1:]) \(.name)"' \
<<< "${mapping_output}")
done
- stat_done
+ term_spinner_stop "${status_dir}"
+ msg_success "Querying GitLab project names"
# read project_id to name mapping from cache
declare -A project_name_lookup=()