You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
8.9 KiB
JavaScript
328 lines
8.9 KiB
JavaScript
const {ipcRenderer, shell} = require("electron");
|
|
const {accessSync, constants} = require("original-fs");
|
|
|
|
const storageTheme = localStorage.getItem("theme");
|
|
if (storageTheme) {
|
|
document.documentElement.setAttribute("theme", storageTheme);
|
|
} else {
|
|
document.documentElement.setAttribute("theme", "frappe");
|
|
}
|
|
|
|
let rightToLeft = "false";
|
|
if (localStorage.getItem("rightToLeft")) {
|
|
rightToLeft = localStorage.getItem("rightToLeft");
|
|
}
|
|
if (rightToLeft == "true") {
|
|
document
|
|
.querySelectorAll(".prefBox")
|
|
.forEach((/** @type {HTMLElement} */ item) => {
|
|
item.style.flexDirection = "row-reverse";
|
|
});
|
|
} else {
|
|
console.log("Change to left to right");
|
|
document
|
|
.querySelectorAll(".prefBox")
|
|
.forEach((/** @type {HTMLElement} */ item) => {
|
|
item.style.flexDirection = "row";
|
|
});
|
|
}
|
|
let downloadPath = localStorage.getItem("downloadPath");
|
|
getId("path").textContent = downloadPath;
|
|
|
|
/**
|
|
*
|
|
* @param {string} id
|
|
* @returns {any}
|
|
*/
|
|
function getId(id) {
|
|
return document.getElementById(id);
|
|
}
|
|
|
|
document.addEventListener("translations-loaded", () => {
|
|
window.i18n.translatePage();
|
|
|
|
document.title = window.i18n.__("preferences");
|
|
});
|
|
|
|
getId("back").addEventListener("click", () => {
|
|
ipcRenderer.send("close-secondary");
|
|
});
|
|
|
|
// Selecting download directory
|
|
getId("selectLocation").addEventListener("click", () => {
|
|
ipcRenderer.send("select-location-secondary", "");
|
|
});
|
|
|
|
ipcRenderer.on("downloadPath", (_event, downloadPath) => {
|
|
try {
|
|
accessSync(downloadPath[0], constants.W_OK);
|
|
|
|
console.log(downloadPath[0]);
|
|
localStorage.setItem("downloadPath", downloadPath[0]);
|
|
getId("path").textContent = downloadPath[0];
|
|
} catch (error) {
|
|
showPopup(i18n.__("unableToAccessDir"), true);
|
|
}
|
|
});
|
|
|
|
// Selecting config directory
|
|
|
|
getId("configBtn").addEventListener("click", () => {
|
|
ipcRenderer.send("select-config", "");
|
|
});
|
|
|
|
ipcRenderer.on("configPath", (event, configPath) => {
|
|
console.log(configPath);
|
|
localStorage.setItem("configPath", configPath);
|
|
getId("configPath").textContent = configPath;
|
|
});
|
|
|
|
const configCheck = getId("configCheck");
|
|
configCheck.addEventListener("change", (event) => {
|
|
if (configCheck.checked) {
|
|
getId("configOpts").style.display = "flex";
|
|
} else {
|
|
getId("configOpts").style.display = "none";
|
|
localStorage.setItem("configPath", "");
|
|
}
|
|
});
|
|
|
|
const configPath = localStorage.getItem("configPath");
|
|
if (configPath) {
|
|
getId("configPath").textContent = configPath;
|
|
configCheck.checked = true;
|
|
getId("configOpts").style.display = "flex";
|
|
}
|
|
|
|
// Language settings
|
|
|
|
const language = localStorage.getItem("locale");
|
|
|
|
if (language) {
|
|
if (language.startsWith("en")) {
|
|
getId("select").value = "en";
|
|
} else {
|
|
getId("select").value = language;
|
|
}
|
|
}
|
|
|
|
function changeLanguage() {
|
|
const language = getId("select").value;
|
|
localStorage.setItem("locale", language);
|
|
if (language === "fa" || language === "ar") {
|
|
rightToLeft = "true";
|
|
localStorage.setItem("rightToLeft", "true");
|
|
} else {
|
|
rightToLeft = "false";
|
|
localStorage.setItem("rightToLeft", "false");
|
|
}
|
|
}
|
|
|
|
// Browser preferences
|
|
let browser = localStorage.getItem("browser");
|
|
if (browser) {
|
|
getId("browser").value = browser;
|
|
}
|
|
|
|
getId("browser").addEventListener("change", () => {
|
|
browser = getId("browser").value;
|
|
localStorage.setItem("browser", browser);
|
|
});
|
|
|
|
// Handling preferred video quality
|
|
let preferredVideoQuality = localStorage.getItem("preferredVideoQuality");
|
|
if (preferredVideoQuality) {
|
|
getId("preferredVideoQuality").value = preferredVideoQuality;
|
|
}
|
|
|
|
getId("preferredVideoQuality").addEventListener("change", () => {
|
|
preferredVideoQuality = getId("preferredVideoQuality").value;
|
|
localStorage.setItem("preferredVideoQuality", preferredVideoQuality);
|
|
});
|
|
|
|
// Handling preferred audio quality
|
|
let preferredAudioQuality = localStorage.getItem("preferredAudioQuality");
|
|
if (preferredAudioQuality) {
|
|
getId("preferredAudioQuality").value = preferredAudioQuality;
|
|
}
|
|
|
|
getId("preferredAudioQuality").addEventListener("change", () => {
|
|
preferredAudioQuality = getId("preferredAudioQuality").value;
|
|
localStorage.setItem("preferredAudioQuality", preferredAudioQuality);
|
|
});
|
|
|
|
// Handling preferred video codec
|
|
let preferredVideoCodec = localStorage.getItem("preferredVideoCodec");
|
|
if (preferredVideoCodec) {
|
|
getId("preferredVideoCodec").value = preferredVideoCodec;
|
|
}
|
|
|
|
getId("preferredVideoCodec").addEventListener("change", () => {
|
|
preferredVideoCodec = getId("preferredVideoCodec").value;
|
|
localStorage.setItem("preferredVideoCodec", preferredVideoCodec);
|
|
});
|
|
|
|
// Proxy
|
|
let proxy = localStorage.getItem("proxy");
|
|
if (proxy) {
|
|
getId("proxyTxt").value = proxy;
|
|
}
|
|
getId("proxyTxt").addEventListener("change", () => {
|
|
proxy = getId("proxyTxt").value;
|
|
localStorage.setItem("proxy", proxy);
|
|
});
|
|
|
|
// Custom yt-dlp args
|
|
const ytDlpArgsInput = getId("customArgsInput");
|
|
let customYtDlpArgs = localStorage.getItem("customYtDlpArgs");
|
|
if (customYtDlpArgs) {
|
|
ytDlpArgsInput.value = customYtDlpArgs;
|
|
ytDlpArgsInput.style.height = ytDlpArgsInput.scrollHeight + "px";
|
|
}
|
|
ytDlpArgsInput.addEventListener("input", () => {
|
|
customYtDlpArgs = getId("customArgsInput").value;
|
|
localStorage.setItem("customYtDlpArgs", customYtDlpArgs.trim());
|
|
ytDlpArgsInput.style.height = "auto";
|
|
ytDlpArgsInput.style.height = ytDlpArgsInput.scrollHeight + "px";
|
|
});
|
|
|
|
getId("learnMoreLink").addEventListener("click", () => {
|
|
shell.openExternal(
|
|
"https://github.com/aandrew-me/ytDownloader/wiki/Custom-yt%E2%80%90dlp-options"
|
|
);
|
|
});
|
|
|
|
// Reload
|
|
function reload() {
|
|
ipcRenderer.send("reload");
|
|
}
|
|
getId("restart").addEventListener("click", () => {
|
|
reload();
|
|
});
|
|
|
|
// Handling filename formats
|
|
getId("filenameFormat").addEventListener("input", () => {
|
|
const text = getId("filenameFormat").value;
|
|
localStorage.setItem("filenameFormat", text);
|
|
});
|
|
|
|
if (localStorage.getItem("filenameFormat")) {
|
|
getId("filenameFormat").value = localStorage.getItem("filenameFormat");
|
|
}
|
|
|
|
getId("resetFilenameFormat").addEventListener("click", () => {
|
|
getId("filenameFormat").value = "%(playlist_index)s.%(title)s.%(ext)s";
|
|
localStorage.setItem(
|
|
"filenameFormat",
|
|
"%(playlist_index)s.%(title)s.%(ext)s"
|
|
);
|
|
});
|
|
|
|
// Handling folder name formats
|
|
getId("foldernameFormat").addEventListener("input", () => {
|
|
const text = getId("foldernameFormat").value;
|
|
localStorage.setItem("foldernameFormat", text);
|
|
});
|
|
|
|
if (localStorage.getItem("foldernameFormat")) {
|
|
getId("foldernameFormat").value = localStorage.getItem("foldernameFormat");
|
|
}
|
|
|
|
getId("resetFoldernameFormat").addEventListener("click", () => {
|
|
getId("foldernameFormat").value = "%(playlist_title)s";
|
|
localStorage.setItem("foldernameFormat", "%(playlist_title)s");
|
|
});
|
|
|
|
// Max active downloads
|
|
getId("maxDownloads").addEventListener("input", () => {
|
|
const number = Number(getId("maxDownloads").value);
|
|
|
|
if (number < 1) {
|
|
localStorage.setItem("maxActiveDownloads", "1");
|
|
} else {
|
|
localStorage.setItem("maxActiveDownloads", String(number));
|
|
}
|
|
});
|
|
|
|
if (localStorage.getItem("maxActiveDownloads")) {
|
|
getId("maxDownloads").value = localStorage.getItem("maxActiveDownloads");
|
|
}
|
|
|
|
// Closing app to system tray
|
|
const closeToTray = getId("closeToTray");
|
|
closeToTray.addEventListener("change", (event) => {
|
|
if (closeToTray.checked) {
|
|
localStorage.setItem("closeToTray", "true");
|
|
ipcRenderer.send("useTray", true);
|
|
} else {
|
|
localStorage.setItem("closeToTray", "false");
|
|
ipcRenderer.send("useTray", false);
|
|
}
|
|
});
|
|
const trayEnabled = localStorage.getItem("closeToTray");
|
|
if (trayEnabled == "true") {
|
|
closeToTray.checked = true;
|
|
ipcRenderer.send("useTray", true);
|
|
}
|
|
|
|
// Auto updates
|
|
const autoUpdateDisabled = getId("autoUpdateDisabled");
|
|
autoUpdateDisabled.addEventListener("change", (event) => {
|
|
if (autoUpdateDisabled.checked) {
|
|
localStorage.setItem("autoUpdate", "false");
|
|
} else {
|
|
localStorage.setItem("autoUpdate", "true");
|
|
}
|
|
});
|
|
const autoUpdate = localStorage.getItem("autoUpdate");
|
|
if (autoUpdate == "false") {
|
|
autoUpdateDisabled.checked = true;
|
|
}
|
|
|
|
// Show more format options
|
|
const showMoreFormats = getId("showMoreFormats");
|
|
showMoreFormats.addEventListener("change", (event) => {
|
|
if (showMoreFormats.checked) {
|
|
localStorage.setItem("showMoreFormats", "true");
|
|
} else {
|
|
localStorage.setItem("showMoreFormats", "false");
|
|
}
|
|
});
|
|
const showMoreFormatOpts = localStorage.getItem("showMoreFormats");
|
|
if (showMoreFormatOpts == "true") {
|
|
showMoreFormats.checked = true;
|
|
}
|
|
|
|
function showPopup(text, isError = false) {
|
|
let popupContainer = document.getElementById("popupContainer");
|
|
|
|
if (!popupContainer) {
|
|
popupContainer = document.createElement("div");
|
|
popupContainer.id = "popupContainer";
|
|
popupContainer.className = "popup-container";
|
|
document.body.appendChild(popupContainer);
|
|
}
|
|
|
|
const popup = document.createElement("span");
|
|
popup.textContent = text;
|
|
popup.classList.add("popup-item");
|
|
|
|
popup.style.background = isError ? "#ff6b6b" : "#54abde";
|
|
|
|
if (isError) {
|
|
popup.classList.add("popup-error");
|
|
}
|
|
|
|
popupContainer.appendChild(popup);
|
|
|
|
setTimeout(() => {
|
|
popup.style.opacity = "0";
|
|
setTimeout(() => {
|
|
popup.remove();
|
|
if (popupContainer.childElementCount === 0) {
|
|
popupContainer.remove();
|
|
}
|
|
}, 1000);
|
|
}, 2200);
|
|
}
|