# -*- Shell-Script -*-

# for code readability
do_ssh(){
    ssh -S $LDM_SOCKET $LDM_SERVER "$@"
}

do_scp(){
    scp -o "ControlPath $LDM_SOCKET" $1 $2
}

get_current_set_lang() {
    CURRENT_SET_LANG=$(awk -F= '/^Language=/{print $2}' $TEMP_DMRC)
    if [ -z "$CURRENT_SET_LANG" ]; then
        CURRENT_SET_LANG=$(awk -F= '/^Language=/{print $2}' $TEMP_GLOBAL_DMRC)
    fi
    if [ -z "$CURRENT_SET_LANG" ]; then
        return
    fi
    echo $CURRENT_SET_LANG
}

get_current_set() {
    CURRENT_SET_SESSION=$(awk -F= '/^Session=/{print $2}' $TEMP_DMRC)
    if [ -z "$CURRENT_SET_SESSION" ]; then
        CURRENT_SET_SESSION=$(awk -F= '/^Session=/{print $2}' $TEMP_GLOBAL_DMRC)
    fi
    if [ -z "$CURRENT_SET_SESSION" ]; then
        return
    fi
    do_scp $LDM_SERVER:/usr/share/xsessions/$CURRENT_SET_SESSION.desktop $TEMP_DESKTOP
    SESSION=$(awk -F= '/^TryExec=/{print $2}' $TEMP_DESKTOP)
    if [ -z "$SESSION" ]; then
        SESSION=$(awk -F= '/^Exec=/{print $2}' $TEMP_DESKTOP)
    fi
    if [ -z "$SESSION" ]; then
        return
    fi
    echo $SESSION
}

get_nice_name(){
    LDMINFO=/var/run/ldm/$LDM_SERVER
    NICE=$(grep ^session-with-name: $LDMINFO | grep :$1$ | awk -F: '{print $2}')
    if [ -n "$NICE" ]; then
        echo $NICE
    else
        basename $1
    fi
}

get_desktop_file(){
    do_ssh grep -lRE "\"^(Try|)Exec=$1$\"" /usr/share/xsessions/ | sed -r 's,/usr/share/xsessions/(.*).desktop,\1,' | head -1
}

set_dmrc() {
    sed -i "/^$1=/d" $TEMP_DMRC
    if grep -q "[Desktop]" $TEMP_DMRC; then
        sed -i "s*\[Desktop\]*[Desktop]\n$1=$2*" $TEMP_DMRC
    else
        echo "[Desktop]" >> $TEMP_DMRC
        echo "$1=$2" >> $TEMP_DMRC
    fi
    CHANGED=true
}

TEMP_DMRC=`mktemp`
TEMP_GLOBAL_DMRC=`mktemp`
TEMP_DESKTOP=`mktemp`
do_scp $LDM_SERVER:.dmrc $TEMP_DMRC
if [ -n "$LDM_GLOBAL_DMRC" ]; then
    do_scp $LDM_SERVER:$LDM_GLOBAL_DMRC $TEMP_GLOBAL_DMRC
fi
CURRENT_LANG=$(get_current_set_lang)
CURRENT_SET=$(get_current_set)

CHANGED=false

if [ "$LDM_SESSION" = "default" ]; then
    if [ -n "$CURRENT_SET" ]; then
        LDM_SESSION=$CURRENT_SET
    fi
else
    if [ "$LDM_SESSION" != "$CURRENT_SET" -a "$LDM_SESSION" != "/usr/bin/xterm" ]; then
        if [ -z "$CURRENT_SET" ]; then
            CURRENT_SET=nothing
        else
            CURRENT_SET_NAME=$(awk -F= '/^Name=/{print $2}' $TEMP_DESKTOP)
            if [ -n "$CURRENT_SET_NAME" ]; then
                CURRENT_SET=$CURRENT_SET_NAME
            else
                CURRENT_SET=$(get_nice_name $CURRENT_SET)
            fi
        fi
        NEW_SESSION_SETTING=$(get_desktop_file $LDM_SESSION)
        if [ -n "$NEW_SESSION_SETTING" ]; then
            set_dmrc Session $NEW_SESSION_SETTING
        fi
    fi
fi

if [ "$LDM_LANGUAGE" = "default" -o -z "$LDM_LANGUAGE" ]; then
    if [ -n "$CURRENT_LANG" ]; then
        LDM_LANGUAGE=$CURRENT_LANG
    fi
else
    if [ "$LDM_LANGUAGE" != "$CURRENT_LANG" ]; then
        if [ -z "$CURRENT_LANG" ]; then
            CURRENT_LANG=nothing
        fi
        set_dmrc Language $LDM_LANGUAGE
    fi
fi

if [ "$CHANGED" = "true" ]; then
    do_scp $TEMP_DMRC $LDM_SERVER:.dmrc
fi

rm $TEMP_DMRC $TEMP_DESKTOP $TEMP_GLOBAL_DMRC
