# Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # Author: Matthias Schwarzott # Author: Joerg Bornkessel DESCRIPTION="Manage VDR plugins" MAINTAINER="vdr@gentoo.org" inherit multilib find_plugins() { local plugins plugin f plugindir="${EROOT}/usr/$(get_libdir)/vdr/plugins" for f in ${plugindir}/libvdr-*.so* ; do [[ -e ${f} ]] || continue plugin="${f##*/libvdr-}" plugin="${plugin%.so.*}" plugins="${plugins}\n${plugin}" done echo -ne ${plugins} | sort -u } show_enabled_plugins() { local plugins line conffile="${EROOT}/etc/conf.d/vdr.plugins" exec 3<${conffile} while read plugin <&3; do [ "${plugin}" = "" ] && continue [ "${plugin#"#"}" != "${plugin}" ] && continue plugins="${plugins}\n${plugin}" done echo -ne ${plugins} | sort -u } is_enabled() { local conffile="${EROOT}/etc/conf.d/vdr.plugins" egrep -q "^${1}\$" "${conffile}" || return 1 return 0 } plugin_exists() { local f plugindir="${EROOT}/usr/$(get_libdir)/vdr/plugins" for f in ${plugindir}/libvdr-${1}.so.*; do [[ -e "${f}" ]] && return 0 done return 1 } ### show action ### describe_show() { echo "Show enabled VDR plugins" } do_show() { local plugins [[ -z "${@}" ]] || die -q "Too many parameters" plugins=( $(show_enabled_plugins) ) write_list_start "Enabled VDR plugins:" if [[ -n "${plugins[@]}" ]] ; then set -- "${plugins[@]}" for plugin; do write_kv_list_entry "${plugin}" "" done else write_kv_list_entry "(none enabled)" "" fi } ### list action ### describe_list() { echo "List available VDR plugins" } do_list() { local opts plugins=( $(find_plugins) ) write_list_start "Available VDR plugins:" for (( n = 0 ; n < ${#plugins[@]} ; ++n )) ; do is_enabled ${plugins[${n}]} && \ plugins[${n}]=$(highlight_marker "${plugins[${n}]}") done write_numbered_list -m "(none found)" "${plugins[@]}" return 0 } ### enable action ### describe_enable() { echo "Enable specified Plugin(s)" } describe_enable_parameters() { echo "" } describe_enable_options() { echo " : Plugin name" } do_enable() { local conffile="${EROOT}/etc/conf.d/vdr.plugins" plugins plugin [[ -z ${1} ]] && die -q "You didn't specify any plugins to enable." # make sure we have proper permissions [[ -w ${conffile} ]] || \ die -q "You don't have permission to write to ${conffile}" plugins=( $(find_plugins) ) for plugin in $@ ; do local p=${plugin} is_number ${p} && \ p=${plugins[$(( ${p} - 1 ))]} [[ -z "${p}" ]] && \ die -q "Plugin \"${plugin}\" doesn't appear to be valid!" plugin=${p} # ignore any unrecognized options [[ ${plugin} == --* ]] && continue # does plugin exist if ! plugin_exists "${plugin}"; then write_error_msg "Plugin ${plugin} doesn't exist" continue fi # already enabled? if is_enabled "${plugin}"; then write_error_msg "Plugin ${plugin} is already enabled" continue fi # finally, add it to conffile echo "${plugin}" >> "${conffile}" done } ### disable action ### describe_disable() { echo "Disable specified plugin(s)" } describe_disable_parameters() { echo "" } describe_disable_options() { echo " : Plugin name" } do_disable() { local conffile="${EROOT}/etc/conf.d/vdr.plugins" plugins plugin [[ -z ${1} ]] && die -q "You didn't specify any plugins to disable" [[ -w ${conffile} ]] || \ die -q "You don't have permission to write to ${conffile}" plugins=( $(find_plugins) ) for plugin in $@ ; do local p=${plugin} is_number ${p} && \ p=${plugins[$(( ${p} - 1 ))]} [[ -z "${p}" ]] && \ die -q "Plugin \"${plugin}\" doesn't appear to be valid!" plugin=${p} # ignore any unrecognized options [[ ${plugin} == --* ]] && continue # is in installed? if ! is_enabled "${plugin}"; then write_error_msg "${plugin} is not enabled" continue fi sed -e "/^${plugin}\$/d" -i "${conffile}" done } # vim: set ft=eselect :