diff --git a/CHANGELOG.md b/CHANGELOG.md index 8719471..f7b228e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,53 @@ All notable changes to Firelink will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.0] - 2026-08-27 + +This release adds built-in Torrent downloads and a dedicated Properties window, while making regular downloads, browser handoffs, and cross-platform packages more dependable. + +### New features + +- **Torrent downloads** + - Add `.torrent` files and magnet links from the Add window, file associations, `magnet:` links, and Firelink Companion. + - Resolve remote metadata before enqueueing and safely reuse validated Torrent metadata. + - Select files, prioritize pieces, preallocate or allocate as needed, verify existing data, remove unselected files safely, and add per-file web seeds. + - Manage trackers and exclusions, tracker timing, DHT/IPv6/PEX/LPD discovery, encryption, peer limits, network identity, and resource limits. + - View file progress, piece availability, connected and listed peers, seeders, upload totals and speed, and the info hash. + - Set upload limits, seed time or ratio, stop timeout, concurrent seed slots, and move Torrent data to a new location. + - Use a dedicated Torrents category with pause, resume, retry, redownload, and safe cleanup. +- **Download and Torrent Properties windows** + - Open a selected download in its own window with overview, transfer, and advanced controls. + - Use Torrent tabs for file selection, trackers, peers, options, and live diagnostics. + - Edit supported settings while a transfer is active, including speed, connections, Torrent upload and peer limits, seeding, verification, allocation, and encryption. + - Inspect allocation, exact progress, resume failures, destinations, and current diagnostics; copy long URLs or paths and export magnet links where available. + - Keep the window size during the app session while the window follows the current theme and locale. +- **Adaptive mirror selection** + - Optionally use recent transfer performance to choose among multiple mirrors. Mirror statistics stay private on this device. +- **Transfer and layout visibility** + - Show the file-allocation phase while a normal download prepares its destination. + - Remember the main-window size and position and the Folders collapse preference between launches. + +### Improvements + +- Improve normal-download recovery across restarts, stale transfers, redirects, mirrors, connection-pool slowdowns, retries, and resume operations without saved credentials. +- Improve media recovery and resume messaging, preserve exact progress at the end of a transfer, and restore adaptive YouTube formats. This responds to the interrupted-YouTube-download report in [#36](https://github.com/nimbold/Firelink/issues/36). +- Make browser and deep-link inputs arrive in order, keep magnet clipboard handoffs usable, and make Add-window destination and metadata validation clearer. +- Improve the download table, sidebar, Add window, Settings, RTL keyboard navigation, and accessibility behavior at narrow window sizes. +- Add clear guidance for the macOS first-launch security warning and safe approval steps, responding to [#34](https://github.com/nimbold/Firelink/issues/34). +- Refresh bundled engines and dependencies, resume interrupted engine downloads safely, and strengthen package, release, and cross-platform verification. + +### Fixes + +- Retry affected transfers through the system resolver when a VPN or network tunnel leaves aria2 unable to resolve a host, addressing [#35](https://github.com/nimbold/Firelink/issues/35). +- Prevent late or duplicate lifecycle events from reviving, removing, or misreporting a download after a newer action has already won. +- Keep replacement, removal, and pre-admission cleanup from leaving stale queue entries, partial files, or misleading progress behind. +- Keep completed, paused, failed, and retrying downloads authoritative while allocation and progress updates arrive asynchronously. +- Make scheduled actions, speed limits, logs, persisted settings, and browser credentials safer when several changes happen close together. + +### Compatibility + +- Use [Firelink Companion `2.2.0`](https://github.com/nimbold/Firelink-Extension/releases/tag/v2.2.0), or the [latest Companion release](https://github.com/nimbold/Firelink-Extension/releases/latest), with Firelink `1.4.0`. + ## [1.3.1] - 2026-07-30 This hotfix improves filename handling, localized display details, and release reliability across platforms. diff --git a/Extensions/Browser b/Extensions/Browser index 0afa2b0..3fe0a52 160000 --- a/Extensions/Browser +++ b/Extensions/Browser @@ -1 +1 @@ -Subproject commit 0afa2b0a270e9b721ecd6cc6246b4b2542b6dc24 +Subproject commit 3fe0a52a59090554b34ff8888d1642779fef6502 diff --git a/README.md b/README.md index 8a752e7..eaae259 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,9 @@ It uses a Rust and Tauri backend with a React and TypeScript interface. Required ## Status -Firelink `1.3.1` is the latest desktop release. +Firelink `1.4.0` is the latest desktop release. -It is paired with [the latest Firelink Companion release, `2.1.0`](https://github.com/nimbold/Firelink-Extension/releases/tag/v2.1.0). The Companion did not change for this hotfix. +Use [the latest Firelink Companion release, `2.2.0`](https://github.com/nimbold/Firelink-Extension/releases/tag/v2.2.0) with Firelink. The Companion is maintained in the [Firelink-Extension repository](https://github.com/nimbold/Firelink-Extension). The project is actively maintained. See the [changelog](CHANGELOG.md) for release history and current work. @@ -40,8 +40,12 @@ Translations are available for English, Simplified Chinese, Hebrew, Persian, Ukr - Segmented HTTP and HTTPS downloads with retries, speed limits, and connection controls. - Media and playlist downloads through yt-dlp, FFmpeg, and Deno. +- BitTorrent downloads from `.torrent` files, magnet links, and browser handoff, with file selection, web seeds, seeding, and live diagnostics. +- Standalone Download and Torrent Properties windows with live controls, transfer details, and safe Torrent relocation. +- Adaptive mirror selection for multi-source downloads. - An Add window for metadata, duplicate handling, save locations, and download options. - Persistent queues with pause, resume, retry, redownload, and scheduling. +- Visible allocation and resume status with clearer transfer diagnostics. - Live speed and connection controls for active downloads. - A customizable download table with sorting, column selection, reordering, and bulk actions. - File organization with categories, default folders, and per-download locations. @@ -95,7 +99,7 @@ Only use these steps for Firelink downloaded from the [official GitHub release p ## Browser integration -[Firelink Companion `2.1.0`](https://github.com/nimbold/Firelink-Extension/releases/tag/v2.1.0) connects browser downloads, links, and media pages to Firelink. Use the latest Companion release with the latest Firelink release; no extension update is needed for Firelink `1.3.1`. +[Firelink Companion `2.2.0`](https://github.com/nimbold/Firelink-Extension/releases/tag/v2.2.0) connects browser downloads, links, media pages, magnets, and Torrent metadata to Firelink. Use the [latest Companion release](https://github.com/nimbold/Firelink-Extension/releases/latest) with the [latest Firelink release](https://github.com/nimbold/Firelink/releases/latest). Captured links open Firelink's Add window for review before they are started or queued. diff --git a/package-lock.json b/package-lock.json index f66d16d..51dbead 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "firelink", - "version": "1.3.1", + "version": "1.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "firelink", - "version": "1.3.1", + "version": "1.4.0", "license": "MIT", "dependencies": { "@fontsource-variable/inter": "^5.3.0", diff --git a/package.json b/package.json index c80d591..546f095 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firelink", "private": true, - "version": "1.3.1", + "version": "1.4.0", "description": "A fast cross-platform desktop download manager powered by Rust, Tauri, React, aria2, and yt-dlp.", "license": "MIT", "homepage": "https://github.com/nimbold/Firelink", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ecd0753..0e3f4ca 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -1395,7 +1395,7 @@ checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "firelink" -version = "1.3.1" +version = "1.4.0" dependencies = [ "apple-native-keyring-store", "async-trait", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 6ece027..a6f29d4 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "firelink" -version = "1.3.1" +version = "1.4.0" description = "A fast cross-platform desktop download manager powered by Rust and Tauri" authors = ["NimBold"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 362148d..4246703 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Firelink", - "version": "1.3.1", + "version": "1.4.0", "identifier": "com.nimbold.firelink", "build": { "beforeDevCommand": "node scripts/stage-engines.js && npm run dev", diff --git a/src/components/SettingsView.tsx b/src/components/SettingsView.tsx index c74849e..9a3dae1 100644 --- a/src/components/SettingsView.tsx +++ b/src/components/SettingsView.tsx @@ -1636,7 +1636,7 @@ runEngineChecks(false); value={settings.torrentPeerIdPrefix} label={t($ => $.settings.network.torrentPeerIdPrefix)} description={t($ => $.settings.network.torrentPeerIdPrefixDescription)} - placeholder="-FL-1-3-1-" + placeholder="-FL-1-4-0-" maxLength={20} onCommit={settings.setTorrentPeerIdPrefix} onError={showTorrentNetworkInputError} @@ -1646,7 +1646,7 @@ runEngineChecks(false); value={settings.torrentPeerAgent} label={t($ => $.settings.network.torrentPeerAgent)} description={t($ => $.settings.network.torrentPeerAgentDescription)} - placeholder="Firelink/1.3.1" + placeholder="Firelink/1.4.0" maxLength={128} onCommit={settings.setTorrentPeerAgent} onError={showTorrentNetworkInputError}