1
0
postauto/bin/postauto
2025-08-13 17:27:57 +02:00

264 lines
7.2 KiB
Bash

#!/bin/bash
# Pour les couleurs, chemins et API, complète comme avant...
source /home/$USER/autopost/common.sh
# ========== FONCTIONS SCRIPT ==========
checkdb() {
if [ "$dbtype" = "sqlite" ]; then
if [ ! -f "$DB_FILE" ]; then
echo "La base de données SQLite n'existe pas. Création…"
do_createdb
fi
else
# Échapper _ et % pour LIKE
local pattern=${MYSQL_TABLE//_/\\_}
pattern=${pattern//%/\\%}
# Assure-toi que db_query utilise `mysql -N -B` pour ne pas avoir d'entêtes
local exists
exists=$(db_query "SHOW TABLES LIKE '${pattern}';" | tr -d '[:space:]')
if [ -z "$exists" ]; then
echo "La table '${MYSQL_TABLE}' n'existe pas. Création…"
do_createdb
fi
fi
}
do_start() {
do_update
checkdb
if screen -list | grep -q "$SCREEN_NAME"; then
echo "Le screen '$SCREEN_NAME' est déjà en cours d'exécution."
else
screen -dmS "$SCREEN_NAME" bash -c "$SCRIPT_PATH"
echo "Screen '$SCREEN_NAME' démarré avec '$SCRIPT_PATH'."
fi
if screen -list | grep -q "$WEB_NAME"; then
echo "Le screen '$WEB_NAME' est déjà en cours d'exécution."
else
screen -dmS "$WEB_NAME" node "$WEB_PATH"
echo "Screen '$WEB_NAME' démarré avec '$WEB_PATH'."
fi
}
do_stop() {
if screen -list | grep -q "$SCREEN_NAME"; then
screen -S "$SCREEN_NAME" -X quit
echo "Screen '$SCREEN_NAME' arrêté."
else
echo "Aucun screen '$SCREEN_NAME' en cours d'exécution."
fi
if screen -list | grep -q "$WEB_NAME"; then
screen -S "$WEB_NAME" -X quit
echo "Screen '$WEB_NAME' arrêté."
else
echo "Aucun screen '$WEB_NAME' en cours d'exécution."
fi
}
do_restart() {
do_stop
sleep 1
do_start
}
do_show() {
if screen -list | grep -q "$SCREEN_NAME"; then
screen -r "$SCREEN_NAME"
else
echo "Aucun screen '$SCREEN_NAME' en cours d'exécution."
fi
}
do_add() {
checkdb
release_path="$2"
release_name=$(basename "$release_path")
release_without_ext="${release_name%.*}"
response=$(curl -s "${URL_API}${APIKEY}&check=${release_without_ext}")
code=$(echo "$response" | jq -r '.code')
explain=$(echo "$response" | jq -r '.Explain')
if [ "$code" = "2" ]; then
echo -e "$ROUGE""$explain""$NORMAL"
db_query "INSERT INTO \`$MYSQL_TABLE\` (nom, status) VALUES ('${release_name}', 3);"
if [ -e "${DOSSIER_GLOBAL}${release_name}" ]; then
rm "${DOSSIER_GLOBAL}""${release_name}"
fi
exit 1
else
MOVE_CMD="${MOVE_CMD:-cp -rl}"
echo -e "$VERT""DEPLACEMENT DE LA RELEASE ${release_name} DANS LE REPERTOIRE DE TRAVAIL""$NORMAL"
if [[ "${release_name}" =~ \.(mkv|mp4)$ ]]; then
if [ ! -e "${DOSSIER_GLOBAL}${release_name}" ]; then
${MOVE_CMD} "${release_path}" "${DOSSIER_GLOBAL}"
fi
echo -e "$ROUGE""CREATION MEDIAINFO""$NORMAL"
mediainfo --output=JSON --full "${DOSSIER_GLOBAL}${release_name}" > "${DOSSIER_NFO}${release_without_ext}.json"
echo -e "$CYAN""AJOUT DE LA RELEASE ${release_name} DANS LA DATABASE""$NORMAL"
db_query "INSERT INTO \`$MYSQL_TABLE\` (nom, status) VALUES ('${release_name}', 0);"
elif [[ "${release_name}" =~ \.(iso)$ ]]; then
if [ ! -e "${DOSSIER_GLOBAL}${release_name}" ]; then
${MOVE_CMD} "${release_path}" "${DOSSIER_GLOBAL}"
fi
echo -e "$ROUGE""CREATION BDINFO""$NORMAL"
BDInfo -p "${DOSSIER_GLOBAL}${release_name}" -o "${DOSSIER_NFO}${release_without_ext}.txt"
BDInfoDataSubstractor "${DOSSIER_NFO}${release_without_ext}.txt"
echo -e "$CYAN""AJOUT DE LA RELEASE ${release_name} DANS LA DATABASE""$NORMAL"
db_query "INSERT INTO \`$MYSQL_TABLE\` (nom, status) VALUES ('${release_name}', 0);"
else
echo "il ne s'agit pas d'un fichier mkv ou mp4"
fi
fi
}
do_check() {
release_path="$2"
release_name=$(basename "$release_path")
if [[ "${release_name}" =~ \.(mkv|mp4|iso)$ ]]; then
release_name="${release_name%.*}"
fi
response=$(curl -s "${URL_API}${APIKEY}&check=${release_name}")
code=$(echo "$response" | jq -r '.code')
explain=$(echo "$response" | jq -r '.Explain')
if [ "$code" = "1" ]; then
echo -e "${release_name}" "$ROUGE""$explain""$NORMAL"
else
echo -e "${release_name}" "$BLEU""$explain""$NORMAL"
if [ -e "${DOSSIER_GLOBAL}${release_name}" ]; then
rm "${DOSSIER_GLOBAL}""${release_name}"
fi
fi
}
do_status() {
checkdb
results=$(db_query "SELECT nom, status, id FROM (SELECT * FROM \`release\` ORDER BY id DESC LIMIT 500) t ORDER BY id ASC;")
max_length=$(echo "$results" | awk -F'|' '{ if (length($1) > max) max = length($1) } END { print max }')
col1_width=$((max_length + 5))
while IFS='|' read -r name status id; do
case $status in
0)
printf "${FOND_CYAN}${NOIR}${GRAS}%-${col1_width}s %-34s %-19s${NORMAL}\n" "$name" "EN ATTENTE" "$id"
;;
1)
printf "${FOND_VERT}${NOIR}${GRAS}%-${col1_width}s %-35s %-19s${NORMAL}\n" "$name" "ENVOI TERMINÉ" "$id"
;;
2)
printf "${FOND_ROUGE}${NOIR}${GRAS}%-${col1_width}s %-34s %-19s${NORMAL}\n" "$name" "ERREUR" "$id"
;;
3)
printf "${FOND_ROSE}${NOIR}${GRAS}%-${col1_width}s %-34s %-19s${NORMAL}\n" "$name" "DEJA DISPONIBLE" "$id"
;;
*)
printf "%-${col1_width}s %-30s %-15s\n" "$name" "$id"
;;
esac
done <<< "$results"
printf "%-${col1_width}s %-35s %-19s\n" "Name" "Status" "id"
echo ""
echo -e "${CYAN}${GRAS}■■■■■■${NORMAL} : EN ATTENTE"
echo -e "${ROSE}${GRAS}■■■■■■${NORMAL} : DEJA DISPONIBLE"
echo -e "${VERT}${GRAS}■■■■■■${NORMAL} : ENVOI TERMINÉ"
echo -e "${ROUGE}${GRAS}■■■■■■${NORMAL} : ERREUR"
}
do_showlog() {
release_name="$2"
if [[ "${release_name}" =~ \.(mkv|mp4)$ ]]; then
release_name="${release_name%.*}"
fi
cat "${DOSSIER_LOGS}${release_name}.log"
}
do_createdb() {
if [ "$dbtype" = "mysql" ]; then
mysql --default-character-set=utf8mb4 -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" -e "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DB\` DEFAULT CHARACTER SET utf8mb4;"
mysql --default-character-set=utf8mb4 -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" -D "$MYSQL_DB" -e "
DROP TABLE IF EXISTS \`$MYSQL_TABLE\`;
CREATE TABLE \`$MYSQL_TABLE\` (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(255) NOT NULL,
status INT NOT NULL DEFAULT 0
);"
else
if [ -f "$DB_FILE" ]; then
read -p "Voulez-vous vraiment supprimer $DB_FILE ? (y/n) : " choix
if [[ "$choix" =~ ^[Yy]$ ]]; then
rm "$DB_FILE"
fi
fi
sqlite3 "$DB_FILE" <<EOF
CREATE TABLE \`$MYSQL_TABLE\` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nom TEXT NOT NULL,
status INTEGER NOT NULL DEFAULT 0 CHECK(status IN (0, 1, 2, 3))
);
EOF
sqlite3 "$DB_FILE" "PRAGMA journal_mode=WAL;"
sqlite3 "$DB_FILE" "PRAGMA busy_timeout = 5000;"
fi
}
do_update() {
wget -qO update.sh https://tig.unfr.pw/UNFR/postauto/raw/branch/main/update.sh && chmod +x update.sh && ./update.sh
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_restart
;;
show)
do_show
;;
status)
do_status
;;
update)
do_update
;;
check)
if [ -z "$2" ]; then
echo "Usage: $0 check <release_path>"
exit 1
fi
do_check "$@"
;;
createdb)
do_createdb
;;
log)
if [ -z "$2" ]; then
echo "Usage: $0 log <release_path>"
exit 1
fi
do_showlog "$@"
;;
add)
if [ -z "$2" ]; then
echo "Usage: $0 add <release_path>"
exit 1
fi
do_add "$@"
;;
*)
echo "Usage: $0 {start|stop|restart|show|status|log|check|update|add <release_path>}"
exit 1
;;
esac