#!/bin/sh

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
. /etc/profile
oe_setup_addon browser.chrome

# check if chrome is already successful installed
if [ ! -f "$ADDON_DIR/extract.ok" ]; then
  cd $ADDON_DIR
  chrome-downloader
fi

if [ -e $ADDON_HOME/env ]
then
  . $ADDON_HOME/env
fi

# fix file permissons (zip packaging)
chmod +x $ADDON_DIR/chrome-bin/chrome
chmod 4755 $ADDON_DIR/chrome-bin/chrome-sandbox

# make sure we use "own" gtk/pango/nss/etc
export LD_LIBRARY_PATH=$ADDON_DIR/lib.private

# configure pango/pixbuf
export PANGO_RC_FILE=$ADDON_DIR/config/pangorc
export GDK_PIXBUF_MODULE_FILE=$ADDON_DIR/config/pixbuf.loaders.cache

# font rendering in gtk widgets is broken with nvidia blob. use our Xdefaults
export XENVIRONMENT=$ADDON_DIR/config/Xdefaults

# start unclutter
if [ "$HIDE_CURSOR" == "true" ]
then
  unclutter &
  UNCLUTTER_PID=$!
fi

# vaapi
LIBVA_DRIVERS_PATH="/usr/lib/dri:$ADDON_DIR/lib.private"
LIBVA_DRIVER_NAME=''
case $VAAPI_MODE in
  'intel')
      LIBVA_DRIVER_NAME='i965'
      chrome_OPTS="$chrome_OPTS --use-gl=desktop --enable-features=VaapiVideoDecoder"
      ;;
  'amd')
      LIBVA_DRIVER_NAME='vdpau'
      chrome_OPTS="$chrome_OPTS --use-gl=desktop --enable-features=VaapiVideoDecoder"
      ;;
  'nvidia')
      LIBVA_DRIVER_NAME='vdpau'
      chrome_OPTS="$chrome_OPTS --use-gl=desktop --enable-features=VaapiVideoDecoder --allow-no-sandbox-job --disable-gpu-sandbox"
      ;;
  *)
      LIBGL_ALWAYS_SOFTWARE='1'
      export LIBGL_ALWAYS_SOFTWARE
esac
export LIBVA_DRIVER_NAME LIBVA_DRIVERS_PATH

# windowed
case $WINDOW_MODE in
  'maximized') chrome_OPTS="$chrome_OPTS --start-maximized";;
  'kiosk') chrome_OPTS="$chrome_OPTS --kiosk";;
esac

# rasterization
case $RASTER_MODE in
  'off') chrome_OPTS="$chrome_OPTS --disable-accelerated-2d-canvas --disable-gpu-compositing";;
  'force') chrome_OPTS="$chrome_OPTS --enable-gpu-rasterization --enable-accelerated-2d-canvas --ignore-gpu-blacklist";;
esac

# alsa
if [ "$AUDIO_DEVICE_TYPE" == "ALSA" ]; then
  # stop pulseaudio when using an Alsa device
  systemctl stop pulseaudio
  if [ ! -z $ALSA_DEVICE ]; then
    chrome_OPTS="$chrome_OPTS --alsa-output-device=$ALSA_DEVICE"
  fi
fi

# dark mode
if [ "$DARK_MODE" == "true" ]
then
  chrome_OPTS="$chrome_OPTS --force-dark-mode"
fi

# User-Agent
if [ ! -z "$USER_AGENT" ]; then
  USER_AGENT="--user-agent=$USER_AGENT"
fi

# start chrome
LD_PRELOAD=/usr/lib/libGL.so $ADDON_DIR/chrome-bin/chrome \
  $chrome_OPTS \
  "$USER_AGENT" \
  --no-sandbox \
  --user-data-dir=$ADDON_HOME/profile \
  --test-type $@ \
  2>&1 | tee $ADDON_LOG_FILE

# kill unclutter
if [ "$HIDE_CURSOR" == "true" ]
then
  kill $UNCLUTTER_PID
fi

sleep 5
if [ "$AUDIO_DEVICE_TYPE" == "ALSA" ]; then
  # restart pulseaudio when using an Alsa device
  systemctl start pulseaudio
fi
