# Template file for 'element-desktop'
pkgname=element-desktop
version=1.12.10
revision=2
_electronver=35
create_wrksrc=yes
build_helper="rust"
conf_files="/etc/element-desktop/config.json"
hostmakedepends="git yarn nodejs rust cargo python3 curl
 sqlcipher-devel libnotify-devel pkg-config electron-tasje"
makedepends="libsecret-devel electron${_electronver}-devel"
depends="c-ares http-parser libevent
 libxslt minizip nss snappy sqlcipher electron${_electronver}"
short_desc="Glossy Matrix collaboration client, desktop version"
maintainer="Orphaned <orphan@voidlinux.org>"
license="Apache-2.0"
homepage="https://element.io"
changelog="https://raw.githubusercontent.com/element-hq/element-desktop/develop/CHANGELOG.md"
distfiles="https://github.com/element-hq/element-desktop/archive/v${version}.tar.gz>element-desktop-v${version}.tar.gz
 https://github.com/element-hq/element-web/archive/v${version}.tar.gz>element-web-v${version}.tar.gz"
checksum="2aa491d4601b0af20c36fff0133ea19a3585b16d9217d3ec9df9fe256d6167dd
 17f6253497879f70f9c23729a25d77f0259ec7a9a43a33eeaebc45686922912b"
replaces="riot-desktop>=0"

export USE_SYSTEM_APP_BUILDER=true

post_extract() {
	mv "element-desktop-${version}" element-desktop
	mv "element-web-${version}" element-web
}

post_patch() {
	# Disable auto-updating
	vsed -e 's|"https://packages.element.io/desktop/update/"|null|' -i element-desktop/element.io/release/config.json
}

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 element-web
	yarn install --no-fund --frozen-lockfile

	cd ../element-desktop
	yarn install --no-fund --frozen-lockfile
}

do_build() {
	cd element-web
	NODE_ENV=production VERSION=${version} yarn build

	cd ../element-desktop

	yarn asar-webapp

	# add "optional" native dependencies
	# hak stands for hack
	yarn run hak

	yarn build:ts

	yarn build:res

	cat <<-EOF >tsconfig.electron-builder.json
	{
		"compilerOptions": {
			"module": "node16",
			"moduleResolution": "node16",
			"esModuleInterop": true,
			"resolveJsonModule": true,
			"skipLibCheck": true,
			"strict": true,
			"target": "es2019",
			"sourceMap": false,
			"noImplicitAny": false,
			"noEmitOnError": true,
		},
		"files": ["electron-builder.ts"]
	}
	EOF
	yarn tsc -p tsconfig.electron-builder.json
	ELECTRON_RUN_AS_NODE=1 IS_TASJE=1 node -e 'console.log(JSON.stringify(require("./electron-builder.js").default))' | awk '/^{/{x=1} x' >electron-builder.json

	yarn install --frozen-lockfile --ignore-scripts --production
	npm rebuild keytar-forked --nodedir=/usr/include/electron35/node_headers --build-from-source

	# stripping in build because it gets into asar
	/usr/bin/$STRIP .hak/hakModules/matrix-seshat/index.node

	tasje -c ./electron-builder.json pack
}

do_install() {
	vmkdir usr/lib/element-desktop/resources

	cd element-web

	vcopy webapp usr/lib/element-desktop/resources

	vinstall webapp/themes/element/img/logos/element-logo.svg 644 /usr/share/icons/hicolor/scalable/apps/ element-desktop.svg

	vinstall config.sample.json 644 etc/element-desktop config.json
	ln -s /etc/element-desktop/config.json $DESTDIR/usr/lib/element-desktop/resources/webapp/config.json

	cd ../element-desktop
	vinstall webapp.asar 644 usr/lib/element-desktop
	vinstall dist/resources/app.asar 644 usr/lib/element-desktop/resources

	vcopy build usr/lib/element-desktop/resources
	vinstall dist/element-desktop.desktop 644 usr/share/applications
	echo '' >> dist/icons/size-list
	while read -r size; do
		if [ -n "$size" ]; then
			vinstall dist/icons/$size.png 644 "usr/share/icons/hicolor/$size/apps" element-desktop.png
		fi
	done <dist/icons/size-list

	cat <<-EOF > element-desktop
	#!/bin/sh
	exec electron${_electronver} /usr/lib/element-desktop/resources/app.asar "\$@"
	EOF
	vbin element-desktop
	ln -s element-desktop "${DESTDIR}/usr/bin/riot-desktop"
}

riot-desktop_package() {
	depends="element-desktop>=${version}_${revision}"
	short_desc+=" (transitional dummy package)"
	metapackage=yes
}
