(feat) proper file downloading mechanism

This commit is contained in:
b1ek 2024-02-14 11:44:10 +10:00
parent c5215c814d
commit cd3ecd81c4
Signed by: blek
GPG Key ID: 14546221E3595D0C
2 changed files with 69 additions and 10 deletions

View File

@ -60,6 +60,19 @@ user_confirm() {
done done
} }
bricksenv() {
echo "export BRICKS_DIR=$BRICKS_DIR"
echo "export BRICKS_DB=$BRICKS_DB"
echo "export AUTOMATIC=$AUTOMATIC"
}
tmpdir() {
if ! [ -f $BRICKS_DIR/.tmp ]; then
mkdir -p $BRICKS_DB/.tmp
fi
echo $BRICKS_DB/.tmp
}
# some vars # some vars
BRICKS_DIR=${BRICKS_DIR:-} BRICKS_DIR=${BRICKS_DIR:-}
PKGS=() PKGS=()
@ -170,6 +183,7 @@ if [ "${#PACDEPS[@]}" != "0" ]; then
inf "removed $removed installed pacman deps" inf "removed $removed installed pacman deps"
fi fi
# then there might actually be no work to be done
if [ "$TO_INSTALL" != "" ]; then if [ "$TO_INSTALL" != "" ]; then
inf "installing pacman packages:" inf "installing pacman packages:"
inf "$TO_INSTALL" inf "$TO_INSTALL"
@ -190,17 +204,61 @@ else
inf "no pacman deps to install" inf "no pacman deps to install"
fi fi
DOWNLOADED_FILES=()
i=1 i=1
# pacman deps installed, lets install the actual shit # pacman deps installed, lets install the actual shit
for pkg in "${PKGS[@]}"; do for pkg in "${PKGS[@]}"; do
inf "installing $pkg [$i/${#PKGS[@]}]" inf "installing $pkg [$i/${#PKGS[@]}]"
exec_brick() {
echo -e "$(bricksenv)$1" | bash
}
# first check if there is stuff we need to download for that brick
SCRIPT=" SCRIPT="
export BRICKS_DIR=$BRICKS_DIR source $(getbrick $pkg)
export BRICKS_DB=$BRICKS_DB if [ -z ${var+x} ]; then
source $(getbrick $pkg)\n echo \${downloads[@]}
install" fi
echo -e "$SCRIPT" | bash > $BRICKS_DB/.$pkg-install-log "
DOWNLOADS=$(exec_brick "$SCRIPT")
DOWNLOADS_MAP=()
if ! [ "$DOWNLOADS" == "" ]; then
DOWNLOADS=($DOWNLOADS)
inf "$(inf "downloading files for $pkg...")"
i=1
for download in $DOWNLOADS; do
curl -s $download > $(tmpdir)/$pkg-file-$i &
DOWNLOADS_MAP=(${DOWNLOADS_MAP[@]} $(tmpdir)/$pkg-file-$i)
i=$(($i + 1))
done
wait
inf "$(inf "downloaded")"
fi
DOWNLOADED_FILES=(${DOWNLOADED_FILES[@]} ${DOWNLOADS_MAP[@]})
SCRIPT="
source $(getbrick $pkg)\n
downloads=(${DOWNLOADS_MAP[@]})\n
install
"
exec_brick "$SCRIPT" > $BRICKS_DB/.$pkg-install-log
i=$(($i + 1)) i=$(($i + 1))
done done
if ! [ "${#DOWNLOADED_FILES[@]}" == "0" ]; then
inf "$(inf 'cleaning up downloaded files')"
for file in $DOWNLOADED_FILES; do
rm $file &
done
wait
fi
inf "done" inf "done"

View File

@ -4,6 +4,9 @@
# GPL3 only # GPL3 only
# uwu # uwu
downloads=(
https://example.com/script.sh
)
info() { info() {
echo this brick does this and that echo this brick does this and that
@ -23,11 +26,9 @@ pkgs() {
} }
install() { install() {
# these 2 lines are to prevent it from being installed echo this is a dummy package, it is not meant to actually be installed, silly
errcho '`example` brick is not an installable brick, its for packaging reference only' return
exit 1 sh -c "$(cat ${downloads[0]})"
sh -c "$(curl https://example.com/script.sh)"
} }
uninstall() { uninstall() {