//
// Created by Alban on 25/11/2024.
//
#include "convertion_MMD_PNG.h"
// Fonction pour vérifier si un dossier existe, sinon le créer
void ensure_directory_exists(const char *dir_path) {
struct stat st = {0};
if (stat(dir_path, &st) == -1) {
if (mkdir(dir_path) == 0) {
printf("Dossier cree : %s\n", dir_path);
} else {
perror("Erreur lors de la creation du dossier");
exit(EXIT_FAILURE);
}
}
}
// Fonction pour vérifier si une extension est ".mmd"
int has_mmd_extension(const char *filename) {
const char *dot = strrchr(filename, '.');
return dot && strcmp(dot, ".mmd") == 0;
}
// Fonction pour extraire le nom de fichier sans répertoire ni extension
void get_filename_without_extension(const char *path, char *output) {
const char *base = strrchr(path, '/');
base = (base) ? base + 1 : path;
char filename[256];
snprintf(filename, sizeof(filename), "%s", base);
char *dot = strrchr(filename, '.');
if (dot) {
*dot = '\0'; // Retirer l'extension
}
snprintf(output, 256, "%s", filename);
}
// Fonction pour construire une commande pour mmdc
void convert_to_png(const char *input_file, const char *output_file) {
char command[1024];
snprintf(command, sizeof(command), "mmdc -i \"%s\" -o \"%s\" > NUL 2>&1", input_file, output_file);
int result = system(command);//la ligne du dessus empeche le printf produit par system avec > NUL 2>&1
if (result != 0) {
fprintf(stderr, "Erreur lors de la conversion de %s\n", input_file);
} else {
printf("Fichier converti : %s\n", output_file);
}
}
// Fonction principale : Convertir un fichier spécifique
void convertion_mmd_png(nom_fichier_extension * nomFichierExtension) {
// Vérifier si le fichier a l'extension .mmd
if (!has_mmd_extension(nomFichierExtension->nom_fichier_mmd)) {
fprintf(stderr, "Erreur : Le fichier %s n'a pas l'extension .mmd\n", nomFichierExtension->nom_fichier_mmd);
}
// Assurez-vous que le dossier IMG existe
ensure_directory_exists(IMG_DIR);
// Vérifier si le fichier d'entrée existe
struct stat st;
if (stat(nomFichierExtension->nom_fichier_mmd, &st) != 0) {
perror("Erreur : Le fichier specifié est introuvable");
}
// Extraire le nom du fichier sans extension
char output_filename[256];
get_filename_without_extension(nomFichierExtension->nom_fichier_mmd, output_filename);
// Construire le chemin complet du fichier de sortie
char* output_file=malloc(512*sizeof(char));
snprintf(output_file, 100*sizeof(output_file), "%s/%s.png", IMG_DIR, output_filename);
// Convertir le fichier
convert_to_png(nomFichierExtension->nom_fichier_mmd, output_file);
printf("Conversion terminee pour le fichier : %s\n", nomFichierExtension->nom_fichier_mmd);
strcpy(nomFichierExtension->nom_fichier_png, output_file);
}
void convertionPNGSimulation(){
ensure_directory_exists(IMG_DIR);
struct stat st;
if (stat("MMD/simulation.mmd", &st) != 0) {
perror("Erreur : Le fichier specifié est introuvable");
}
char output[256];
snprintf(output, 256, "%s", "IMG/simulation.png");
convert_to_png("MMD/simulation.mmd", output);
}