#!/bin/bash MAKE_PROGRESS_INSTANCE="main" MAKE_PROGRESS_QDBUS="qdbus name.melnichenko.nikita.make-progress.$MAKE_PROGRESS_INSTANCE" function createProgress() { PROGRESS_NAME=`$MAKE_PROGRESS_QDBUS / AddItem 'Live' 2>/dev/null` } function setProgressProperty() { if [ "$PROGRESS_NAME" == "" ] || [ "$1" == "" ] || [ "$2" == "" ]; then return; fi $MAKE_PROGRESS_QDBUS /"$PROGRESS_NAME" Set"$1" "$2" >/dev/null } function removeProgress() { if [ "$PROGRESS_NAME" == "" ]; then return; fi $MAKE_PROGRESS_QDBUS / RemoveItem "$PROGRESS_NAME" >/dev/null } function startProgress() { if [ "$PROGRESS_NAME" == "" ]; then return; fi $MAKE_PROGRESS_QDBUS /"$PROGRESS_NAME" SetSpeed 0 >/dev/null $MAKE_PROGRESS_QDBUS /"$PROGRESS_NAME" Start >/dev/null } function waitForProgress() { if [ "$PROGRESS_NAME" == "" ]; then return; fi local state=`$MAKE_PROGRESS_QDBUS /"$PROGRESS_NAME" IsStarted 2>/dev/null` while [ "$state" == "false" ] do sleep 1 state=`$MAKE_PROGRESS_QDBUS /"$PROGRESS_NAME" IsStarted 2>/dev/null` done } function processObject() { echo "Processing $1..." sleep 1 } objects=( "aaa" "bbb" "ccc" "ddd" "eee" "fff" "ggg" ) n=${#objects[@]} createProgress echo "Progress name: $PROGRESS_NAME" echo "Number of objects to process: $n" setProgressProperty "Maximum" $n setProgressProperty "Value" 0 startProgress for ((i = 0; i < n; i++)) do waitForProgress processObject "${objects[$i]}" setProgressProperty "Value" $((i+1)) done echo "Done. Delaying progress removal..." sleep 5 && removeProgress