#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)

# Run this script to unpack a new noobs release
#
# usage (to unpack a 9.0.2 release and update JSON files) "sudo bash noobs_unpack.sh 9.0.2"

if [ $# -eq 0 ]; then
  echo "usage: $0 VERSION [devices...]"
  exit 1
fi

# Abort at first error
set -e

# Get input
VERSION="$1"
shift

if [ $# -eq 0 ]; then
  DEVICES="RPi4"
  IMAGER_JSON="os_list_imagingutility_le.json"
else
  DEVICES="$@"
  IMAGER_JSON="os_list_imagingutility_le.json.partial"
fi

# Compare input against regex
if [[ $VERSION =~ ^[0-9]{1,2}.[0-9].[0-9]{1,3}$ ]]; then
   echo "Creating NOOBS files for LibreELEC $VERSION"
else
   echo "ERROR: Not a valid release number!" >&2; exit 1
fi

# Create noobs dir
mkdir -p noobs

# Unpack
for DEVICE in $DEVICES; do
  if [ -f LibreELEC-${DEVICE}.arm-"$VERSION"-noobs.tar ]; then
    tar -xvf LibreELEC-${DEVICE}.arm-"$VERSION"-noobs.tar
    rm -rf noobs/LibreELEC_${DEVICE}
    mv LibreELEC-${DEVICE}.arm-"$VERSION"-noobs/LibreELEC_${DEVICE} noobs/
    rm -rf LibreELEC-${DEVICE}.arm-"$VERSION"-noobs
  else
    echo "ERROR: No ${DEVICE} noobs file present!" >&2; exit 1
  fi
done

# Create symlinks to support old noobs
NOOBS="/var/www/releases/noobs"
for DEVICE in $DEVICES; do
  ln -sf $NOOBS/LibreELEC_${DEVICE}/System.tar.xz $NOOBS/LibreELEC_${DEVICE}/LibreELEC_${DEVICE}_System.tar.xz
  ln -sf $NOOBS/LibreELEC_${DEVICE}/Storage.tar.xz $NOOBS/LibreELEC_${DEVICE}/LibreELEC_${DEVICE}_Storage.tar.xz
done

# perms
chown -R www-data:www-data noobs

# Update mirrorbrain
/usr/local/bin/mb makehashes /var/www/releases -t /var/www/mirrorbrain-hashes

# NEXT, UPDATE THE JSON FILE USED BY THE Pi Foundation IMAGER TOOL

# Header
cat > "${IMAGER_JSON}" << EOL
{
    "os_list": [
EOL

FIRST_DEVICE="yes"

for DEVICE in $DEVICES; do

  # Generate SHA256
  rpi_sha256="$(gzip -d -c LibreELEC-${DEVICE}.arm-${VERSION}.img.gz  | sha256sum | cut -d ' ' -f 1)"

  # Generate SIZE
  rpi_size="$(stat -c %s LibreELEC-${DEVICE}.arm-${VERSION}.img.gz)"

  # Generate CREATE DATE
  rpi_date="$(stat -c %y LibreELEC-${DEVICE}.arm-${VERSION}.img.gz  | cut -d ' ' -f 1)"

  # Generate EXTRACTED SIZE
  rpi_extracted="$(gzip -l LibreELEC-${DEVICE}.arm-${VERSION}.img.gz  | sed -n '2p' | awk '{print $2}')"

  case "$DEVICE" in
    RPi)
      DESC="RPi0/RPi1"
      ;;
    RPi2)
      DESC="RPi2/RPi3"
      ;;
    RPi4)
      DESC="RPi4"
      ;;
    *)
      echo "ERROR: unknown device ${DEVICE}!" >&2; exit 1
      ;;
  esac

  if [ "$FIRST_DEVICE" = "no" ]; then
    cat >> "${IMAGER_JSON}" << EOL
        },
EOL
  fi
  cat >> "${IMAGER_JSON}" << EOL
        {
            "url": "https://releases.libreelec.tv/LibreELEC-${DEVICE}.arm-${VERSION}.img.gz",
            "extract_size": ${rpi_extracted},
            "extract_sha256": "${rpi_sha256}",
            "image_download_size": ${rpi_size},
            "description": "A fast and user-friendly Kodi mediacenter distro for ${DESC}",
            "icon": "https://releases.libreelec.tv/noobs/LibreELEC_RPi/LibreELEC_RPi.png",
            "name": "LibreELEC (${DESC})",
            "release_date": "${rpi_date}",
            "website": "https://libreelec.tv"
EOL
  FIRST_DEVICE="no"
done

cat >> "${IMAGER_JSON}" << EOL
        }
    ]
}
EOL

exit

