#!/bin/bash
# desc: script encargado de regenerar ciertos directorios especificos del perfil del usuario
# lastact: arturo@2022-6-17

LISTADO_DIRECTORIOS=(Descargas:Downloads:Downloads:Téléchargements
    Documentos:Documents:Dokumente:Documents
    Imágenes:Pictures:Bilder:Images
    Vídeos:Videos:Videos:Vidéos
    Música:Music:Musik:Musique
    Plantillas:Templates:Vorlagen:Modèles
    Público:Public:Öffentlich:Public)

EJECUTOR=$(whoami)

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

# 0) Comprobamos que como primer parámetro se indican los directorios específicos a regenerar
# Mostramos la ayuda si se pasa como parámetro -h o --help:
AYUDA="Debes pasar al menos un parámetro: La lista de directorios a regenerar."
AYUDA+="\nLa lista debe separarse por \":\": 1:Descargas, 2:Documentos, 3:Imágenes, 4:Vídeos, 5:Música, 6:Plantillas, 7:Público"
EJEMPLOS=("${0} \"1:2\" # Regenera los directorios de Descargas y Documentos")
EJEMPLOS+=("${0} \"5:6:7\" # Regenera los directorios Música, Plantillas y Público")
(vx-check_need_help "${1}" || [[ -z "${1}" ]]) &&
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" &&
    exit 0
LISTADO_DIRECTORIOS_REGENERAR=()
for POS in ${1//:/ }; do
    ! [[ "${POS}" =~ ^[1-7]$ ]] && continue
    LISTADO_DIRECTORIOS_REGENERAR+=("${LISTADO_DIRECTORIOS[$((POS - 1))]}")
done
shift

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

# 2) Comprobamos la lista de usuarios afectados:
# 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.1) [sin parámetros] => vx-obtener_lista_usuarios devolvería la lista de todos los usuarios gráficos si el ejecutor es root, o el usuario que ejecuta si no es root
# 5.2) [sin parámetros] => Para evitar la lista completa de todos los usuarios, si el ejecutor es root hacemos uso de vx-funcs-users vx-lista-usuarios-iniciado-sesion
# [[ "${EJECUTOR}" == "root" && -z "${1}" ]] && \
# LISTA_USUARIOS=($(vx-funcs-users vx-lista-usuarios-iniciado-sesion)) || \
# LISTA_USUARIOS=($(vx-funcs-users vx-obtener_lista_usuarios "${@}"))
declare -a LISTA_USUARIOS
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 "${@}"))

SERVICIO="SRV-REGENERACION-DIRECTORIOS_ESPECIFICOS"
TEXTO="Regeneración de directorios específicos del perfil del usuario: ${LISTA_USUARIOS[*]} => ${LISTADO_DIRECTORIOS_REGENERAR[*]}"
vx-echo_log_titulo1 "${SERVICIO}" "${TEXTO}"

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}")"
    [[ ! -d "${HOMEUSUARIO}" ]] && continue

    TEXTO="Comienzo Sincronización para el usuario: ${USUARIO}"
    vx-echo_log_titulo2 "${SERVICIO}" "${TEXTO}"

    for DIRS in "${LISTADO_DIRECTORIOS_REGENERAR[@]}"; do
        SAVEIFS=${IFS}
        IFS=":"
        LISTA_DIR=($DIRS)
        BASE="/usr/share/vitalinux/skel/${LISTA_DIR[0]}/"
        if test -d "${BASE}"; then
            for DIR in ${LISTA_DIR[*]}; do
                # echo "=> Se va a tratar de sincronizar el directorio: \"${DIR}\""
                if test -d "${HOMEUSUARIO}/${DIR}"; then
                    getent group "${USUARIO}" >/dev/null 2>&1 &&
                        PROPIETARIO="${USUARIO}:${USUARIO}" ||
                        PROPIETARIO="${USUARIO}"
                    if rsync --delete -ah --chown="${PROPIETARIO}" "${BASE}" "${HOMEUSUARIO}/${DIR}"; then
                        vx-colorear_echo "verde" " => OK: Sincronizado ${HOMEUSUARIO}/${DIR} del usuario: ${USUARIO} ..."
                    else
                        vx-colorear_echo "rojo" " => ERROR: No sincronizado ${HOMEUSUARIO}/${DIR} del usuario: ${USUARIO} ..."
                    fi
                fi
            done
        fi
        IFS=${SAVEIFS}
    done

done

exit 0
