#!/bin/bash
#
#  Copyright (C) 2015-2016 Savoir-faire Linux Inc.
#  Author: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
#  Author: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
#

HAS_KDE=0
HAS_GNOME=0

if type "ring-kde" > /dev/null 2> /dev/null; then
  HAS_KDE=1
fi

if type "gnome-ring" > /dev/null 2> /dev/null; then
  HAS_GNOME=1
fi

# No clients installd
if [ $HAS_KDE == "0" ] && [ $HAS_GNOME == "0" ]; then
  echo "Ring not found" >&2
  exit 1
fi

# Only one client is installed
if [ $HAS_KDE == "1" ] && [ $HAS_GNOME == "0" ]; then
  ring-kde $*
  exit $?
elif [ $HAS_KDE == "0" ] && [ $HAS_GNOME == "1" ]; then
  gnome-ring $*
  exit $?
fi

# Both clients installed: run KDE client if KDE wm is running
# else use the Gnome client.
if [ -z "$(ps aux | grep kwin | grep -v grep)" ]; then
  gnome-ring $*
  exit $?
else
  ring-kde $*
  exit $?
fi
