mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 18:25:47 +02:00
@@ -8,8 +8,6 @@
|
|||||||
"verboseLogs": false,
|
"verboseLogs": false,
|
||||||
"autoDownloadPlaylist": true,
|
"autoDownloadPlaylist": true,
|
||||||
"customCodec": "h264",
|
"customCodec": "h264",
|
||||||
|
|
||||||
|
|
||||||
"logSystem": true,
|
"logSystem": true,
|
||||||
"outputTitleCheck": true,
|
"outputTitleCheck": true,
|
||||||
"downloadSystem": true,
|
"downloadSystem": true,
|
||||||
|
|||||||
43
main.js
43
main.js
@@ -205,6 +205,49 @@ app.whenReady().then(async () => {
|
|||||||
return configFeatures;
|
return configFeatures;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const featureWhitelist = new Set([
|
||||||
|
"autoUpdate",
|
||||||
|
"discordRPC",
|
||||||
|
"customTopBar",
|
||||||
|
"autoCheckInfo",
|
||||||
|
"addThumbnail",
|
||||||
|
"addMetadata",
|
||||||
|
"verboseLogs",
|
||||||
|
"autoDownloadPlaylist",
|
||||||
|
"customCodec"
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
ipcMain.handle("set-feature", (event, { key, value }) => {
|
||||||
|
try {
|
||||||
|
if (!featureWhitelist.has(key)) {
|
||||||
|
logger.warn(`Rejected feature (not whitelisted): ${key}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// optionnel mais propre
|
||||||
|
if (configFeatures[key] === value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
configFeatures[key] = value;
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
configFolderPath,
|
||||||
|
JSON.stringify(configFeatures, null, 2),
|
||||||
|
"utf-8"
|
||||||
|
);
|
||||||
|
|
||||||
|
logger.info(`Feature updated: ${key} = ${value}`);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(`set-feature failed (${key}): ${err.message}`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
configFeatures.discordRPC ? startRPC() : "";
|
configFeatures.discordRPC ? startRPC() : "";
|
||||||
|
|
||||||
await createMainWindow();
|
await createMainWindow();
|
||||||
|
|||||||
71
package-lock.json
generated
71
package-lock.json
generated
@@ -11,7 +11,6 @@
|
|||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"debug": "^4.4.1",
|
"debug": "^4.4.1",
|
||||||
"discord-rpc": "^4.0.1",
|
"discord-rpc": "^4.0.1",
|
||||||
"electron-squirrel-startup": "^1.0.1",
|
|
||||||
"electron-updater": "^6.6.2",
|
"electron-updater": "^6.6.2",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"express-rate-limit": "^8.2.1",
|
"express-rate-limit": "^8.2.1",
|
||||||
@@ -428,7 +427,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cross-dirname": "^0.1.0",
|
"cross-dirname": "^0.1.0",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
@@ -450,7 +448,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"graceful-fs": "^4.2.0",
|
"graceful-fs": "^4.2.0",
|
||||||
"jsonfile": "^6.0.1",
|
"jsonfile": "^6.0.1",
|
||||||
@@ -467,7 +464,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"universalify": "^2.0.0"
|
"universalify": "^2.0.0"
|
||||||
},
|
},
|
||||||
@@ -482,7 +478,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10.0.0"
|
"node": ">= 10.0.0"
|
||||||
}
|
}
|
||||||
@@ -971,6 +966,7 @@
|
|||||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.1",
|
"fast-deep-equal": "^3.1.1",
|
||||||
"fast-json-stable-stringify": "^2.0.0",
|
"fast-json-stable-stringify": "^2.0.0",
|
||||||
@@ -1512,9 +1508,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/cacache/node_modules/tar": {
|
"node_modules/cacache/node_modules/tar": {
|
||||||
"version": "7.5.2",
|
"version": "7.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz",
|
||||||
"integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==",
|
"integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BlueOak-1.0.0",
|
"license": "BlueOak-1.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1905,8 +1901,7 @@
|
|||||||
"integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==",
|
"integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true
|
||||||
"peer": true
|
|
||||||
},
|
},
|
||||||
"node_modules/cross-spawn": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.6",
|
"version": "7.0.6",
|
||||||
@@ -2432,30 +2427,6 @@
|
|||||||
"node": ">= 10.0.0"
|
"node": ">= 10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-squirrel-startup": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-sTfFIHGku+7PsHLJ7v0dRcZNkALrV+YEozINTW8X1nM//e5O3L+rfYuvSW00lmGHnYmUjARZulD8F2V8ISI9RA==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"debug": "^2.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/electron-squirrel-startup/node_modules/debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/electron-squirrel-startup/node_modules/ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/electron-updater": {
|
"node_modules/electron-updater": {
|
||||||
"version": "6.7.3",
|
"version": "6.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.7.3.tgz",
|
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.7.3.tgz",
|
||||||
@@ -2526,7 +2497,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/asar": "^3.2.1",
|
"@electron/asar": "^3.2.1",
|
||||||
"debug": "^4.1.1",
|
"debug": "^4.1.1",
|
||||||
@@ -2547,7 +2517,6 @@
|
|||||||
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
|
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"graceful-fs": "^4.1.2",
|
"graceful-fs": "^4.1.2",
|
||||||
"jsonfile": "^4.0.0",
|
"jsonfile": "^4.0.0",
|
||||||
@@ -2579,16 +2548,6 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/encoding": {
|
|
||||||
"version": "0.1.13",
|
|
||||||
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
|
|
||||||
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"iconv-lite": "^0.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/end-of-stream": {
|
"node_modules/end-of-stream": {
|
||||||
"version": "1.4.5",
|
"version": "1.4.5",
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
|
||||||
@@ -2721,6 +2680,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
|
||||||
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
|
"integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"accepts": "^2.0.0",
|
"accepts": "^2.0.0",
|
||||||
"body-parser": "^2.2.1",
|
"body-parser": "^2.2.1",
|
||||||
@@ -4096,9 +4056,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-abi": {
|
"node_modules/node-abi": {
|
||||||
"version": "4.24.0",
|
"version": "4.25.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.24.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.25.0.tgz",
|
||||||
"integrity": "sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==",
|
"integrity": "sha512-BRrQZc23ljOLms7EXVds3MOpB59/x7gaORodNuIwt96JKlflUmrOgv5hSJZEEM/WkW3uXpjZ4x1wcFu8V9mTpw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4220,9 +4180,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-gyp/node_modules/tar": {
|
"node_modules/node-gyp/node_modules/tar": {
|
||||||
"version": "7.5.2",
|
"version": "7.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz",
|
||||||
"integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==",
|
"integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BlueOak-1.0.0",
|
"license": "BlueOak-1.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -4521,6 +4481,7 @@
|
|||||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
@@ -4550,7 +4511,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"commander": "^9.4.0"
|
"commander": "^9.4.0"
|
||||||
},
|
},
|
||||||
@@ -4568,7 +4528,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.20.0 || >=14"
|
"node": "^12.20.0 || >=14"
|
||||||
}
|
}
|
||||||
@@ -4826,7 +4785,6 @@
|
|||||||
"deprecated": "Rimraf versions prior to v4 are no longer supported",
|
"deprecated": "Rimraf versions prior to v4 are no longer supported",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"glob": "^7.1.3"
|
"glob": "^7.1.3"
|
||||||
},
|
},
|
||||||
@@ -5443,7 +5401,6 @@
|
|||||||
"integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==",
|
"integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"rimraf": "~2.6.2"
|
"rimraf": "~2.6.2"
|
||||||
@@ -5507,7 +5464,6 @@
|
|||||||
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minimist": "^1.2.6"
|
"minimist": "^1.2.6"
|
||||||
},
|
},
|
||||||
@@ -5802,6 +5758,7 @@
|
|||||||
"resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz",
|
"resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz",
|
||||||
"integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==",
|
"integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@colors/colors": "^1.6.0",
|
"@colors/colors": "^1.6.0",
|
||||||
"@dabh/diagnostics": "^2.0.8",
|
"@dabh/diagnostics": "^2.0.8",
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ contextBridge.exposeInMainWorld("electronAPI", {
|
|||||||
selectDownloadFolder: () => ipcRenderer.invoke("select-download-folder"),
|
selectDownloadFolder: () => ipcRenderer.invoke("select-download-folder"),
|
||||||
setProgress: (percent) => ipcRenderer.send("set-progress", percent),
|
setProgress: (percent) => ipcRenderer.send("set-progress", percent),
|
||||||
getFeatures: () => ipcRenderer.invoke("features"),
|
getFeatures: () => ipcRenderer.invoke("features"),
|
||||||
|
setFeature: (key, value) => ipcRenderer.invoke("set-feature", { key, value }),
|
||||||
getVersion: () => ipcRenderer.invoke("version"),
|
getVersion: () => ipcRenderer.invoke("version"),
|
||||||
getValidatedDownloadPath: (path) => ipcRenderer.invoke("validate-download-path", path)
|
getValidatedDownloadPath: (path) => ipcRenderer.invoke("validate-download-path", path)
|
||||||
});
|
});
|
||||||
|
|||||||
2
public/assets/icon/settings.svg
Normal file
2
public/assets/icon/settings.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><title>ionicons-v5-q</title><path d="M262.29,192.31a64,64,0,1,0,57.4,57.4A64.13,64.13,0,0,0,262.29,192.31ZM416.39,256a154.34,154.34,0,0,1-1.53,20.79l45.21,35.46A10.81,10.81,0,0,1,462.52,326l-42.77,74a10.81,10.81,0,0,1-13.14,4.59l-44.9-18.08a16.11,16.11,0,0,0-15.17,1.75A164.48,164.48,0,0,1,325,400.8a15.94,15.94,0,0,0-8.82,12.14l-6.73,47.89A11.08,11.08,0,0,1,298.77,470H213.23a11.11,11.11,0,0,1-10.69-8.87l-6.72-47.82a16.07,16.07,0,0,0-9-12.22,155.3,155.3,0,0,1-21.46-12.57,16,16,0,0,0-15.11-1.71l-44.89,18.07a10.81,10.81,0,0,1-13.14-4.58l-42.77-74a10.8,10.8,0,0,1,2.45-13.75l38.21-30a16.05,16.05,0,0,0,6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16,16,0,0,0-6.07-13.94l-38.19-30A10.81,10.81,0,0,1,49.48,186l42.77-74a10.81,10.81,0,0,1,13.14-4.59l44.9,18.08a16.11,16.11,0,0,0,15.17-1.75A164.48,164.48,0,0,1,187,111.2a15.94,15.94,0,0,0,8.82-12.14l6.73-47.89A11.08,11.08,0,0,1,213.23,42h85.54a11.11,11.11,0,0,1,10.69,8.87l6.72,47.82a16.07,16.07,0,0,0,9,12.22,155.3,155.3,0,0,1,21.46,12.57,16,16,0,0,0,15.11,1.71l44.89-18.07a10.81,10.81,0,0,1,13.14,4.58l42.77,74a10.8,10.8,0,0,1-2.45,13.75l-38.21,30a16.05,16.05,0,0,0-6.05,14.08C416.17,247.67,416.39,251.83,416.39,256Z" style="fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -23,7 +23,6 @@
|
|||||||
<button id="logs-btn" title="Logs">Logs</button>
|
<button id="logs-btn" title="Logs">Logs</button>
|
||||||
<button id="website-btn" title="Website">Website</button>
|
<button id="website-btn" title="Website">Website</button>
|
||||||
<button id="wiki-btn" title="Wiki">Wiki</button>
|
<button id="wiki-btn" title="Wiki">Wiki</button>
|
||||||
<button id="config-btn" title="Configuration">Configuration</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="window-controls">
|
<div class="window-controls">
|
||||||
<button id="minimize-btn" title="Réduire"><img src="assets/icon/minimize.svg"></button>
|
<button id="minimize-btn" title="Réduire"><img src="assets/icon/minimize.svg"></button>
|
||||||
@@ -32,9 +31,167 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="theme-switcher" id="theme-switcher">
|
<button class="settings-button" id="settings-button">
|
||||||
<label for="themeSelect">Thème :</label>
|
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><title>ionicons-v5-q</title><path d="M262.29,192.31a64,64,0,1,0,57.4,57.4A64.13,64.13,0,0,0,262.29,192.31ZM416.39,256a154.34,154.34,0,0,1-1.53,20.79l45.21,35.46A10.81,10.81,0,0,1,462.52,326l-42.77,74a10.81,10.81,0,0,1-13.14,4.59l-44.9-18.08a16.11,16.11,0,0,0-15.17,1.75A164.48,164.48,0,0,1,325,400.8a15.94,15.94,0,0,0-8.82,12.14l-6.73,47.89A11.08,11.08,0,0,1,298.77,470H213.23a11.11,11.11,0,0,1-10.69-8.87l-6.72-47.82a16.07,16.07,0,0,0-9-12.22,155.3,155.3,0,0,1-21.46-12.57,16,16,0,0,0-15.11-1.71l-44.89,18.07a10.81,10.81,0,0,1-13.14-4.58l-42.77-74a10.8,10.8,0,0,1,2.45-13.75l38.21-30a16.05,16.05,0,0,0,6-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16,16,0,0,0-6.07-13.94l-38.19-30A10.81,10.81,0,0,1,49.48,186l42.77-74a10.81,10.81,0,0,1,13.14-4.59l44.9,18.08a16.11,16.11,0,0,0,15.17-1.75A164.48,164.48,0,0,1,187,111.2a15.94,15.94,0,0,0,8.82-12.14l6.73-47.89A11.08,11.08,0,0,1,213.23,42h85.54a11.11,11.11,0,0,1,10.69,8.87l6.72,47.82a16.07,16.07,0,0,0,9,12.22,155.3,155.3,0,0,1,21.46,12.57,16,16,0,0,0,15.11,1.71l44.89-18.07a10.81,10.81,0,0,1,13.14,4.58l42.77,74a10.8,10.8,0,0,1-2.45,13.75l-38.21,30a16.05,16.05,0,0,0-6.05,14.08C416.17,247.67,416.39,251.83,416.39,256Z" style="fill:none;stroke:var(--settings-button-text-color);stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/></svg>
|
||||||
<select id="themeSelect" aria-label="Choisir le thème"></select>
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="settings-panel" id="settings-panel">
|
||||||
|
<div class="settings-modal">
|
||||||
|
|
||||||
|
<button class="close-btn" onclick="closePanel()">✕</button>
|
||||||
|
|
||||||
|
<div class="settings-title">
|
||||||
|
<h2>SETTINGS</h2>
|
||||||
|
<p style="font-size: 0.8em;">Changes are saved automatically. <br> Somes changes could need a restart</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Basic Settings visibles -->
|
||||||
|
<div class="settings-section">
|
||||||
|
<h3>Basic Settings</h3>
|
||||||
|
|
||||||
|
<div class="setting-item" id="theme" style="margin-left: 32px;">
|
||||||
|
<div class="setting-info">
|
||||||
|
<div style="display: flex;">
|
||||||
|
<span class="setting-title">Thème</span>
|
||||||
|
|
||||||
|
<select id="themeSelect" data-key="theme" aria-label="Choisir le thème">
|
||||||
|
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<small>Choose the theme of the application</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="discordRPC" id="discordRPC">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Discord RPC</span>
|
||||||
|
<small>Enable/disable Discord Rich Presence for your app.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoDownloadPlaylist" id="autoDownloadPlaylist">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Download Playlist automatically?</span>
|
||||||
|
<small>If enabled, playlists will download without confirmation.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="notifySystem" id="notifySystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Notification at the end</span>
|
||||||
|
<small>Notify when a download finishes.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="customTopBar" id="customTopBar">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Custom Top bar</span>
|
||||||
|
<small>Use this if the topbar is missing or you prefer a custom one.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoCheckInfo" id="autoCheckInfo">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Auto Fetch Info</span>
|
||||||
|
<small>Automatically fetch information for new downloads.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Advanced Settings -->
|
||||||
|
<details class="settings-section">
|
||||||
|
<summary>Advanced Settings</summary>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="autoUpdate" id="autoUpdate">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Auto Update</span>
|
||||||
|
<small>Enable automatic app updates.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="outputTitleCheck" id="outputTitleCheck">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Output title (special chars)</span>
|
||||||
|
<small>Check for unusual characters in output titles.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="addMetadata" id="addMetadata">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Add Metadata</span>
|
||||||
|
<small>Include metadata in downloaded files.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="addThumbnail" id="addThumbnail">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Add Thumbnail</span>
|
||||||
|
<small>Include thumbnails in downloaded files.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="setting-item" style="margin-left: 32px; margin-top: 20px;">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Custom Codec</span>
|
||||||
|
<select data-key="customCodec">
|
||||||
|
<option value="h264">H264</option>
|
||||||
|
<option value="vp9">VP9</option>
|
||||||
|
<option value="av1">AV1</option>
|
||||||
|
</select>
|
||||||
|
<small>Choose your preferred video codec.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<!-- Developer Settings -->
|
||||||
|
<details class="settings-section">
|
||||||
|
<summary>Developer Settings</summary>
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="downloadSystem" id="downloadSystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Download System</span>
|
||||||
|
<small>Enable/disable the internal download system.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<!-- <div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="logSystem" id="logSystem">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Log System</span>
|
||||||
|
<small>Enable logging system.</small>
|
||||||
|
</div>
|
||||||
|
</div> -->
|
||||||
|
|
||||||
|
<div class="setting-item">
|
||||||
|
<input type="checkbox" data-key="verboseLogs" id="verboseLogs">
|
||||||
|
<div class="setting-info">
|
||||||
|
<span class="setting-title">Verbose Logs</span>
|
||||||
|
<small>Show verbose logs for debugging purposes.</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<div class="settings-footer">
|
||||||
|
<button id="open-json-btn">Open JSON Configuration</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="container" id="container">
|
<div class="container" id="container">
|
||||||
@@ -98,8 +255,12 @@
|
|||||||
|
|
||||||
<span id="version-badge" class="version-badge"></span>
|
<span id="version-badge" class="version-badge"></span>
|
||||||
|
|
||||||
|
<h2 id="reference"> Because Why Not ? </h2>
|
||||||
|
|
||||||
|
|
||||||
<!-- Scripts -->
|
<!-- Scripts -->
|
||||||
<script src="script/custompath.js"></script>
|
<script src="script/custompath.js"></script>
|
||||||
|
<script src="script/settingsPanel.js"></script>
|
||||||
<script src="script/appVersion.js"></script>
|
<script src="script/appVersion.js"></script>
|
||||||
<script src="script/downloadstatus.js"></script>
|
<script src="script/downloadstatus.js"></script>
|
||||||
<script src="script/fetchinfo.js"></script>
|
<script src="script/fetchinfo.js"></script>
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
const themes = {
|
const themes = {
|
||||||
default: { label: "Default", subtitle: "Because why not?" },
|
|
||||||
dark: { label: "Sombre", subtitle: "Darkness is my ally" },
|
dark: { label: "Sombre", subtitle: "Darkness is my ally" },
|
||||||
light: { label: "Clair", subtitle: "Qui aime ce thème ?" },
|
light: { label: "Clair", subtitle: "Qui aime ce thème ?" },
|
||||||
neon: { label: "Néon", subtitle: "How was your day ?"},
|
neon: { label: "Purple", subtitle: "How was your day ?"},
|
||||||
nf: { label: "NF", subtitle: "You call it music, i call it my Therapist" },
|
nf: { label: "NF", subtitle: "You call it music, i call it my Therapist" },
|
||||||
songbird: { label: "Songbird", subtitle: "From Her to Eternity" },
|
songbird: { label: "Songbird", subtitle: "From Her to Eternity" },
|
||||||
drift: { label: "Drift", subtitle: "Si la route t'appelle, contre appel" },
|
drift: { label: "Drift", subtitle: "Si la route t'appelle, contre appel" },
|
||||||
|
|||||||
@@ -25,10 +25,9 @@ async function fetchVideoInfo(url) {
|
|||||||
return { error: "Network or JSON Issue" };
|
return { error: "Network or JSON Issue" };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function init() {
|
|
||||||
const configFeatures = await window.electronAPI.getFeatures();
|
|
||||||
|
|
||||||
if (!configFeatures.autoCheckInfo) return;
|
|
||||||
|
async function init() {
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
const urlInput = document.getElementById("UrlInput");
|
const urlInput = document.getElementById("UrlInput");
|
||||||
@@ -38,6 +37,10 @@ async function init() {
|
|||||||
let lastFetchedUrl = "";
|
let lastFetchedUrl = "";
|
||||||
|
|
||||||
urlInput.addEventListener("input", async () => {
|
urlInput.addEventListener("input", async () => {
|
||||||
|
|
||||||
|
const configFeatures = await window.electronAPI.getFeatures();
|
||||||
|
if (!configFeatures.autoCheckInfo) return;
|
||||||
|
|
||||||
const url = urlInput.value.trim();
|
const url = urlInput.value.trim();
|
||||||
|
|
||||||
// Si champ vide -> reset total
|
// Si champ vide -> reset total
|
||||||
|
|||||||
50
public/script/settingsPanel.js
Normal file
50
public/script/settingsPanel.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
const settingsPanel = document.getElementById("settings-panel");
|
||||||
|
const settingsModal = document.querySelector(".settings-modal");
|
||||||
|
|
||||||
|
const settingsButton = document.getElementById("settings-button");
|
||||||
|
|
||||||
|
let isOpen = false;
|
||||||
|
|
||||||
|
settingsButton.addEventListener("click", () => {
|
||||||
|
const isOpen = settingsPanel.style.display === "block";
|
||||||
|
settingsPanel.style.display = isOpen ? "none" : "block";
|
||||||
|
});
|
||||||
|
|
||||||
|
function closePanel() {
|
||||||
|
isOpen = false;
|
||||||
|
settingsPanel.style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
// charge les features
|
||||||
|
async function loadSettings() {
|
||||||
|
const features = await window.electronAPI.getFeatures();
|
||||||
|
|
||||||
|
document.querySelectorAll(".settings-section input, .settings-section select").forEach(el => {
|
||||||
|
const key = el.dataset.key;
|
||||||
|
if (features[key] !== undefined) {
|
||||||
|
if (el.type === "checkbox") el.checked = features[key];
|
||||||
|
else if (el.tagName === "SELECT") el.value = features[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
el.addEventListener("change", () => {
|
||||||
|
let value = el.type === "checkbox" ? el.checked : el.value;
|
||||||
|
window.electronAPI.setFeature(key, value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ouvrir le JSON
|
||||||
|
document.getElementById("open-json-btn").addEventListener("click", () => {
|
||||||
|
window.topbarAPI.openConfig(); // ton IPC existant
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* clic sur l'overlay = fermer */
|
||||||
|
settingsPanel.addEventListener("click", closePanel);
|
||||||
|
|
||||||
|
/* clic dans la modal = stop propagation */
|
||||||
|
settingsModal.addEventListener("click", (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
});
|
||||||
|
|
||||||
|
loadSettings();
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
.theme-switcher {
|
|
||||||
position: absolute;
|
|
||||||
top: 60px;
|
|
||||||
right: 10px;
|
|
||||||
background: #242424;
|
|
||||||
padding: 8px 12px;
|
|
||||||
border-radius: 8px;
|
|
||||||
color: #fff;
|
|
||||||
font-family: sans-serif;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 8px;
|
|
||||||
z-index: 1050;
|
|
||||||
}
|
|
||||||
|
|
||||||
.theme-switcher label {
|
|
||||||
cursor: pointer;
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
|
|
||||||
.theme-switcher select {
|
|
||||||
background: #fff;
|
|
||||||
border: 1px solid #242424;
|
|
||||||
border-radius: 6px;
|
|
||||||
padding: 4px 8px;
|
|
||||||
color: #000;
|
|
||||||
cursor: pointer;
|
|
||||||
font-weight: 600;
|
|
||||||
transition: background 0.3s ease, color 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.theme-switcher select:hover,
|
|
||||||
.theme-switcher select:focus {
|
|
||||||
background: #474747;
|
|
||||||
color: #fff;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
234
public/styles/layout/settingsPanel.css
Normal file
234
public/styles/layout/settingsPanel.css
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
/* SETTINGS BUTTON */
|
||||||
|
.settings-button {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
position: fixed;
|
||||||
|
top: 60px;
|
||||||
|
right: 20px;
|
||||||
|
opacity: 0.8;
|
||||||
|
background-color: var(--settings-button-bg-color);
|
||||||
|
border-radius: 14px;
|
||||||
|
padding: 8px;
|
||||||
|
border: none;
|
||||||
|
box-shadow: 0 6px 16px rgba(0,0,0,0.25);
|
||||||
|
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-button svg {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
stroke: var(--settings-button-text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-button:hover {
|
||||||
|
transform: scale(1.1);
|
||||||
|
cursor: pointer;
|
||||||
|
box-shadow: 0 10px 24px rgba(0,0,0,0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-button:active {
|
||||||
|
transform: scale(0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* SETTINGS PANEL */
|
||||||
|
.settings-panel {
|
||||||
|
position: fixed;
|
||||||
|
top: 60px;
|
||||||
|
right: 40px;
|
||||||
|
width: 40vw;
|
||||||
|
max-width: 320px;
|
||||||
|
max-height: 80vh;
|
||||||
|
background-color: var(--settings-bg-primary-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 20px;
|
||||||
|
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
|
||||||
|
display: none;
|
||||||
|
overflow-y: auto;
|
||||||
|
z-index: 9999;
|
||||||
|
animation: slideIn 0.2s ease-out;
|
||||||
|
color: var(--settings-text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-panel::-webkit-scrollbar {
|
||||||
|
width: 0px;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-modal {
|
||||||
|
width: 100%;
|
||||||
|
min-height: auto;
|
||||||
|
max-height: none;
|
||||||
|
padding: 0;
|
||||||
|
background: none;
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: none;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TITLE */
|
||||||
|
.settings-title {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-title h2 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-title p {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #ccc;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SECTION */
|
||||||
|
.settings-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
background: var(--settings-bg-secondary-color);
|
||||||
|
border-radius: 12px;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-section h3 {
|
||||||
|
margin: 0 0 10px 0;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SETTING ITEM */
|
||||||
|
.setting-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item input[type="checkbox"] {
|
||||||
|
margin: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-info small {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--settings-subtitle-color);
|
||||||
|
margin-top: 2px;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
#theme .settings-title{
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item select {
|
||||||
|
width: 70%;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #242424;
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
color: #000;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: background 0.3s ease, color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item select:hover,
|
||||||
|
.setting-item select:focus {
|
||||||
|
background: #474747;
|
||||||
|
color: #fff;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SELECT */
|
||||||
|
.settings-section select {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DETAILS / DROPDOWN */
|
||||||
|
details {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
background: #2a2a2a;
|
||||||
|
border-radius: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] {
|
||||||
|
box-shadow: 0 4px 15px rgba(0,0,0,0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
details summary {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FOOTER */
|
||||||
|
.settings-footer {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#open-json-btn {
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 600;
|
||||||
|
background-color: var(--form-button-bg-color);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#experimental-args {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 80px;
|
||||||
|
background-color: #1e1e1e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 8px;
|
||||||
|
color: #fff;
|
||||||
|
border: 1px solid #333;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CLOSE BTN */
|
||||||
|
.close-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
color: white;
|
||||||
|
font-size: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ANIMATION */
|
||||||
|
@keyframes popIn {
|
||||||
|
from { transform: scale(0.95); opacity: 0; }
|
||||||
|
to { transform: scale(1); opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideIn {
|
||||||
|
from { transform: translateX(20px); opacity: 0; }
|
||||||
|
to { transform: translateX(0); opacity: 1; }
|
||||||
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
/* Layout */
|
/* Layout */
|
||||||
@import url("layout/form.css");
|
@import url("layout/form.css");
|
||||||
|
@import url("layout/settingsPanel.css");
|
||||||
@import url("layout/container.css");
|
@import url("layout/container.css");
|
||||||
@import url("layout/header.css");
|
@import url("layout/header.css");
|
||||||
@import url("layout/videoinfo.css");
|
@import url("layout/videoinfo.css");
|
||||||
|
|
||||||
/* Components */
|
/* Components */
|
||||||
@import url("components/checkbox.css");
|
@import url("components/checkbox.css");
|
||||||
@import url("components/themebutton.css");
|
|
||||||
@import url("components/loader.css");
|
@import url("components/loader.css");
|
||||||
|
|
||||||
@import url("theme/themeimport.css");
|
@import url("theme/themeimport.css");
|
||||||
@@ -49,6 +49,16 @@ body {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Because why not */
|
||||||
|
#reference{
|
||||||
|
position: fixed;
|
||||||
|
pointer-events: none;
|
||||||
|
bottom:0vh;
|
||||||
|
left: 10px;
|
||||||
|
font-size: 1em;
|
||||||
|
color: #b0b0b02f;
|
||||||
|
}
|
||||||
|
|
||||||
/* Scrollbar globale pour Chromium/Electron */
|
/* Scrollbar globale pour Chromium/Electron */
|
||||||
body::-webkit-scrollbar {
|
body::-webkit-scrollbar {
|
||||||
width: 10px;
|
width: 10px;
|
||||||
|
|||||||
@@ -42,6 +42,16 @@ body.chirac {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #d1d1d1ca;
|
--playlist-background-color: #d1d1d1ca;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #00196a;
|
||||||
|
--settings-button-text-color: #dcdcdc;
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #0b0528;
|
||||||
|
--settings-bg-secondary-color: #1c1055;
|
||||||
|
|
||||||
|
--settings-text-color: #cecece;
|
||||||
|
--settings-subtitle-color: #adadad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,4 +36,14 @@ body.dark {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #303030;
|
--playlist-background-color: #303030;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #1e1e1e;
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #1e1e1e;
|
||||||
|
--settings-bg-secondary-color: #2a2a2a;
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #aaa;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
:root {
|
|
||||||
/* Couleurs générales */
|
|
||||||
--background-color: #001224; /* body background bleu nuit */
|
|
||||||
--default-text-color: #eee; /* texte clair principal */
|
|
||||||
--subtitle-color: #007bff; /* sous-titres, header p */
|
|
||||||
--mp3-text-color: #000000; /* couleur texte checkbox inline */
|
|
||||||
|
|
||||||
/* Formulaire */
|
|
||||||
--form-bg-color: #ffffff; /* fond du formulaire */
|
|
||||||
--form-input-bg-color: #f9f9f9; /* fond inputs */
|
|
||||||
--form-input-border-color: #cccccc; /* bordure inputs */
|
|
||||||
--form-input-border-focus-color: #0056b3; /* bordure focus */
|
|
||||||
--form-input-text-color: #333333; /* texte inputs */
|
|
||||||
--form-input-placeholder-color: #aaaaaa; /* placeholder */
|
|
||||||
--form-button-bg-color: #007bff; /* bouton bg */
|
|
||||||
--form-button-text-color: #ffffff; /* texte bouton */
|
|
||||||
--form-button-bg-hover-color: #0056b3; /* bouton hover */
|
|
||||||
|
|
||||||
/* Checkbox */
|
|
||||||
--checkbox-bg-default: #cccccc;
|
|
||||||
--checkbox-bg-checked: #3B82F6;
|
|
||||||
--checkbox-checkmark-border-color: #E0E0E2;
|
|
||||||
--checkbox-pulse-color: rgba(59, 130, 246, 0.5);
|
|
||||||
|
|
||||||
/* Download status */
|
|
||||||
--download-status-color: #007bff;
|
|
||||||
|
|
||||||
/* Video Info Box */
|
|
||||||
--infos-box-color: #0c0140;
|
|
||||||
--video-info-text-color: #ffffff;
|
|
||||||
--video-info-heading-color: #007bff;
|
|
||||||
--video-info-list-color: #cccccc;
|
|
||||||
--video-info-list-strong-color: #e6e6e6;
|
|
||||||
--video-info-link-color: #007bff;
|
|
||||||
--video-info-link-hover-color: #0056b3;
|
|
||||||
|
|
||||||
/* Playlist Color */
|
|
||||||
--playlist-background-color: #070823a3;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.default .download-path #savePath {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
@@ -42,6 +42,16 @@ body.drift {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #424b5cc2;
|
--playlist-background-color: #424b5cc2;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #1e222ace;
|
||||||
|
--settings-button-text-color: #b3b3b4;
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #1e222a;
|
||||||
|
--settings-bg-secondary-color: #272d38;
|
||||||
|
|
||||||
|
--settings-text-color: #bababa;
|
||||||
|
--settings-subtitle-color: #cacaca;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,4 +36,14 @@ body.fanatic{
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #2b2b2b;
|
--playlist-background-color: #2b2b2b;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #1e1e1e;
|
||||||
|
--settings-button-text-color: #dcdcdc;
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #1e1e1e;
|
||||||
|
--settings-bg-secondary-color: #2d2d2d;
|
||||||
|
|
||||||
|
--settings-text-color: #cecece;
|
||||||
|
--settings-subtitle-color: #adadad;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,4 +36,13 @@ body.light {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #c5c5c5b2;
|
--playlist-background-color: #c5c5c5b2;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #e4e4e4;
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #cbcbcb;
|
||||||
|
--settings-bg-secondary-color: #cbcbcb;
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #656565;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ body.neon {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #3e3e64;
|
--playlist-background-color: #3e3e64;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #202038;
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #242454;
|
||||||
|
--settings-bg-secondary-color: #2f2f6f;
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #d2d2d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.neon .download-path {
|
body.neon .download-path {
|
||||||
|
|||||||
@@ -42,6 +42,15 @@ body.nf {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #4f4f4f;
|
--playlist-background-color: #4f4f4f;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #2a2a2a;
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #2a2a2a;
|
||||||
|
--settings-bg-secondary-color: #313131;
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #7a7979;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.nf .download-path {
|
body.nf .download-path {
|
||||||
|
|||||||
@@ -42,6 +42,15 @@ body.songbird {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #3f0000;
|
--playlist-background-color: #3f0000;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: rgba(29, 0, 0, 0.784);
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #121212;
|
||||||
|
--settings-bg-secondary-color: #1a1a1a;
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #7a7979;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.cyberpunk .download-path {
|
body.cyberpunk .download-path {
|
||||||
|
|||||||
@@ -36,6 +36,17 @@ body.spicy {
|
|||||||
|
|
||||||
/* Playlist Color */
|
/* Playlist Color */
|
||||||
--playlist-background-color: #353232;
|
--playlist-background-color: #353232;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: #1a1a1a;
|
||||||
|
--settings-button-text-color: #dcdcdc;
|
||||||
|
|
||||||
|
--settings-bg-primary-color: #1a1a1a;
|
||||||
|
--settings-bg-secondary-color: #292929;
|
||||||
|
|
||||||
|
--settings-text-color: #cecece;
|
||||||
|
--settings-subtitle-color: #adadad;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Optionnel: background piments */
|
/* Optionnel: background piments */
|
||||||
|
|||||||
1
public/styles/theme/themeimport.css
vendored
1
public/styles/theme/themeimport.css
vendored
@@ -1,6 +1,5 @@
|
|||||||
@import url("chirac-theme.css");
|
@import url("chirac-theme.css");
|
||||||
@import url("dark-theme.css");
|
@import url("dark-theme.css");
|
||||||
@import url("default-theme.css");
|
|
||||||
@import url("fanatic-theme.css");
|
@import url("fanatic-theme.css");
|
||||||
@import url("light-theme.css");
|
@import url("light-theme.css");
|
||||||
@import url("nf-theme.css");
|
@import url("nf-theme.css");
|
||||||
|
|||||||
@@ -33,4 +33,14 @@
|
|||||||
--video-info-list-strong-color: #000000;
|
--video-info-list-strong-color: #000000;
|
||||||
--video-info-link-color: #007bff;
|
--video-info-link-color: #007bff;
|
||||||
--video-info-link-hover-color: #0056b3;
|
--video-info-link-hover-color: #0056b3;
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
--settings-button-bg-color: var(--form-bg-color);
|
||||||
|
--settings-button-text-color: var(--default-text-color);
|
||||||
|
|
||||||
|
--settings-bg-primary-color: var(--form-bg-color);
|
||||||
|
--settings-bg-secondary-color: var(--form-bg-color);
|
||||||
|
--settings-text-color: var(--default-text-color);
|
||||||
|
--settings-subtitle-color: #aaa;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user