#!/usr/bin/env bash
#
# conky-pipemenu - an Openbox pipemenu for manipulating conky
# Copyright (C) 2015 damo <damo@bunsenlabs.org>
#
# forked by manjaro <fhatmanjaroorg>
#

readonly COMMON_INCLUDE="/usr/lib/manjaro/common/include.cfg"

if ! . "$COMMON_INCLUDE" 2>/dev/null; then
    echo $"Error: Failed to source $COMMON_INCLUDE" >&2 ; exit 1
fi

readonly ZEN_BIN="manjaro-conkyzen"
readonly SESSION_BIN="manjaro-conky-SESSION"
readonly DEFAULT_CONKY="$HOME/.config/conky/Manjaro.conkyrc"
readonly CONFIG_PATH="$HOME/.config/conky"
readonly SESSION_FILE="$CONFIG_PATH/conky-sessionfile"
readonly SAVED_SESSIONS="$CONFIG_PATH/saved-sessions"
readonly HELPFILE="/usr/share/manjaro/doc/helpfile-conkyzen.txt"
readonly HELP='\tmanjaro-conky-pipemenu is an Openbox Pipe Menu for use with conky
\tIt should normally be called from an openbox menu.
\nOptions:
\t-h --help   show this message
\n\tIf manjaro-conky-pipemenu is called with no options (the usual method),
\tit will output an xml openbox pipemenu for handling conky sessions.
\nSee /usr/share/manjaro/docs/helpfile-conkyzen.txt and "man conky" for more information'

for arg in "$@"; do
    case $arg in
        -h|--help) echo -e "$HELP" ; exit 0
    esac
done

if ! [[ -e $SESSION_FILE ]]; then
    echo "Creating new sessionfile in $CONFIG_PATH" >&2
    echo "conky -c $DEFAULT_CONKY & sleep 1" > "$SESSION_FILE"
fi

if ! [[ -e $SAVED_SESSIONS ]]; then
    echo "$0: Failed to locate saved-sessions in $CONFIG_PATH" >&2
fi

declareDependencies zenity conky

getSessions(){
    menuItem "Default" "$SESSION_BIN $SESSION_FILE"
    if [[ -e $SAVED_SESSIONS ]]; then
        while read -r SESSION ; do
            [[ -z $SESSION ]] && continue
            menuItem "$SESSION" "$SESSION_BIN $SESSION"
        done < "$SAVED_SESSIONS"
    fi
}

loadChooserMenu(){
    if type "$ZEN_BIN" &>/dev/null; then
        menuItem "Conky Chooser" "$ZEN_BIN"
    fi
}

loadNewsessionMenu(){
    if type "$ZEN_BIN" &>/dev/null; then
        menuItem "New Conky Session" "$ZEN_BIN -z"
    fi
}

loadReloadMenu(){
    if type "$SESSION_BIN" &>/dev/null; then
        menuItem "Reload Conkys" "$SESSION_BIN"
    fi
}

loadSavedsessionSubmenu(){
    if type "$SESSION_BIN" &>/dev/null; then
        menuSubmenu "Sessions" "Saved Sessions"
        getSessions
        menuSubmenuEnd
    fi
}

loadPinMenu(){
    if type manjaro-conkypin &>/dev/null; then
        menuItem "Pin moveable Conkys" "manjaro-conkypin"
        menuSeparator
    fi
}

loadEditMenu(){
    if hash xdg-open &>/dev/null; then
        menuItem "Default conkyrc" "xdg-open $DEFAULT_CONKY"
    elif hash exo-open &>/dev/null; then
        menuItem "Default conkyrc" "exo-open $DEFAULT_CONKY"
    else
        menuItem "Default conkyrc" "$TERMINAL -e $EDITOR $DEFAULT_CONKY"
    fi
    if [[ $(pidof conky) ]]; then
        menuSubmenu "RunningConky" "Running Conkys"
        while read -r SESSION; do
            [[ -z $SESSION ]] && continue
            CPATH=$(awk '{print $3}' <<< "$SESSION")
            CONKY=$(awk -F"/" '{print $(NF-1)"/"$NF }' <<< "$CPATH")
            if hash xdg-open &>/dev/null; then
                menuItem "$CONKY" "xdg-open $CPATH"
            elif hash exo-open &>/dev/null; then
                menuItem "$CONKY" "exo-open $CPATH"
            else
                menuItem "$CONKY" "$TERMINAL -e '$EDITOR $CPATH'"
            fi
        done < "$SESSION_FILE"
        menuSubmenuEnd
    else
        menuItem "No Running Conkys"
    fi
}

getConkys(){
    menuSubmenu "EditConky" "Edit Conkys"
    if type manjaro-conkyedit &>/dev/null;then
        menuItem "Conky Editor" "manjaro-conkyedit"
        loadEditMenu
    else
        loadEditMenu
    fi
    menuSubmenuEnd
}

checkHelpfile(){
    DLG="zenity --text-info --title='Conky Chooser Help' --filename=$HELPFILE --width=650 --height=700 &>/dev/null"
    if [[ -e $HELPFILE ]];then
        menuItem "Conky Chooser Help" "$DLG"
    fi
}

menuStart "Conkymenu" "Conky"
loadChooserMenu
loadReloadMenu
getConkys
## menuSeparator
## loadPinMenu
loadNewsessionMenu
loadSavedsessionSubmenu
## menuSeparator
checkHelpfile
menuEnd
