From 6b4eac3ba145dd6ae96ea3200f424bd85b2db311 Mon Sep 17 00:00:00 2001 From: CvH Date: Thu, 21 Jun 2018 10:56:17 +0200 Subject: [PATCH] chrome: initial add-on --- packages/addons/browser/chrome/changelog.txt | 2 + .../addons/browser/chrome/config/Xdefaults | 1 + .../browser/chrome/config/pango.modules | 13 ++ packages/addons/browser/chrome/config/pangorc | 10 ++ .../chrome/config/pixbuf.loaders.cache | 104 ++++++++++++++++ packages/addons/browser/chrome/icon/icon.png | Bin 0 -> 36803 bytes packages/addons/browser/chrome/package.mk | 117 ++++++++++++++++++ .../chrome/source/bin/chrome-downloader | 94 ++++++++++++++ .../browser/chrome/source/bin/chrome-start | 113 +++++++++++++++++ .../addons/browser/chrome/source/default.py | 116 +++++++++++++++++ .../resources/language/English/strings.po | 46 +++++++ .../chrome/source/resources/settings.xml | 15 +++ .../chrome/source/settings-default.xml | 10 ++ 13 files changed, 641 insertions(+) create mode 100644 packages/addons/browser/chrome/changelog.txt create mode 100644 packages/addons/browser/chrome/config/Xdefaults create mode 100644 packages/addons/browser/chrome/config/pango.modules create mode 100644 packages/addons/browser/chrome/config/pangorc create mode 100644 packages/addons/browser/chrome/config/pixbuf.loaders.cache create mode 100644 packages/addons/browser/chrome/icon/icon.png create mode 100644 packages/addons/browser/chrome/package.mk create mode 100644 packages/addons/browser/chrome/source/bin/chrome-downloader create mode 100644 packages/addons/browser/chrome/source/bin/chrome-start create mode 100644 packages/addons/browser/chrome/source/default.py create mode 100644 packages/addons/browser/chrome/source/resources/language/English/strings.po create mode 100644 packages/addons/browser/chrome/source/resources/settings.xml create mode 100644 packages/addons/browser/chrome/source/settings-default.xml diff --git a/packages/addons/browser/chrome/changelog.txt b/packages/addons/browser/chrome/changelog.txt new file mode 100644 index 0000000000..fbac0f5bdd --- /dev/null +++ b/packages/addons/browser/chrome/changelog.txt @@ -0,0 +1,2 @@ +100 +- initial release diff --git a/packages/addons/browser/chrome/config/Xdefaults b/packages/addons/browser/chrome/config/Xdefaults new file mode 100644 index 0000000000..95307ee3db --- /dev/null +++ b/packages/addons/browser/chrome/config/Xdefaults @@ -0,0 +1 @@ +Xft.dpi: 96 diff --git a/packages/addons/browser/chrome/config/pango.modules b/packages/addons/browser/chrome/config/pango.modules new file mode 100644 index 0000000000..bd3e97457d --- /dev/null +++ b/packages/addons/browser/chrome/config/pango.modules @@ -0,0 +1,13 @@ +/storage/.kodi/addons/browser.chrome/pango-modules/pango-arabic-lang.so ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-basic-fc.so BasicScriptEngineFc PangoEngineShape PangoRenderFc common: +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:* +/storage/.kodi/addons/browser.chrome/pango-modules/pango-indic-lang.so sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:* + diff --git a/packages/addons/browser/chrome/config/pangorc b/packages/addons/browser/chrome/config/pangorc new file mode 100644 index 0000000000..49fb9237bb --- /dev/null +++ b/packages/addons/browser/chrome/config/pangorc @@ -0,0 +1,10 @@ +# +# pangorc file for uninstalled operation. If pango-viewer is run with +# this file in the current directory it will set it as PANGO_RC_FILE +# + +[Pango] +ModuleFiles = /storage/.kodi/addons/browser.chrome/config/pango.modules + +[PangoX] +AliasFiles = /storage/.kodi/addons/browser.chrome/config/pangx.aliases diff --git a/packages/addons/browser/chrome/config/pixbuf.loaders.cache b/packages/addons/browser/chrome/config/pixbuf.loaders.cache new file mode 100644 index 0000000000..9effded69b --- /dev/null +++ b/packages/addons/browser/chrome/config/pixbuf.loaders.cache @@ -0,0 +1,104 @@ +# How to generate those file +# cd /LE/build.LibreELEC-Generic/gdk-pixbuf-2.36.12/.install_pkg/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders +# cp /LE/build.LibreELEC-Generic/gdk-pixbuf-2.36.12/.install_pkg/usr/bin/gdk-pixbuf-query-loaders . +# ./gdk-pixbuf-query-loaders *.so > pixbuf.loaders.cache + + +# GdkPixbuf Image Loader Modules file +# Automatically generated file, do not edit +# Created by gdk-pixbuf-query-loaders from gdk-pixbuf-2.36.12 +# +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-ani.so" +"ani" 4 "gdk-pixbuf" "Windows animated cursor" "LGPL" +"application/x-navi-animation" "" +"ani" "" +"RIFF ACON" " xxxx " 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-bmp.so" +"bmp" 5 "gdk-pixbuf" "BMP" "LGPL" +"image/bmp" "image/x-bmp" "image/x-MS-bmp" "" +"bmp" "" +"BM" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-gif.so" +"gif" 4 "gdk-pixbuf" "GIF" "LGPL" +"image/gif" "" +"gif" "" +"GIF8" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-icns.so" +"icns" 4 "gdk-pixbuf" "MacOS X icon" "GPL" +"image/x-icns" "" +"icns" "" +"icns" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-ico.so" +"ico" 5 "gdk-pixbuf" "Windows icon" "LGPL" +"image/x-icon" "image/x-ico" "image/x-win-bitmap" "image/vnd.microsoft.icon" "application/ico" "image/ico" "image/icon" "text/ico" "" +"ico" "cur" "" +" \001 " "zz znz" 100 +" \002 " "zz znz" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-jpeg.so" +"jpeg" 5 "gdk-pixbuf" "JPEG" "LGPL" +"image/jpeg" "" +"jpeg" "jpe" "jpg" "" +"\377\330" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-png.so" +"png" 5 "gdk-pixbuf" "PNG" "LGPL" +"image/png" "" +"png" "" +"\211PNG\r\n\032\n" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-pnm.so" +"pnm" 4 "gdk-pixbuf" "PNM/PBM/PGM/PPM" "LGPL" +"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" "" +"pnm" "pbm" "pgm" "ppm" "" +"P1" "" 100 +"P2" "" 100 +"P3" "" 100 +"P4" "" 100 +"P5" "" 100 +"P6" "" 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-qtif.so" +"qtif" 4 "gdk-pixbuf" "QuickTime" "LGPL" +"image/x-quicktime" "image/qtif" "" +"qtif" "qif" "" +"abcdidsc" "xxxx " 100 +"abcdidat" "xxxx " 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-tga.so" +"tga" 4 "gdk-pixbuf" "Targa" "LGPL" +"image/x-tga" "" +"tga" "targa" "" +" \001\001" "x " 100 +" \001\t" "x " 100 +" \002" "xz " 99 +" \003" "xz " 100 +" \n" "xz " 100 +" \v" "xz " 100 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-tiff.so" +"tiff" 5 "gdk-pixbuf" "TIFF" "LGPL" +"image/tiff" "" +"tiff" "tif" "" +"MM *" " z " 100 +"II* " " z" 100 +"II* \020 CR\002 " " z zzz z" 0 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-xbm.so" +"xbm" 4 "gdk-pixbuf" "XBM" "LGPL" +"image/x-xbitmap" "" +"xbm" "" +"#define " "" 100 +"/*" "" 50 + +"/storage/.kodi/addons/browser.chrome/gdk-pixbuf-modules/libpixbufloader-xpm.so" +"xpm" 4 "gdk-pixbuf" "XPM" "LGPL" +"image/x-xpixmap" "" +"xpm" "" +"/* XPM */" "" 100 + + diff --git a/packages/addons/browser/chrome/icon/icon.png b/packages/addons/browser/chrome/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0baf8a323497ac26f4c7f143524b16da27eb0a00 GIT binary patch literal 36803 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 Fe*oW|ekuR} literal 0 HcmV?d00001 diff --git a/packages/addons/browser/chrome/package.mk b/packages/addons/browser/chrome/package.mk new file mode 100644 index 0000000000..d1d9755f09 --- /dev/null +++ b/packages/addons/browser/chrome/package.mk @@ -0,0 +1,117 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="chrome" +PKG_VERSION="1.0" +PKG_REV="100" +PKG_ARCH="x86_64" +PKG_LICENSE="Custom" +PKG_SITE="http://www.google.com/chrome" +PKG_DEPENDS_TARGET="toolchain at-spi2-atk atk cairo chrome-libXcomposite \ + chrome-libXdamage chrome-libXfixes chrome-libXi chrome-libXrender \ + chrome-libXtst chrome-libxcb cups gdk-pixbuf gtk3 harfbuzz \ + libXcursor libxss nss pango scrnsaverproto unclutter" +PKG_SECTION="browser" +PKG_SHORTDESC="Google Chrome Browser" +PKG_LONGDESC="Google Chrome Browser" +PKG_TOOLCHAIN="manual" + +PKG_IS_ADDON="yes" +PKG_ADDON_NAME="Chrome" +PKG_ADDON_TYPE="xbmc.python.script" +PKG_ADDON_PROVIDES="executable" + +make_target() { + : +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin \ + $ADDON_BUILD/$PKG_ADDON_ID/config \ + $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules \ + $ADDON_BUILD/$PKG_ADDON_ID/lib + + # config + cp -P $PKG_DIR/config/* $ADDON_BUILD/$PKG_ADDON_ID/config + + # atk + cp -PL $(get_build_dir atk)/.install_pkg/usr/lib/libatk-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # cairo + cp -PL $(get_build_dir cairo)/.install_pkg/usr/lib/libcairo-gobject.so.2 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir cairo)/.install_pkg/usr/lib/libcairo.so.2 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # gdk-pixbuf + cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/libgdk_pixbuf-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # gdk-pixbuf modules + cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/* $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules + + # gtk3 gdk3 + cp -PL $(get_build_dir gtk3)/.install_pkg/usr/lib/libgtk-3.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir gtk3)/.install_pkg/usr/lib/libgdk-3.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # harfbuzz + cp -PL $(get_build_dir harfbuzz)/.install_pkg/usr/lib/libharfbuzz.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir harfbuzz)/.install_pkg/usr/lib/libharfbuzz-icu.so* $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libatk-bridge + cp -PL $(get_build_dir at-spi2-atk)/.install_pkg/usr/lib/libatk-bridge-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libatspi + cp -PL $(get_build_dir at-spi2-core)/.install_pkg/usr/lib/libatspi.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libcups + cp -PL $(get_build_dir cups)/cups/libcups.so.2 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libxcb + cp -PL $(get_build_dir chrome-libxcb)/.install_pkg/usr/lib/libxcb.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXcomposite + cp -PL $(get_build_dir chrome-libXcomposite)/.install_pkg/usr/lib/libXcomposite.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXcursor + cp -PL $(get_build_dir libXcursor)/.install_pkg/usr/lib/libXcursor.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXdamage + cp -PL $(get_build_dir chrome-libXdamage)/.install_pkg/usr/lib/libXdamage.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXfixes + cp -PL $(get_build_dir chrome-libXfixes)/.install_pkg/usr/lib/libXfixes.so.3 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXi + cp -PL $(get_build_dir chrome-libXi)/.install_pkg/usr/lib/libXi.so.6 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXrender + cp -PL $(get_build_dir chrome-libXrender)/.install_pkg/usr/lib/libXrender.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libxss + cp -PL $(get_build_dir libxss)/.install_pkg/usr/lib/libXss.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # libXtst + cp -PL $(get_build_dir chrome-libXtst)/.install_pkg/usr/lib/libXtst.so.6 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # pango + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangocairo-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpango-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangoft2-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib + + # unclutter + cp -P $(get_build_dir unclutter)/.install_pkg/usr/bin/unclutter $ADDON_BUILD/$PKG_ADDON_ID/bin + +} diff --git a/packages/addons/browser/chrome/source/bin/chrome-downloader b/packages/addons/browser/chrome/source/bin/chrome-downloader new file mode 100644 index 0000000000..6ee97c3cc2 --- /dev/null +++ b/packages/addons/browser/chrome/source/bin/chrome-downloader @@ -0,0 +1,94 @@ +#!/bin/bash +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +. /etc/profile +oe_setup_addon browser.chrome + +ICON=$ADDON_DIR/resources/icon.png +CONTROL_FILE=/tmp/curl.done +DATA_FILE=/tmp/curl.data + +# check chrome version +case "$1" in + 'latest') + CHROME_VER="$(curl -s https://dl.google.com/linux/chrome/rpm/stable/x86_64/repodata/other.xml.gz | \ + gzip -df | awk -F\" '/pkgid.*-stable/{ print $10 }')" + ;; + 'repo') + CHROME_VER="67.0.3396.87" + ;; + *) + echo "Usage $0 { latest | repo }" + exit 0; + ;; +esac + +# check for enough free disk space +if [ $(df . | awk 'END {print $4}') -lt 400000 ]; then + kodi-send --action="Notification(Not enough disk space, at least 400mb are required,30000,${ICON})" >/dev/null + exit 0; +fi + +# remove install status and folders +if [ -f $ADDON_DIR/extract.ok ]; then + rm $ADDON_DIR/extract.ok +fi + +if [ -d $ADDON_DIR/chrome-bin ]; then + rm -rf $ADDON_DIR/chrome-bin +fi + +if [ -d $ADDON_DIR/tmp_download ]; then + rm -rf $ADDON_DIR/tmp_download +fi + +# create tmp download dir +mkdir -p $ADDON_DIR/tmp_download +cd $ADDON_DIR/tmp_download + +echo "Downloading Chrome version $CHROME_VER" + +# download chrome +rm -f ${CONTROL_FILE} ${DATA_FILE} +( + curl -# -O -C - http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_$CHROME_VER-1_amd64.deb 2>${DATA_FILE} + touch ${CONTROL_FILE} +) | \ + while [ : ]; do + [ -f ${DATA_FILE} ] && prog="$(tr '\r' '\n' < ${DATA_FILE} | tail -n 1 | sed -r 's/^[# ]+/#/;s/^[^0-9]*//g')" || prog= + kodi-send --action="Notification(Downloading Chrome,"${prog:-0.0%}",3000,${ICON})" >/dev/null + [ -f ${CONTROL_FILE} ] && break + sleep 4 + done + +rm -f ${CONTROL_FILE} ${DATA_FILE} + +## extract chrome +# extrat chrome.deb +kodi-send --action="Notification(Extracting Chrome,starting,1000,${ICON})" >/dev/null +ar -x google-chrome-stable_$CHROME_VER-1_amd64.deb + +# extract data.tar.xz to chrome-bin directory +mkdir $ADDON_DIR/chrome-bin +tar xf data.tar.xz --strip-components=4 -C $ADDON_DIR/chrome-bin ./opt/google/chrome + +# cleanup +rm -rf $ADDON_DIR/tmp_download +touch $ADDON_DIR/extract.ok +kodi-send --action="Notification(Extracting Chrome,finished,1000,${ICON})" >/dev/null diff --git a/packages/addons/browser/chrome/source/bin/chrome-start b/packages/addons/browser/chrome/source/bin/chrome-start new file mode 100644 index 0000000000..a03065ac45 --- /dev/null +++ b/packages/addons/browser/chrome/source/bin/chrome-start @@ -0,0 +1,113 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2016-present Team LibreELEC +# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ +. /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 repo +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 + +# 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 brokeen 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" +LIBVA_DRIVER_NAME='' +case $VAAPI_MODE in + 'intel') + LIBVA_DRIVER_NAME='i965' + chrome_OPTS="$chrome_OPTS --enable-accelerated-video" + ;; + 'amd') + LIBVA_DRIVER_NAME='vdpau' + chrome_OPTS="$chrome_OPTS --enable-accelerated-video" + ;; + 'nvidia') + LIBVA_DRIVER_NAME='vdpau' + chrome_OPTS="$chrome_OPTS --enable-accelerated-video --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 [ ! -z $ALSA_DEVICE ]; then + chrome_OPTS="$chrome_OPTS --alsa-output-device=$ALSA_DEVICE" +fi + +# HACK!!! to get sound at Chrome stop pulseaudio +systemctl stop pulseaudio + +# start chrome +LD_PRELOAD=/usr/lib/libGL.so $ADDON_DIR/chrome-bin/chrome \ + $chrome_OPTS \ + --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 + +# HACK!!! to get sound at Kodi start pulseaudio +sleep 5 +systemctl start pulseaudio diff --git a/packages/addons/browser/chrome/source/default.py b/packages/addons/browser/chrome/source/default.py new file mode 100644 index 0000000000..1ac0a2572e --- /dev/null +++ b/packages/addons/browser/chrome/source/default.py @@ -0,0 +1,116 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2018-present Team LibreELEC +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +import os +import sys +import time +import xbmcaddon +import subprocess +from xml.dom.minidom import parse + +sys.path.append('/usr/share/kodi/addons/service.libreelec.settings') + +import oe + +__addon__ = xbmcaddon.Addon(); +__path__ = os.path.join(__addon__.getAddonInfo('path'), 'bin') + '/' + +pauseXBMC = __addon__.getSetting("PAUSE_XBMC") + +def pauseXbmc(): + if pauseXBMC == "true": + xbmc.executebuiltin("PlayerControl(Stop)") + xbmc.audioSuspend() + xbmc.enableNavSounds(False) + +def resumeXbmc(): + if pauseXBMC == "true": + xbmc.audioResume() + xbmc.enableNavSounds(True) + +def startchrome(args): + try: + new_env = os.environ.copy() + new_env['VAAPI_MODE'] = __addon__.getSetting('VAAPI_MODE') + new_env['WINDOW_MODE'] = __addon__.getSetting('WINDOW_MODE') + new_env['RASTER_MODE'] = __addon__.getSetting('RASTER_MODE') + + new_env['ALSA_DEVICE'] = '' + if __addon__.getSetting('USE_CUST_AUDIODEVICE') == 'true': + alsa_device = __addon__.getSetting('CUST_AUDIODEVICE_STR') + else: + alsa_device = getAudioDevice() + if not alsa_device == None and not alsa_device == '': + new_env['ALSA_DEVICE'] = alsa_device + + chrome_params = args + ' ' + \ + __addon__.getSetting('HOMEPAGE') + subprocess.call(__path__ + 'chrome-start ' + chrome_params, shell=True, env=new_env) + except Exception, e: + oe.dbg_log('chrome', unicode(e)) + +def isRuning(pname): + tmp = os.popen("ps -Af").read() + pcount = tmp.count(pname) + if pcount > 0: + return True + return False + +def getAudioDevice(): + try: + dom = parse("/storage/.kodi/userdata/guisettings.xml") + audiooutput=dom.getElementsByTagName('audiooutput') + for node in audiooutput: + dev = node.getElementsByTagName('audiodevice')[0].childNodes[0].nodeValue + if dev.startswith("ALSA:"): + dev = dev.split("ALSA:")[1] + if dev == "@": + return None + if dev.startswith("@:"): + dev = dev.split("@:")[1] + else: + # not ALSA + return None + except: + return None + if dev.startswith("CARD="): + dev = "plughw:" + dev + return dev + +if (not __addon__.getSetting("firstrun")): + __addon__.setSetting("firstrun", "1") + __addon__.openSettings() + +try: + args = ' '.join(sys.argv[1:]) +except: + args = "" + +if args == 'widevine': + install_widevine() +elif args == 'flash': + install_flash() +else: + if not isRuning('chrome'): + pauseXbmc() + startchrome(args) + while isRuning('chrome'): + time.sleep(1) + resumeXbmc() + diff --git a/packages/addons/browser/chrome/source/resources/language/English/strings.po b/packages/addons/browser/chrome/source/resources/language/English/strings.po new file mode 100644 index 0000000000..c112a7613c --- /dev/null +++ b/packages/addons/browser/chrome/source/resources/language/English/strings.po @@ -0,0 +1,46 @@ +# Kodi Media Center language file +# Addon Name: chrome +# Addon id: browser.chrome +# Addon Provider: Team LibreELEC +msgid "" +msgstr "" + +msgctxt "#30000" +msgid "General" +msgstr "" + +msgctxt "#30001" +msgid "Chrome Configuration" +msgstr "" + +msgctxt "#30002" +msgid "Stop Kodi Player and Suspend AudioEngine" +msgstr "" + +msgctxt "#30003" +msgid "HW Acceleration Mode" +msgstr "" + +msgctxt "#30004" +msgid "Rasterization Mode" +msgstr "" + +msgctxt "#30005" +msgid "Window Mode" +msgstr "" + +msgctxt "#30006" +msgid "Default Homepage" +msgstr "" + +msgctxt "#30007" +msgid "Use Custom Audio Device" +msgstr "" + +msgctxt "#30008" +msgid "Audio Device" +msgstr "" + +msgctxt "#30009" +msgid "Hide Cursor" +msgstr "" diff --git a/packages/addons/browser/chrome/source/resources/settings.xml b/packages/addons/browser/chrome/source/resources/settings.xml new file mode 100644 index 0000000000..d7fa58d4cf --- /dev/null +++ b/packages/addons/browser/chrome/source/resources/settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/addons/browser/chrome/source/settings-default.xml b/packages/addons/browser/chrome/source/settings-default.xml new file mode 100644 index 0000000000..4eace1aefb --- /dev/null +++ b/packages/addons/browser/chrome/source/settings-default.xml @@ -0,0 +1,10 @@ + + + false + https://libreelec.tv + true + default + false + intel + maximized +