# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit cargo desktop toolchain-funcs xdg

DESCRIPTION="Modern Tauri/React desktop client for the Mumble voice chat platform"
HOMEPAGE="https://github.com/Fancy-Mumble/FancyMumble"

MY_PV="${PV/_beta/-beta.}"
SRC_URI="https://github.com/Fancy-Mumble/FancyMumble/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/FancyMumble-${MY_PV}"

# Project itself is MIT; the license list of bundled crates/npm modules is
# approximate and should be audited.
LICENSE="MIT Apache-2.0 BSD BSD-2 ISC MPL-2.0 Unicode-3.0 ZLIB"
SLOT="0"
KEYWORDS="~amd64"

# Crates (incl. the git fork of cros-libva) and npm modules are downloaded
# at unpack time from Cargo.lock / package-lock.json.
RESTRICT="network-sandbox mirror test"

RDEPEND="
	dev-libs/glib:2
	media-libs/alsa-lib
	media-libs/libva:=
	media-libs/opus
	net-libs/libsoup:3.0
	net-libs/webkit-gtk:4.1
	gnome-base/librsvg:2
	x11-libs/gtk+:3
	dev-libs/libayatana-appindicator
	x11-libs/libxcb
"
DEPEND="${RDEPEND}"
BDEPEND="
	>=dev-lang/rust-1.88
	>=net-libs/nodejs-22[npm]
	dev-vcs/git
	llvm-core/clang:21
	dev-util/patchelf
	virtual/pkgconfig
"

QA_FLAGS_IGNORED="usr/bin/fancy-mumble"

PATCHES=( "${FILESDIR}/tauri-fix-wayland-rendering.patch" )

src_unpack() {
	default

	export CARGO_HOME="${WORKDIR}/cargo_home"

	cd "${S}" || die
	einfo "Fetching Rust crates"
	cargo fetch --locked || die "cargo fetch failed"

	einfo "Fetching npm modules"
	cd crates/mumble-tauri/ui || die
	npm ci --ignore-scripts --no-audit --no-fund --cache "${WORKDIR}/npm_cache" \
		|| die "npm ci failed"
}

src_compile() {
	export CARGO_HOME="${WORKDIR}/cargo_home"
	export LIBCLANG_PATH="${EPREFIX}/usr/lib/llvm/21/$(get_libdir)"
	export CLANG_PATH="${EPREFIX}/usr/lib/llvm/21/bin/clang"
	tc-export CC CXX

	pushd crates/mumble-tauri/ui >/dev/null || die
	npm run build || die "UI build failed"
	popd >/dev/null || die

	# Upstream recommends this feature set for distro packages: no self-updater
	cargo build --release --locked --offline \
		--jobs "$(makeopts_jobs)" \
		-p mumble-tauri \
		--no-default-features --features custom-protocol \
		|| die "cargo build failed"
}

src_install() {
	newbin target/release/mumble-tauri fancy-mumble

	newicon -s 512 crates/mumble-tauri/icons/icon.png fancy-mumble.png
	make_desktop_entry fancy-mumble "Fancy Mumble" fancy-mumble \
		"Network;Chat;AudioVideo;"

	dodoc README.md
}