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

EAPI=7

inherit cargo

DESCRIPTION="A Spotify playing daemon"

HOMEPAGE="https://github.com/Spotifyd/spotifyd"

LICENSE="GPL-3"

SLOT="0"

KEYWORDS="~amd64"

IUSE="pulseaudio alsa portaudio +dbus -systemd"

REQUIRED_USE="|| ( pulseaudio alsa portaudio )"

COMMON_DEPEND="dbus? ( >=sys-apps/dbus-1.12.20-r1 )
		alsa? ( >=media-libs/alsa-lib-1.2.5.1 )
		pulseaudio? ( >=media-sound/pulseaudio-13.0-r1 )
		portaudio? ( media-libs/portaudio )"

RDEPEND="${COMMON_DEPEND}
		>=media-libs/libogg-1.3.5"

DEPEND="${COMMON_DEPEND}"

BDEPEND=">=dev-lang/rust-1.53.0"

CRATES="addr2line-0.14.1
		adler-0.2.3
		aes-0.3.2
		aes-0.6.0
		aes-ctr-0.3.0
		aes-soft-0.3.3
		aes-soft-0.6.4
		aesni-0.6.0
		aesni-0.10.0
		aho-corasick-0.7.6
		alga-0.9.2
		alsa-0.2.2
		alsa-0.3.0
		alsa-sys-0.1.2
		ansi_term-0.11.0
		anyhow-1.0.26
		approx-0.3.2
		arc-swap-0.4.4
		atty-0.2.14
		autocfg-0.1.7
		autocfg-1.0.0
		backtrace-0.3.55
		base64-0.9.3
		base64-0.10.1
		base64-0.11.0
		bindgen-0.51.1
		bit-set-0.5.1
		bit-vec-0.5.1
		bitflags-0.9.1
		bitflags-1.2.1
		block-buffer-0.7.3
		block-buffer-0.9.0
		block-cipher-trait-0.6.2
		block-modes-0.3.3
		block-modes-0.7.0
		block-padding-0.1.5
		block-padding-0.2.1
		boxfnonce-0.1.1
		bumpalo-3.2.0
		byte-tools-0.3.1
		byteorder-1.3.2
		bytes-0.4.12
		bytes-0.5.4
		c2-chacha-0.2.3
		c_linked_list-1.1.1
		cc-1.0.50
		cexpr-0.3.6
		cfg-if-0.1.10
		cfg-if-1.0.0
		chrono-0.4.11
		cipher-0.2.5
		clang-sys-0.28.1
		clap-2.33.0
		cloudabi-0.0.3
		color-eyre-0.5.10
		color-spantrace-0.1.6
		core-foundation-0.6.4
		core-foundation-0.7.0
		core-foundation-sys-0.5.1
		core-foundation-sys-0.6.2
		core-foundation-sys-0.7.0
		coreaudio-rs-0.9.1
		coreaudio-sys-0.2.3
		cpal-0.8.2
		cpuid-bool-0.1.2
		crossbeam-deque-0.7.2
		crossbeam-epoch-0.8.0
		crossbeam-queue-0.1.2
		crossbeam-utils-0.6.6
		crossbeam-utils-0.7.0
		crypto-mac-0.7.0
		crypto-mac-0.10.0
		ctr-0.3.2
		daemonize-0.4.1
		darling-0.9.0
		darling_core-0.9.0
		darling_macro-0.9.0
		dbus-0.2.3
		dbus-0.6.5
		dbus-tokio-0.2.1
		derefable-0.1.0
		derive_builder-0.7.2
		derive_builder_core-0.5.0
		digest-0.8.1
		digest-0.9.0
		dotenv-0.13.0
		dtoa-0.4.4
		either-1.5.3
		encoding_rs-0.8.22
		env_logger-0.6.2
		env_logger-0.7.1
		error-chain-0.11.0
		error-chain-0.12.1
		eyre-0.6.5
		failure-0.1.7
		failure_derive-0.1.7
		fake-simd-0.1.2
		fern-0.6.0
		fnv-1.0.6
		foreign-types-0.3.2
		foreign-types-shared-0.1.1
		fuchsia-cprng-0.1.1
		fuchsia-zircon-0.3.3
		fuchsia-zircon-sys-0.3.3
		futures-0.1.29
		futures-0.3.4
		futures-channel-0.3.4
		futures-core-0.3.4
		futures-cpupool-0.1.8
		futures-executor-0.3.4
		futures-io-0.3.4
		futures-macro-0.3.4
		futures-sink-0.3.4
		futures-task-0.3.4
		futures-util-0.3.4
		gcc-0.3.55
		generic-array-0.12.3
		generic-array-0.14.4
		get_if_addrs-0.5.3
		get_if_addrs-sys-0.1.1
		gethostname-0.2.1
		getopts-0.2.21
		getrandom-0.1.14
		gimli-0.23.0
		glob-0.3.0
		h2-0.2.1
		heck-0.3.1
		hermit-abi-0.1.6
		hex-0.3.2
		hex-0.4.2
		hkdf-0.10.0
		hmac-0.7.1
		hmac-0.10.1
		hostname-0.3.1
		http-0.2.0
		http-body-0.3.1
		httparse-1.3.4
		humantime-1.3.0
		hyper-0.11.27
		hyper-0.13.2
		hyper-proxy-0.4.1
		hyper-tls-0.4.1
		ident_case-1.0.1
		idna-0.1.5
		idna-0.2.0
		indenter-0.3.2
		indexmap-1.3.0
		iovec-0.1.4
		itertools-0.8.2
		itoa-0.4.4
		js-sys-0.3.35
		kernel32-sys-0.2.2
		keyring-0.10.1
		language-tags-0.2.2
		lazy_static-1.4.0
		lewton-0.9.4
		libc-0.2.82
		libdbus-sys-0.2.1
		libloading-0.5.2
		libm-0.1.4
		libmdns-0.2.6
		libpulse-sys-0.0.0
		librespot-0.1.5
		librespot-audio-0.1.5
		librespot-connect-0.1.5
		librespot-core-0.1.5
		librespot-metadata-0.1.5
		librespot-playback-0.1.5
		librespot-protocol-0.1.5
		librespot-tremor-0.2.0
		linear-map-1.2.0
		lock_api-0.3.3
		log-0.3.9
		log-0.4.8
		match_cfg-0.1.0
		matches-0.1.8
		matrixmultiply-0.2.3
		maybe-uninit-2.0.0
		memchr-2.3.0
		memoffset-0.5.3
		mime-0.3.16
		mime_guess-2.0.1
		miniz_oxide-0.4.3
		mio-0.6.21
		mio-named-pipes-0.1.6
		mio-uds-0.6.7
		miow-0.2.1
		miow-0.3.3
		multimap-0.8.2
		nalgebra-0.18.1
		native-tls-0.2.3
		net2-0.2.33
		nix-0.9.0
		nix-0.14.1
		nom-4.2.3
		num-0.3.1
		num-bigint-0.2.5
		num-bigint-0.3.1
		num-complex-0.2.4
		num-complex-0.3.1
		num-integer-0.1.44
		num-iter-0.1.42
		num-rational-0.2.3
		num-rational-0.3.2
		num-traits-0.2.14
		num_cpus-1.11.1
		object-0.22.0
		ogg-0.7.0
		ogg-sys-0.0.9
		once_cell-1.5.2
		opaque-debug-0.2.3
		opaque-debug-0.3.0
		openssl-0.10.26
		openssl-probe-0.1.2
		openssl-sys-0.9.53
		owo-colors-1.2.1
		parking_lot-0.9.0
		parking_lot_core-0.6.2
		pbkdf2-0.3.0
		peeking_take_while-0.1.2
		percent-encoding-1.0.1
		percent-encoding-2.1.0
		pin-project-0.4.8
		pin-project-internal-0.4.8
		pin-project-lite-0.1.4
		pin-project-lite-0.2.4
		pin-utils-0.1.0-alpha.4
		pkg-config-0.3.17
		portaudio-rs-0.3.2
		portaudio-sys-0.1.1
		ppv-lite86-0.2.6
		proc-macro-error-1.0.2
		proc-macro-error-attr-1.0.2
		proc-macro-hack-0.5.11
		proc-macro-nested-0.1.3
		proc-macro2-0.4.30
		proc-macro2-1.0.19
		protobuf-2.14.0
		protobuf-codegen-2.14.0
		protobuf-codegen-pure-2.14.0
		quick-error-1.2.3
		quote-0.6.13
		quote-1.0.2
		rand-0.3.23
		rand-0.4.6
		rand-0.5.6
		rand-0.6.5
		rand-0.7.3
		rand_chacha-0.1.1
		rand_chacha-0.2.1
		rand_core-0.3.1
		rand_core-0.4.2
		rand_core-0.5.1
		rand_hc-0.1.0
		rand_hc-0.2.0
		rand_isaac-0.1.1
		rand_jitter-0.1.4
		rand_os-0.1.3
		rand_pcg-0.1.2
		rand_xorshift-0.1.1
		random-0.12.2
		rawpointer-0.2.1
		rdrand-0.4.0
		redox_syscall-0.1.56
		regex-1.3.3
		regex-syntax-0.6.13
		relay-0.1.1
		remove_dir_all-0.5.2
		reqwest-0.10.1
		rodio-0.9.0
		rpassword-3.0.2
		rspotify-0.8.0
		rustc-demangle-0.1.16
		rustc-hash-1.0.1
		rustc-serialize-0.3.24
		rustc_version-0.2.3
		ryu-1.0.2
		safemem-0.3.3
		schannel-0.1.16
		scoped-tls-0.1.2
		scopeguard-1.0.0
		secret-service-1.1.3
		security-framework-0.3.4
		security-framework-0.4.4
		security-framework-sys-0.3.3
		security-framework-sys-0.4.3
		semver-0.9.0
		semver-parser-0.7.0
		serde-1.0.115
		serde_derive-1.0.115
		serde_json-1.0.44
		serde_urlencoded-0.6.1
		sha-1-0.8.2
		sha-1-0.9.1
		sha2-0.8.1
		sha2-0.9.2
		shannon-0.2.0
		sharded-slab-0.1.1
		shell-words-0.1.0
		shlex-0.1.1
		signal-hook-0.1.12
		signal-hook-registry-1.2.0
		slab-0.3.0
		slab-0.4.2
		smallvec-0.2.1
		smallvec-0.6.13
		smallvec-1.1.0
		socket2-0.3.11
		sourcefile-0.1.4
		spotifyd-0.3.2
		stdweb-0.1.3
		stream-cipher-0.3.2
		strsim-0.7.0
		strsim-0.8.0
		structopt-0.3.17
		structopt-derive-0.4.10
		subtle-1.0.0
		subtle-2.4.0
		syn-0.15.44
		syn-1.0.39
		syn-mid-0.5.0
		synstructure-0.12.3
		syslog-4.0.1
		take-0.1.0
		tempfile-3.1.0
		termcolor-1.1.0
		textwrap-0.11.0
		thread_local-1.0.1
		time-0.1.42
		tokio-0.1.22
		tokio-0.2.11
		tokio-codec-0.1.1
		tokio-core-0.1.17
		tokio-current-thread-0.1.6
		tokio-executor-0.1.9
		tokio-fs-0.1.6
		tokio-io-0.1.13
		tokio-process-0.2.4
		tokio-proto-0.1.1
		tokio-reactor-0.1.11
		tokio-service-0.1.0
		tokio-signal-0.1.5
		tokio-signal-0.2.7
		tokio-socks-0.2.0
		tokio-sync-0.1.7
		tokio-tcp-0.1.3
		tokio-threadpool-0.1.17
		tokio-timer-0.2.12
		tokio-tls-0.3.0
		tokio-udp-0.1.5
		tokio-uds-0.2.5
		tokio-util-0.2.0
		toml-0.5.8
		tower-service-0.3.0
		tracing-0.1.22
		tracing-attributes-0.1.11
		tracing-core-0.1.17
		tracing-error-0.1.2
		tracing-subscriber-0.2.15
		try-lock-0.1.0
		try-lock-0.2.2
		typenum-1.12.0
		unicase-2.6.0
		unicode-bidi-0.3.4
		unicode-normalization-0.1.11
		unicode-segmentation-1.6.0
		unicode-width-0.1.7
		unicode-xid-0.1.0
		unicode-xid-0.2.0
		url-1.7.2
		url-2.1.1
		uuid-0.7.4
		vcpkg-0.2.8
		vec_map-0.8.1
		vergen-3.0.4
		version_check-0.1.5
		version_check-0.9.1
		void-1.0.2
		want-0.0.4
		want-0.3.0
		wasi-0.9.0+wasi-snapshot-preview1
		wasm-bindgen-0.2.58
		wasm-bindgen-backend-0.2.58
		wasm-bindgen-futures-0.4.8
		wasm-bindgen-macro-0.2.58
		wasm-bindgen-macro-support-0.2.58
		wasm-bindgen-shared-0.2.58
		wasm-bindgen-webidl-0.2.58
		web-sys-0.3.35
		webbrowser-0.5.2
		weedle-0.10.0
		whoami-0.9.0
		widestring-0.4.0
		winapi-0.2.8
		winapi-0.3.8
		winapi-build-0.1.1
		winapi-i686-pc-windows-gnu-0.4.0
		winapi-util-0.1.3
		winapi-x86_64-pc-windows-gnu-0.4.0
		winreg-0.6.2
		ws2_32-sys-0.2.1
		xdg-2.2.0"

SRC_URI="https://github.com/Spotifyd/spotifyd/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
		$(cargo_crate_uris ${CRATES})"

# Don't search the gentoo mirrors for this, you won't find it
RESTRICT="mirror"

src_configure() {
	local myfeatures=(
		$(use alsa && echo "alsa_backend")
		$(use pulseaudio && echo "pulseaudio_backend")
		$(use portaudio && echo "portaudio_backend")
		$(if use dbus ; then
			echo "dbus_keyring"
			echo "dbus_mpris"
		fi)
	)
	cargo_src_configure --no-default-features
}

src_install() {
	cargo_src_install
	# install the .service file if systemd (work/contrib/spotifyd.service)
	if ( use systemd )  then
		USERSERVICEDIR=/etc/systemd/user/
		einfo "Copying systemd service file to ${USERSERVICEDIR}"
		dodir $USERSERVICEDIR
		insinto $USERSERVICEDIR
		doins "${S}"/contrib/spotifyd.service
	fi
}

pkg_postinst() {
	einfo "You'll need to provide some info to the spotifyd process in order to play songs."
	einfo "This can be done by starting spotifyd with the proper arguments or by"
	einfo "setting up a configuration file at ~/.config/spotifyd ."
	elog "See https://spotifyd.github.io/spotifyd/config/File.html for more information."
}