const FfmpegPath = { str_current_path: null, is_found: false, obj_modal: null, init: () => { FfmpegPath._create_badge(); FfmpegPath._create_modal(); FfmpegPath._bind_events(); }, _create_badge: () => { let obj_nav_right = document.querySelector("nav .d-flex.gap-2"); let obj_badge = document.createElement("button"); obj_badge.id = "btn_ffmpeg_status"; obj_badge.className = "btn btn-sm btn-outline-secondary"; obj_badge.title = "Chemin FFmpeg"; obj_badge.innerHTML = ''; obj_nav_right.insertBefore(obj_badge, obj_nav_right.firstChild); obj_badge.addEventListener("click", () => { FfmpegPath._open_modal(); }); }, _create_modal: () => { let obj_modal_el = document.createElement("div"); obj_modal_el.id = "modal_ffmpeg_path"; obj_modal_el.className = "modal fade"; obj_modal_el.tabIndex = -1; obj_modal_el.innerHTML = ''; document.body.appendChild(obj_modal_el); FfmpegPath.obj_modal = new bootstrap.Modal(obj_modal_el); }, _bind_events: () => { let obj_btn_browse = document.getElementById("btn_browse_ffmpeg"); obj_btn_browse.addEventListener("click", () => { FfmpegPath._browse(); }); let obj_btn_detect = document.getElementById("btn_detect_ffmpeg"); obj_btn_detect.addEventListener("click", () => { FfmpegPath._detect(); }); let obj_btn_validate = document.getElementById("btn_validate_ffmpeg"); obj_btn_validate.addEventListener("click", () => { FfmpegPath._validate(); }); window.api.on_ffmpeg_path_status((obj_data) => { FfmpegPath.str_current_path = obj_data.str_path; FfmpegPath.is_found = obj_data.is_found; FfmpegPath._update_badge(); }); }, _open_modal: () => { let obj_input = document.getElementById("input_ffmpeg_path"); obj_input.value = FfmpegPath.is_found ? FfmpegPath.str_current_path : ""; FfmpegPath._update_modal_status(FfmpegPath.is_found, FfmpegPath.str_current_path); FfmpegPath.obj_modal.show(); if (!FfmpegPath.is_found) { FfmpegPath._detect(); } }, _browse: () => { window.api.select_ffmpeg_exe() .then((str_path) => { if (!str_path) { return; } let obj_input = document.getElementById("input_ffmpeg_path"); obj_input.value = str_path; FfmpegPath._update_modal_status(true, str_path); }) .catch((obj_err) => { ConsoleLog.add("Erreur selection FFmpeg : " + obj_err.message); }); }, _detect: () => { let obj_btn = document.getElementById("btn_detect_ffmpeg"); obj_btn.disabled = true; obj_btn.innerHTML = 'Detection...'; window.api.get_ffmpeg_path() .then((obj_data) => { obj_btn.disabled = false; obj_btn.innerHTML = 'Detecter automatiquement'; if (obj_data.is_found) { let obj_input = document.getElementById("input_ffmpeg_path"); obj_input.value = obj_data.str_path; FfmpegPath._update_modal_status(true, obj_data.str_path); } else { FfmpegPath._update_modal_status(false, null); } }) .catch(() => { obj_btn.disabled = false; obj_btn.innerHTML = 'Detecter automatiquement'; FfmpegPath._update_modal_status(false, null); }); }, _validate: () => { let str_path = document.getElementById("input_ffmpeg_path").value; if (!str_path) { return; } window.api.set_ffmpeg_path(str_path) .then((obj_result) => { if (obj_result.is_success) { FfmpegPath.str_current_path = obj_result.str_path; FfmpegPath.is_found = true; FfmpegPath._update_badge(); FfmpegPath.obj_modal.hide(); ConsoleLog.add("Chemin FFmpeg configure : " + obj_result.str_path); } else { FfmpegPath._update_modal_status(false, null); ConsoleLog.add("Chemin FFmpeg invalide : " + (obj_result.str_error || "")); } }) .catch((obj_err) => { ConsoleLog.add("Erreur configuration FFmpeg : " + obj_err.message); }); }, _update_badge: () => { let obj_badge = document.getElementById("btn_ffmpeg_status"); if (FfmpegPath.is_found) { obj_badge.className = "btn btn-sm btn-outline-success"; obj_badge.title = "FFmpeg : " + FfmpegPath.str_current_path; } else { obj_badge.className = "btn btn-sm btn-outline-danger"; obj_badge.title = "FFmpeg non trouve"; } }, _update_modal_status: (is_valid, str_path) => { let obj_label = document.getElementById("label_ffmpeg_status"); let obj_btn_validate = document.getElementById("btn_validate_ffmpeg"); if (is_valid && str_path) { obj_label.className = "badge bg-success"; obj_label.innerHTML = 'Trouve'; obj_btn_validate.disabled = false; } else { obj_label.className = "badge bg-danger"; obj_label.innerHTML = 'Non trouve'; obj_btn_validate.disabled = true; } }, };