# Template file for 'element-desktop'
pkgname=element-desktop
version=1.11.0
revision=1
create_wrksrc=yes
conf_files="/etc/${pkgname}/config.json"
hostmakedepends="git yarn nodejs rust cargo python3 curl
 sqlcipher-devel libappindicator-devel libnotify-devel pkg-config
 app-builder jq moreutils"
makedepends="libsecret-devel"
depends="c-ares ffmpeg gtk+3 http-parser libevent
 libxslt minizip nss re2 snappy sqlcipher electron19"
short_desc="Glossy Matrix collaboration client, desktop version"
maintainer="Jan Christian Grünhage <jan.christian@gruenhage.xyz>"
license="Apache-2.0"
homepage="https://element.io"
_ghpage="https://github.com/vector-im"
_archive="archive/v${version}.tar.gz"
distfiles="${_ghpage}/element-desktop/${_archive}>element-desktop.tar.gz
 ${_ghpage}/element-web/${_archive}>element-web.tar.gz"
checksum="1a098b81ee4dcd2053d9fe19c37813721e7e49e53d300fb8463498fe48192105
 73d248b8d7b53d05c4a4297de125d1f350f2ddfa17b428e0aa4ed46ede5031e2"

export USE_SYSTEM_APP_BUILDER=true

post_extract() {
	mv ${pkgname}-${version} ${pkgname}
	mv ${pkgname/desktop/web}-${version} ${pkgname/desktop/web}
}

pre_patch() {
	for patch in ${pkgname}_*.patch; do
		ln -s ../${patch} ${pkgname}
	done
	for patch in ${pkgname/desktop/web}_*.patch; do
		ln -s ../${patch} ${pkgname/desktop/web}
	done
}

pre_build() {
	# since element 1.8.x it's necessary to force the npm arch
	# to x86, otherwise it will fail in electron js stuff on
	# platforms officially unsupported by electron (ppc64le...)
	local carch=x64
	case "$XBPS_TARGET_MACHINE" in
		i686*) carch=ia32 ;;
	esac

	cd ${pkgname/desktop/web}
	# Disable auto-updating
	jq '.update_base_url = ""' element.io/app/config.json | sponge element.io/app/config.json

	# Build dependencies for element-web
	npm_config_arch=$carch yarn install

	# Build dependencies and alterations for element-desktop
	cd ../${pkgname}
	vsed -i 's/"target": "deb"/"target": "dir"/g' package.json
	npm_config_arch=$carch yarn install
}

do_build() {
	cd ${pkgname/desktop/web}
	yarn build
	cd ../${pkgname}
	if [ "$CROSS_BUILD" ]; then
		yarn run build:native --target ${XBPS_CROSS_RUST_TARGET}
	else
		yarn run build:native
	fi
	# normally just "yarn run build" would be okay, but at least on ppc64
	# we need to force x86_64 arch as electron-builder does not support
	# ppc64 and fails on arch detection; ARM is supported so just use build
	case "$XBPS_TARGET_MACHINE" in
		x86_64*|ppc64*) yarn run build:64 ;;
		i686*) yarn run build:32 ;;
		*) yarn run build ;;
	esac
}

do_install() {
	cd ${pkgname/desktop/web}
	vmkdir usr/lib/element-desktop
	vmkdir etc/element-desktop
	case "$XBPS_TARGET_MACHINE" in
		i686*) vcopy ../element-desktop/dist/linux-ia32-unpacked/resources /usr/lib/element-desktop/resources;;
		*) vcopy ../element-desktop/dist/linux-unpacked/resources /usr/lib/element-desktop/resources
	esac
	vinstall config.sample.json 644 /etc/element-desktop/ config.json
	vcopy webapp /usr/lib/element-desktop/resources
	ln -s /etc/element-desktop/config.json $DESTDIR/usr/lib/element-desktop/resources/webapp/config.json

	vbin ${FILESDIR}/element-desktop
	ln -s element-desktop $DESTDIR/usr/bin/riot-desktop
	vinstall ${FILESDIR}/element-desktop.desktop 644 /usr/share/applications/ element-desktop.desktop
	vinstall webapp/themes/element/img/logos/element-logo.svg 644 /usr/share/icons/hicolor/scalable/apps/ element.svg

	for i in 16 24 48 64 96 128 256 512; do
		vinstall ../element-desktop/build/icons/${i}x${i}.png 644 /usr/share/icons/hicolor/${i}x${i}/apps/ element.png
	done
}

riot-desktop_package() {
	depends="element-desktop"
	short_desc+=" (transitional dummy package)"
	build_style=meta
}
