#!/bin/bash
# Ultima modificación: [arturo@2020-4-1]
# Proyecto Software Libre DGA

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

EJECUTOR="$(whoami)"

# 1) Preparamos la auditoria del servicio:
LOG="$(basename "${0}").log"
vx-log_xsession -o "${LOG}"

# Regeneramos el entorno de escritorio de los usuarios:
# 2.1) Si no se pasan parámetros y lo llama el usuario root se regeneran todos los usuarios gráficos
# 2.2) Si no se pasan parámetros y no lo llama el usuario root se regenera la del usuario gráfico actual
# 2.3) Si se le pasan ususarios como parámetros se regeneran únicamente los de esos usuarios
# if [[ ! -z "${1}" && "${EJECUTOR}" == "root" ]] ; then
#     LISTA_USUARIOS=("${@}")
#     elif [[ "${EJECUTOR}" == "root" ]] ; then
#     LISTA_USUARIOS=($(vx-usuarios-graficos))
# else
#     LISTA_USUARIOS=("${EJECUTOR}")
# fi

# Los parámetros recibidos para determinar la lista de usuarios afectados puede ser:
# 1) -ug => devolvería el usuario gráfico actual
# 2) -u usu1,usu2,usu3,... => devolvería la lista de que usuarios indicados son reales
# 3) -g grupo1,grupo2,... => devolvería la lista de que usuarios forman parte de esos grupos
# 4) usu1 usu2 usu3 ... => devolvería la lista de usuarios indicados que son reales
# 5) [sin parámetros] => devolvería la lista de todos los usuarios gráficos si el ejecutor es root, o el usuario que ejecuta si no es root
# LISTA_USUARIOS=($(vx-funcs-users vx-lista-usuarios-iniciado-sesion)) || \
# LISTA_USUARIOS=($(vx-funcs-users vx-obtener_lista_usuarios "${@}"))
declare -a LISTA_USUARIOS
# Comprobamos si esta instalado el paquete vx-dga-l-congelar-escritorio, el cual guarda en /tmp/vx-lista-usuarios-iniciado-sesion los usuarios que han iniciado sesión gráfica:
FICH_LISTA_USUARIOS_INICIO_SESION="/tmp/vx-lista-usuarios-iniciado-sesion"
[[ "${EJECUTOR}" == "root" && -z "${1}" && -f "${FICH_LISTA_USUARIOS_INICIO_SESION}" ]] &&
LISTA_USUARIOS=($(cat "${FICH_LISTA_USUARIOS_INICIO_SESION}"))
((${#LISTA_USUARIOS[@]} == 0)) && LISTA_USUARIOS=($(vx-funcs-users vx-obtener_lista_usuarios "${@}"))

TEXTO="Regeneración directorios perfil de usuarios: ${LISTA_USUARIOS[*]}"
vx-echo_log_titulo1 "SRV-CONGELACION-ESCRITORIO" "${TEXTO}"

# 1) Comenzamos regenerando el contenido del Escritorio y resto de directorios del perfil de los usuarios
for USUARIO in "${LISTA_USUARIOS[@]}"; do
    # Comprobamos que el usuario existe y cual es su HOME:
    vx-funcs-users vx-check_exit_users "${USU}" &&
    HOMEUSUARIO="$(vx-home-usuario-grafico "${USUARIO}")" ||
    continue
    
    HOMEUSUARIO="$(vx-home-usuario-grafico "${USUARIO}")"
    
    vx-colorear_echo "azul" "=> Regeneración de directorios del perfil: ${USUARIO}"
    
    # Creamos un array con los XDG_DIRS ha excepción de XDG_DESKTOP_DIR, el cual se encarga de regenerarlo vx-rsync-desktop-reset:
    XDG_DIRS=(
        "XDG_DOWNLOAD_DIR:Descargas"
        "XDG_TEMPLATES_DIR:Plantillas"
        "XDG_PUBLICSHARE_DIR:Público"
        "XDG_DOCUMENTS_DIR:Documentos"
        "XDG_MUSIC_DIR:Música"
        "XDG_PICTURES_DIR:Imágenes"
        "XDG_VIDEOS_DIR:Vídeos"
    )
    
    for DIRS in "${XDG_DIRS[@]}"; do
        XDG_VAR="${DIRS%%:*}"
        DIR="${DIRS##*:}"
        if [[ "${EJECUTOR}" == "root" ]]; then
            RUTA_DIR_USER="$(vx-xdg-getdir "${USUARIO}" "${XDG_VAR}")"
        else
            [[ "${!XDG_VAR}" ]] && RUTA_DIR_USER="${!XDG_VAR}" || RUTA_DIR_USER="$(vx-xdg-getdir "${USUARIO}" "${XDG_VAR}")"
        fi
        BASE="/usr/share/vitalinux/skel/${DIR}"
        if [[ -d "${BASE}" && -d "${RUTA_DIR_USER}" ]]; then
            PROPIETARIO="${USUARIO}:$(id -gn "${USUARIO}")"
            if rsync --delete -ah --chown="${PROPIETARIO}" "${BASE}/" "${RUTA_DIR_USER}/"; then
                vx-colorear_echo "verde" " => OK: Sincronizado ${RUTA_DIR_USER} del usuario: ${USUARIO} ..."
            else
                vx-colorear_echo "rojo" " => ERROR: No se ha podido sincronizar ${RUTA_DIR_USER} del usuario: ${USUARIO} ..."
            fi
        fi
    done
    
    vx-colorear_echo "azul" "=> Terminada Regeneración Directorios del perfil: ${USUARIO}"
    
done
