#!/bin/sh
#
# OpenIPC.org | v.20211129
#

set -e

soc=$(fw_printenv -n soc) || (echo -e "\n\e[1;31mSOC not defined in U-Boot ENV ....\e[0m\n"; exit 1)
kernel=$(awk -F ':' '/"kernel"/ {print $1}' /proc/mtd)
rootfs=$(awk -F ':' '/"rootfs"/ {print $1}' /proc/mtd)
overlay=$(awk -F ':' '/"rootfs_data"/ {print $1}' /proc/mtd)
github="https://github.com/OpenIPC/firmware/releases/download/latest"
option="-s --connect-timeout 30 --max-time 60"



stop_services() {
  echo -e "\n\e[1;31mForced shutdown of services...\e[0m\n"
  killall majestic || true
  killall crond klogd ntpd rngd syslogd || true
}

check_memory() {
  echo -e "\n\e[1;31mCheck RAM size...\e[0m\n"
  free
}

download_firmware() {
  echo -e "\n\e[1;31mDownloading the latest firmware...\e[0m\n"
  curl ${option} -L ${github}/openipc.${soc}-br.tgz -o - | gzip -d | tar xvf - -C /tmp || (echo -e "\n\e[1;31mError receiving the update file, execution was interrupted....\e[0m\n"; exit 1)
}

writing_kernel() {
  echo -e "\n\e[1;31mWriting a new kernel...\e[0m\n"
  flashcp -v /tmp/uImage.${soc} /dev/${kernel}
}

writing_rootfs() {
  echo -e "\n\e[1;31mWriting a new rootfs...\e[0m\n"
  flashcp -v /tmp/rootfs.squashfs.${soc} /dev/${rootfs}
}

clearing_overlayfs() {
  echo -e "\n\e[1;31mСlearing the overlayfs partition...\e[0m\n"
  flash_eraseall -j /dev/${overlay}
}

quick_reboot() {
  echo -e "\n\e[1;31mRebooting without any questions...\e[0m\n"
  sleep 1
  reboot -f
}



if [ "$(curl -o /dev/null -s -w '%{http_code}\n' http://github.com)" != "301" ]; then
  echo -e "\n\e[1;31mThere is no access to the github.com, please check the Internet connection...\e[0m\n"
  exit 1
else
  stop_services
  download_firmware && check_memory && writing_kernel && writing_rootfs
  sleep 1
  if [ "$1" = "-n" ]; then
    clearing_overlayfs
  fi
  quick_reboot
fi