mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-11-13 15:09:20 +01:00
Compare commits
8 Commits
f0971ebccc
...
1.6.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69de9eb9fc | ||
|
|
cfa85649b3 | ||
|
|
773ed9550d | ||
|
|
ea3a475525 | ||
|
|
738d5ec62f | ||
|
|
aff7637358 | ||
|
|
7ee6d6fbe7 | ||
|
|
6aa3a39819 |
11
README.md
11
README.md
@@ -56,7 +56,7 @@ The primary goal is to make media downloading accessible to users who want offli
|
||||
|
||||
### User Interface
|
||||
|
||||
- **Custom window controls** - Frameless window with custom top bar (optional)
|
||||
- **Custom window controls** - Frameless window with custom top bar
|
||||
- **Custom themes** - ZIP-based theme system with live preview
|
||||
- **Theme Workshop** - web-based theme creator and browser
|
||||
- **Toast notifications** - in-app feedback system
|
||||
@@ -151,6 +151,7 @@ freedom-loader
|
||||
|---------------|---------------------------------------------------------|--------------------------------------|
|
||||
| **Downloads** | `C:\Users\[USERNAME]\Downloads\Freedom Loader` | `~/Downloads/Freedom Loader` |
|
||||
| **Logs** | `C:\Users\[USERNAME]\AppData\Local\FreedomLoader\logs\` | `~/.local/share/FreedomLoader/logs/` |
|
||||
| **Cache** | ``
|
||||
|
||||
> [!NOTE]
|
||||
> The download folder can be changed anytime via the "Edit" button in the UI, on both platforms.
|
||||
@@ -224,10 +225,8 @@ Freedom Loader can be configured either through the settings panel in the UI or
|
||||
### Available Options
|
||||
```json
|
||||
{
|
||||
"autoUpdate": true,
|
||||
"systemTray": true,
|
||||
"discordRPC": true,
|
||||
"customTopBar": true,
|
||||
"autoCheckInfo": true,
|
||||
"addThumbnail": true,
|
||||
"addMetadata": true,
|
||||
@@ -241,6 +240,7 @@ Freedom Loader can be configured either through the settings panel in the UI or
|
||||
"downloadSystem": true,
|
||||
"notifySystem": true,
|
||||
"enableHardwareAcceleration": true,
|
||||
"showChanglogsAfterUpdate": true,
|
||||
"theme": "dark"
|
||||
}
|
||||
```
|
||||
@@ -249,10 +249,8 @@ Freedom Loader can be configured either through the settings panel in the UI or
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|------------------------------|---------|----------|------------------------------------------------------------|
|
||||
| `autoUpdate` | boolean | `true` | Enable automatic application updates |
|
||||
| `systemTray` | boolean | `false` | Allow app to minimize on close [EXPERIMENTAL] |
|
||||
| `systemTray` | boolean | `false` | Allow app to minimize on close |
|
||||
| `discordRPC` | boolean | `true` | Enable Discord Rich Presence integration |
|
||||
| `customTopBar` | boolean | `true` | Use custom application top bar |
|
||||
| `autoCheckInfo` | boolean | `true` | Automatically fetch video information on URL paste |
|
||||
| `addThumbnail` | boolean | `true` | Embed thumbnail in downloaded audio files |
|
||||
| `addMetadata` | boolean | `true` | Add metadata tags to downloaded files |
|
||||
@@ -266,6 +264,7 @@ Freedom Loader can be configured either through the settings panel in the UI or
|
||||
| `downloadSystem` | boolean | `true` | Enable download system |
|
||||
| `notifySystem` | boolean | `true` | Enable system notifications |
|
||||
| `enableHardwareAcceleration` | boolean | `true` | Enable Hardware Acceleration |
|
||||
| `showChanglogsAfterUpdate` | boolean | `true` | Auto-display changelog popup after and update |
|
||||
| `theme` | string | `dark` | Current Theme Name |
|
||||
|
||||
### Supported Codecs
|
||||
|
||||
5
app/ipcHandlers.js
Normal file → Executable file
5
app/ipcHandlers.js
Normal file → Executable file
@@ -30,10 +30,8 @@ const { getChangelog, markChangelogSeen } = require("./changelogManager");
|
||||
* Acts as a basic validation layer for IPC "set-feature".
|
||||
*/
|
||||
const FEATURE_WHITELIST = new Set([
|
||||
"autoUpdate",
|
||||
"systemTray",
|
||||
"discordRPC",
|
||||
"customTopBar",
|
||||
"autoCheckInfo",
|
||||
"addThumbnail",
|
||||
"addMetadata",
|
||||
@@ -44,7 +42,8 @@ const FEATURE_WHITELIST = new Set([
|
||||
"theme",
|
||||
"createPlaylistFolders",
|
||||
"notifySystem",
|
||||
"enableHardwareAcceleration"
|
||||
"enableHardwareAcceleration",
|
||||
"showChanglogsAfterUpdate"
|
||||
]);
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,7 +57,7 @@ async function createMainWindow() {
|
||||
height: 800,
|
||||
minWidth: 750,
|
||||
minHeight: 800,
|
||||
frame: !configFeatures.customTopBar,
|
||||
frame: false, // Force custom topbar for consistent UI across platforms, and less maintenance headaches with native titlebar actions
|
||||
devTools: !app.isPackaged,
|
||||
show: false,
|
||||
webPreferences: {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{
|
||||
"autoUpdate": true,
|
||||
"systemTray": false,
|
||||
"discordRPC": true,
|
||||
"customTopBar": true,
|
||||
"autoCheckInfo": true,
|
||||
"addThumbnail": true,
|
||||
"addMetadata": true,
|
||||
@@ -16,5 +14,6 @@
|
||||
"downloadSystem": true,
|
||||
"notifySystem": true,
|
||||
"enableHardwareAcceleration": true,
|
||||
"showChanglogsAfterUpdate": true,
|
||||
"theme": "dark"
|
||||
}
|
||||
2
main.js
2
main.js
@@ -173,7 +173,7 @@ app.whenReady().then(async () => {
|
||||
|
||||
if (configFeatures.discordRPC) startRPC();
|
||||
|
||||
if (configFeatures.autoUpdate) initAutoUpdater(getMainWindow());
|
||||
initAutoUpdater(getMainWindow());
|
||||
|
||||
} catch (err) {
|
||||
logger.error("Boot error:", err);
|
||||
|
||||
@@ -124,38 +124,38 @@
|
||||
<summary>Advanced Settings</summary>
|
||||
|
||||
<div class="setting-item">
|
||||
<input type="checkbox" data-key="autoUpdate" id="autoUpdate">
|
||||
<input type="checkbox" data-key="showChanglogsAfterUpdate" id="showChanglogsAfterUpdate">
|
||||
<div class="setting-info">
|
||||
<span class="setting-title">Auto Update</span>
|
||||
<small>Enable automatic app updates.</small>
|
||||
<span class="setting-title">Show Changelogs After Update</span>
|
||||
<small>Display changelogs after each update.</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setting-item">
|
||||
<input data-key="systemTray" id="systemTray" type="checkbox">
|
||||
<div class="setting-info">
|
||||
<span class="setting-title">System Tray</span>
|
||||
<small>Minimize app on close, in the System Tray. [EXPERIMENTAL]</small>
|
||||
</div>
|
||||
<div class="setting-item">
|
||||
<input data-key="systemTray" id="systemTray" type="checkbox">
|
||||
<div class="setting-info">
|
||||
<span class="setting-title">System Tray</span>
|
||||
<small>Minimize app on close, in the System Tray.</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 data-key="autoCheckInfo" id="autoCheckInfo" type="checkbox">
|
||||
<div class="setting-info">
|
||||
<span class="setting-title">Auto Fetch Info</span>
|
||||
<small>Automatically fetch information for new downloads.</small>
|
||||
</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">
|
||||
<div class="setting-item">
|
||||
<input data-key="autoCheckInfo" id="autoCheckInfo" type="checkbox">
|
||||
<div class="setting-info">
|
||||
<span class="setting-title">Auto Fetch Info</span>
|
||||
<small>Automatically fetch information for new downloads.</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>
|
||||
@@ -171,13 +171,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setting-item">
|
||||
<!-- <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> -->
|
||||
|
||||
<div class="setting-item" style="margin-left: 32px; margin-top: 20px;">
|
||||
<div class="setting-info">
|
||||
|
||||
7
public/script/changelog.js
Normal file → Executable file
7
public/script/changelog.js
Normal file → Executable file
@@ -226,10 +226,15 @@ async function closeChangelog() {
|
||||
|
||||
/** Loads changelog data and opens the modal when unread releases exist. */
|
||||
async function loadChangelog() {
|
||||
|
||||
const features = await window.electronAPI.getFeatures();
|
||||
|
||||
try {
|
||||
changelogData = await window.electronAPI.getChangelog();
|
||||
if (!changelogData.error && changelogData.hasUnread) {
|
||||
|
||||
if (!changelogData.error && changelogData.hasUnread && features.showChanglogsAfterUpdate === true) {
|
||||
openChangelog(changelogData.unreadReleases);
|
||||
window.electronAPI.logInfo("Showing Changelog");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Unable to load changelog:", error);
|
||||
|
||||
@@ -35,25 +35,26 @@ export function initTopBar() {
|
||||
|
||||
}
|
||||
|
||||
async function attachListeners(){
|
||||
try{
|
||||
const featuresList = await window.electronAPI.getFeatures();
|
||||
//* Disabled because i disabled native topbar for now, but keeping the code in case i want to re-enable it later
|
||||
// async function attachListeners(){
|
||||
// try{
|
||||
// const featuresList = await window.electronAPI.getFeatures();
|
||||
|
||||
if (!featuresList.customTopBar) {
|
||||
const topbar = document.getElementById("topbar");
|
||||
const container = document.getElementById("container");
|
||||
const themeSwitcher = document.getElementById("theme-switcher");
|
||||
// if (!featuresList.customTopBar) {
|
||||
// const topbar = document.getElementById("topbar");
|
||||
// const container = document.getElementById("container");
|
||||
// const themeSwitcher = document.getElementById("theme-switcher");
|
||||
|
||||
if (topbar) topbar.style.display = "none";
|
||||
if (container) container.style.marginTop = "0";
|
||||
if (themeSwitcher) themeSwitcher.style.top = "30px";
|
||||
}
|
||||
// if (topbar) topbar.style.display = "none";
|
||||
// if (container) container.style.marginTop = "0";
|
||||
// if (themeSwitcher) themeSwitcher.style.top = "30px";
|
||||
// }
|
||||
|
||||
} catch (error) {
|
||||
console.error("Failed to load layout features for topbar:", error);
|
||||
}
|
||||
// } catch (error) {
|
||||
// console.error("Failed to load layout features for topbar:", error);
|
||||
// }
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
initTopBar()
|
||||
document.addEventListener("DOMContentLoaded", attachListeners)
|
||||
//document.addEventListener("DOMContentLoaded", attachListeners)
|
||||
@@ -1,21 +1,24 @@
|
||||
### Features
|
||||
- **In-App Feedback**: Added a built-in feedback form allowing users to send feedback, bug reports, and daily logs directly to the development team.
|
||||
- **Community Contributions**: GitHub issues are now better maintained on the repository. If you want to contribute to the project, feel free to drop by and check out the `good first issue` tags!
|
||||
- **Changelog**: The changelog is now automatically displayed after an update (can be disabled if preferred).
|
||||
|
||||
### Improvements
|
||||
- **Bundle Size**: Optimized assets and dependencies, reducing the overall application bundle size by approximately 50% on specific version.
|
||||
- **Updater UI**: Reworked the update notification for better clarity. Windows and AppImage users can download updates seamlessly in-app, while unsupported Linux package users are gracefully redirected to the manual download page. Flatpak (.rpm) and Snap (.snap) users are not informed, because that updates are handled by their respective package managers.
|
||||
- **Bundle Size**: Optimized assets and dependencies, reducing the overall application bundle size by approximately 30% for specific versions.
|
||||
- **Updater UI**: Reworked the update notification for better clarity. Windows and AppImage users can download updates seamlessly in-app, while unsupported Linux package users are gracefully redirected to the manual download page. Flatpak and Snap users are not prompted, as updates are handled natively by their respective package managers.
|
||||
- **Toast Notifications**: Refactored the style and overall UX of toast alerts.
|
||||
- **Code Quality**: Implemented a linter to enforce coding standards.
|
||||
|
||||
### Bug Fixes
|
||||
- **Auto-Updater**: Fixed a major issue causing 404 Not Found errors when attempting to download updates for `.AppImage` releases.
|
||||
- **Linux Updates**: Fixed update crashes on `.rpm` and `.snap` packages. In-app update flows are now disabled for these formats to let the OS natively handle the process.
|
||||
### Fixes
|
||||
- **Auto-Updater**: Fixed a major issue causing `404 Not Found` errors when attempting to download updates for `.AppImage` releases.
|
||||
- **Linux Updates**: Fixed update crashes on `.rpm` and `.snap` packages. In-app update flows are now disabled for these formats to let the OS handle the process natively.
|
||||
- **Windows Logs**: Fixed a file naming issue with the log transport system on Windows.
|
||||
- **Desktop Entry Name**: Fixed the desktop entry name for Linux users, ensuring it displays correctly in application menus.
|
||||
- **Custom Top Bar**: Removed the `customTopBar` settings.
|
||||
- **Auto Update**: Removed the `autoAppUpdate` settings.
|
||||
- **UI (System Tray)**: Removed the ***[EXPERIMENTAL]*** label from the config panel.
|
||||
|
||||
### Chores
|
||||
- **Dependencies**: Removed `dotenv` from the project.
|
||||
- **URL**: A new URL for the website is now available ! [freedomloader.acnolo.fr](https://freedomloader.acnolo.fr)
|
||||
- **Dev**: Add new npm script. To check linux file quality
|
||||
|
||||
- **Website**: A brand new website URL is now available: [freedomloader.acnolo.fr](https://freedomloader.acnolo.fr)
|
||||
- **Dev**: Added a new npm script to check Linux file quality.
|
||||
@@ -67,9 +67,7 @@ function buildYtDlpArgs({url, audioOnly, quality, outputFolder, isPlaylist}) {
|
||||
|
||||
logger.info("--- CONFIGURATION ---");
|
||||
|
||||
logger.info(`CONFIG autoUpdate: ${configFeatures.autoUpdate}`);
|
||||
logger.info(`CONFIG discordRPC: ${configFeatures.discordRPC}`);
|
||||
logger.info(`CONFIG customTopBar: ${configFeatures.customTopBar}`);
|
||||
logger.info(`CONFIG autoCheckInfo: ${configFeatures.autoCheckInfo}`);
|
||||
logger.info(`CONFIG keepPlaylistOrder: ${configFeatures.keepPlaylistOrder}`);
|
||||
logger.info(`CONFIG addThumbnail: ${configFeatures.addThumbnail}`);
|
||||
|
||||
@@ -11,7 +11,6 @@ jest.mock("../../server/helpers/path.helpers.js", () => ({
|
||||
|
||||
jest.mock("../../config.js", () => ({
|
||||
configFeatures: {
|
||||
autoUpdate: false,
|
||||
discordRPC: false,
|
||||
customTopBar: false,
|
||||
autoCheckInfo: false,
|
||||
|
||||
Reference in New Issue
Block a user