From 05e864b93a63db7becf64d1e861354a45083d602 Mon Sep 17 00:00:00 2001 From: MasterAcnolo Date: Sat, 22 Aug 2026 22:29:38 +0200 Subject: [PATCH] refactor: getBrowser function, and better firefox management on linux --- server/helpers/buildArgs.helpers.js | 2 +- server/helpers/getBrowser.helpers.js | 95 ++++++++-------------------- server/services/info.services.js | 3 +- 3 files changed, 31 insertions(+), 69 deletions(-) diff --git a/server/helpers/buildArgs.helpers.js b/server/helpers/buildArgs.helpers.js index 43c937d..75ad30f 100644 --- a/server/helpers/buildArgs.helpers.js +++ b/server/helpers/buildArgs.helpers.js @@ -1,6 +1,6 @@ const path = require("path"); -const getUserBrowser = require("./getBrowser.helpers.js"); +const {getUserBrowser} = require("./getBrowser.helpers.js"); const { ffmpegPath, denoPath} = require("./path.helpers.js"); const { configFeatures } = require("../../config.js"); const { logger } = require("../logger.js"); diff --git a/server/helpers/getBrowser.helpers.js b/server/helpers/getBrowser.helpers.js index 8e8caf7..95c197b 100644 --- a/server/helpers/getBrowser.helpers.js +++ b/server/helpers/getBrowser.helpers.js @@ -1,7 +1,6 @@ const fs = require("fs"); const os = require("os"); -const path = require("path"); -const notify = require("./notify.helpers") +const notify = require("./notify.helpers"); const { logger } = require("../logger"); /** @@ -22,41 +21,38 @@ const { logger } = require("../logger"); * @returns {string} The detected browser identifier. */ function getUserBrowser() { - //const userProfile = os.homedir(); - const firefoxPath = getFirefoxProfilePath(); + const platform = process.platform; + let isFirefoxHere = false; - /** - * Browsers supported by yt-dlp cookie extraction. - * - * Only Firefox is currently enabled and tested. - * Additional browsers can be enabled in the future - * once compatibility has been verified. - */ - const browsers = [ - { name: "firefox", path: firefoxPath }, - // { name: "chrome", path: path.join(userProfile, "AppData", "Local", "Google", "Chrome", "User Data", "Default") }, - // { name: "brave", path: path.join(userProfile, "AppData", "Local", "BraveSoftware", "Brave-Browser", "User Data", "Default") }, - // { name: "edge", path: path.join(userProfile, "AppData", "Local", "Microsoft", "Edge", "User Data", "Default") }, - // { name: "opera", path: path.join(userProfile, "AppData", "Roaming", "Opera Software", "Opera Stable") }, - // { name: "vivaldi", path: path.join(userProfile, "AppData", "Local", "Vivaldi", "User Data", "Default") }, - // { name: "safari", path: path.join(userProfile, "AppData", "Local", "Apple Computer", "Safari") }, - // { name: "whale", path: path.join(userProfile, "AppData", "Local", "Naver", "Naver Whale", "User Data", "Default") } - ]; + if (platform === "win32") { + const paths = [ + "C:\\Program Files\\Mozilla Firefox\\firefox.exe", + "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe", + `${process.env.LOCALAPPDATA}\\Mozilla Firefox\\firefox.exe`, + ]; - // Search for the first available browser profile. - for (const browser of browsers) { - if (browser.path && fs.existsSync(browser.path)) { - logger.info(`Browser found: ${browser.name}`); - return browser.name; - } + isFirefoxHere = paths.some(p => fs.existsSync(p)); } - // No supported browser found => Notify User - logger.warn("No supported browser found on the system"); + if (platform === "linux") { + const paths = [ + "/usr/bin/firefox", + "/usr/bin/firefox-esr", + "/usr/local/bin/firefox", + "/snap/bin/firefox", + "/var/lib/flatpak/exports/bin/org.mozilla.firefox", + `${os.homedir()}/.local/share/flatpak/exports/bin/org.mozilla.firefox`, + ]; + isFirefoxHere = paths.some(p => fs.existsSync(p)); + } - // If you somehow managed to live without Firefox and need help installing it. - Don't applied to my Linux chad - if (process.platform === "win32") { + if (!isFirefoxHere) { + // If you somehow managed to live without Firefox and need help installing it. - Don't applied to my Linux chad + // No supported browser found => Notify User + logger.warn("No supported browser found on the system"); notify.notifyFirefoxBrowserMissing(); + } else { + logger.info("Browser found: firefox"); } // Fallback to Firefox and let yt-dlp handle the error gracefully. @@ -64,39 +60,4 @@ function getUserBrowser() { return "firefox"; } -function getFirefoxProfilePath() { - const home = os.homedir(); - - if (process.platform === "win32") { - return path.join( - home, - "AppData", - "Roaming", - "Mozilla", - "Firefox", - "Profiles" - ); - } - - if (process.platform === "linux") { - return path.join( - "usr", - "bin", - "firefox" - ); - } - - if (process.platform === "darwin") { - return path.join( - home, - "Library", - "Application Support", - "Firefox", - "Profiles" - ); - } - - return null; -} - -module.exports = getUserBrowser \ No newline at end of file +module.exports = {getUserBrowser}; \ No newline at end of file diff --git a/server/services/info.services.js b/server/services/info.services.js index a52d73d..7644b62 100644 --- a/server/services/info.services.js +++ b/server/services/info.services.js @@ -1,6 +1,6 @@ const { execFile } = require("child_process"); const { userYtDlp, denoPath } = require("../helpers/path.helpers"); -const getUserBrowser = require("../helpers/getBrowser.helpers"); +const {getUserBrowser} = require("../helpers/getBrowser.helpers"); const { logger } = require("../logger"); /** @@ -61,6 +61,7 @@ function fetchInfo(url) { try { const data = JSON.parse(stdout); + resolve(data); } catch (e) { logger.error(`JSON Parsing Error: ${e.message}`);