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

EAPI=8

PYTHON_COMPAT=( python3_{11..14} )
DISTUTILS_USE_PEP517=setuptools

inherit distutils-r1 xdg desktop

MY_PV="0.9.0"
MY_P="${PN}-${MY_PV}"

DESCRIPTION="Wallpaper downloader and manager for Linux systems"
HOMEPAGE="https://github.com/varietywalls/variety"
SRC_URI="https://github.com/varietywalls/variety/archive/refs/tags/${MY_PV}.tar.gz -> ${MY_P}.tar.gz"

S="${WORKDIR}/${MY_P}"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"

IUSE="test"
RESTRICT="!test? ( test )"

DEPEND="
	test? (
		dev-python/pylint[${PYTHON_USEDEP}]
	)
"

RDEPEND="
	x11-libs/libnotify[introspection]
	dev-python/configobj[${PYTHON_USEDEP}]
	media-libs/gexiv2[introspection]
	dev-python/pycurl[${PYTHON_USEDEP}]
	x11-libs/gtk+:3[introspection]
	dev-python/dbus-python[${PYTHON_USEDEP}]
	x11-libs/pango[introspection]
	dev-python/pygobject:3[${PYTHON_USEDEP},cairo]
	dev-python/pillow[${PYTHON_USEDEP}]
	x11-libs/gdk-pixbuf:2[introspection]
	dev-python/lxml[${PYTHON_USEDEP}]
	dev-python/beautifulsoup4[${PYTHON_USEDEP}]
	net-libs/webkit-gtk[introspection]
	media-gfx/imagemagick
	dev-python/httplib2[${PYTHON_USEDEP}]
	dev-python/requests[${PYTHON_USEDEP}]
	dev-python/packaging[${PYTHON_USEDEP}]
"

BDEPEND="
	sys-devel/gettext
	test? (
		dev-python/pylint[${PYTHON_USEDEP}]
	)
"

python_prepare_all() {
	# Remove upstream documentation to avoid incorrect installation paths
	rm -f README.md CONTRIBUTING.md AUTHORS || die
	rm -f data/ui/changes.txt || die

	# Variety requires this file; distutils-r1 does not generate it
	cat > variety_lib/variety_build_settings.py <<-EOF || die
__variety_data_directory__ = '/usr/share/variety'
EOF

	# Patch setup.py robustly so setuptools does not try to package
	# variety/data and trigger namespace/package QA warnings.
	python3 - <<'PY' || die
from pathlib import Path
p = Path("setup.py")
text = p.read_text()

replacements = {
    "package_data={'variety': ['data/**', 'locale/**']},":
        "package_data={},",
    'package_data={"variety": ["data/**", "locale/**"]},':
        'package_data={},',
    "include_package_data=True,":
        "include_package_data=False,",
}

for old, new in replacements.items():
    text = text.replace(old, new)

p.write_text(text)
PY

	# Silence deprecated PEP621 license table warning
	python3 - <<'PY' || die
from pathlib import Path
p = Path("pyproject.toml")
text = p.read_text()
text = text.replace(
    'license = { text = "GPL-3.0-only" }',
    'license = "GPL-3.0-only"'
)
p.write_text(text)
PY

	# Patch varietyconfig.py to make runtime data lookup use /usr/share/variety instead of package resources
	python3 - <<'PY' || die "Failed to patch varietyconfig.py"
import re
import sys
from pathlib import Path

p = Path("variety_lib/varietyconfig.py")
text = p.read_text()

text = text.replace('import importlib.resources', 'import os')

pattern = r"def get_data_file.*?return str\(.*?\)\)"

new_function = '''def get_data_file(*path_segments):
    """Get the full path to a data file."""
    return os.path.join("/usr/share/variety", *path_segments)'''

text, count = re.subn(pattern, new_function, text, flags=re.DOTALL)

if count == 0:
	sys.exit("Error: Could not locate get_data_file() function in varietyconfig.py")

p.write_text(text)
PY

	distutils-r1_python_prepare_all
}

python_test() {
	cd tests || die
	PYTHONPATH="${S}:${PYTHONPATH}" \
		"${EPYTHON}" -m unittest discover -p '[tT]est*.py' \
		|| die "Tests failed with ${EPYTHON}"
}

src_install() {
	distutils-r1_src_install

	# Install Variety shared data directory
	insinto /usr/share/variety
	doins -r data/config data/ui data/media data/scripts || die

	# Install desktop templates
	doins \
		data/variety-autostart.desktop.template \
		data/variety-profile.desktop.template || die

	# Compile and install translations from po/*.po
	local po lang
	for po in po/*.po; do
		[[ -f ${po} ]] || continue
		lang=${po##*/}
		lang=${lang%.po}

		dodir /usr/share/locale/${lang}/LC_MESSAGES || die
		msgfmt "${po}" -o "${ED}/usr/share/locale/${lang}/LC_MESSAGES/variety.mo" \
			|| die "msgfmt failed for ${po}"
	done

	# Install application icon
	insinto /usr/share/icons/hicolor/scalable/apps
	newins data/icons/scalable/apps/variety.svg variety.svg || die

	# Install real desktop entry from upstream template
	sed \
		-e 's/^_Name=/Name=/' \
		-e 's/^_Comment=/Comment=/' \
		variety.desktop > "${T}/variety.desktop" || die

	domenu "${T}/variety.desktop" || die
}

pkg_postinst() {
	if [[ -z ${REPLACING_VERSIONS} ]] && ! has_version dev-libs/libayatana-appindicator; then
		elog "Variety has an optional dependency on dev-libs/libayatana-appindicator."
		elog "Without it, a classic tray icon will be used."
	fi

	xdg_desktop_database_update
	xdg_icon_cache_update
}

pkg_postrm() {
	xdg_desktop_database_update
	xdg_icon_cache_update
}