| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
chore(release): prepare 2.0.0-beta.50 (#2392) | 2 天前 | |
fix(downloads): validate sources and stabilize url entry (#2154) * fix(downloads): validate sources and stabilize URL entry Scope plugin abort deadlines to their invocation and validate sources before side effects across local, remote, plugin, media, and recovery paths. Preserve URL bytes, require explicit ambiguous corrections, support bare BT hashes and FTP, and retain idempotent retries. Add inline URL diagnostics while preserving the Download label, a 100px editor, and the 386px collapsed window. Cover malformed inputs, normalized size limits, redirect validation, and bounded key responses. Refs agalwood/Motrix#2151 * docs: add url editor review screenshot | 1 个月前 | |
fix(protocol): restore safe motrix deep links and retire mo (#2300) | 20 天前 | |
fix(protocol): restore safe motrix deep links and retire mo (#2300) | 20 天前 | |
feat(packaging): add native arch linux release packages (#2099) Build pacman assets for x64 and arm64, include them in release manifests, verify final archives, and exercise x64 installation in Arch containers. Document installation and update behavior in English and Chinese. | 1 个月前 | |
feat(packaging): add native arch linux release packages (#2099) Build pacman assets for x64 and arm64, include them in release manifests, verify final archives, and exercise x64 installation in Arch containers. Document installation and update behavior in English and Chinese. | 1 个月前 | |
chore(release): prepare 2.0.0-beta.30 (#2048) | 1 个月前 | |
docs(bridge): clarify retained pairing and app wake lifecycle (#2129) | 1 个月前 | |
docs(bridge): clarify retained pairing and app wake lifecycle (#2129) | 1 个月前 | |
fix(web): recover task updates and preserve magnet file selection (#2167) | 1 个月前 | |
fix(web): recover task updates and preserve magnet file selection (#2167) | 1 个月前 | |
ci(release): publish validated flatpak application bundles (#2172) * ci(release): publish validated flatpak application bundles * docs(flatpak): make bundle upgrades explicit | 1 个月前 | |
ci(release): publish validated flatpak application bundles (#2172) * ci(release): publish validated flatpak application bundles * docs(flatpak): make bundle upgrades explicit | 1 个月前 | |
fix(legacy-import): enable native windows checkpoint activation (#2397) * fix(legacy-import): support native windows checkpoint activation * test(legacy-import): prepare native windows migration fixtures * fix(legacy-import): reject windows reserved device aliases | 2 天前 | |
fix(legacy-import): enable native windows checkpoint activation (#2397) * fix(legacy-import): support native windows checkpoint activation * test(legacy-import): prepare native windows migration fixtures * fix(legacy-import): reject windows reserved device aliases | 2 天前 | |
feat(plugins): support signed official optional installs (#2312) | 18 天前 | |
feat(plugins): support signed official optional installs (#2312) | 18 天前 | |
docs(plugins): update scraper-hook release and host requirements (#2332) | 13 天前 | |
docs(plugins): update scraper-hook release and host requirements (#2332) | 13 天前 | |
fix: unblock task creation, resume retried downloads, explain long paths (#2194) * fix(plugin): keep a failing hook from blocking task creation A pre-resolve beforeCreate hook fails its chain closed, so any plugin in that band can veto every new task. motrix.scraper-hook 1.0.0 sat there with `*://*/*` host permissions and an HTTP budget (5 s HEAD + 10 s GET) larger than the 10 s series deadline, so a slow page aborted the chain and no download could be added (#2189). - Wire the existing CircuitBreaker into the production orchestrator. It was never passed in, so a persistently failing plugin was neither skipped nor disabled. The orchestrator now builds one when a caller supplies none. - Report a deadline overrun as `plugin.hook.timeout`. The caller's budget and the bridge's defensive timer fired in the same tick, so the budget always won and surfaced a bare `plugin hook aborted`. The bridge now reads the abort reason and arms its own timer with a grace margin. Reasons posted into the VM stay a closed set. - Retire motrix.scraper-hook from the bundled builtin set. Page scraping is an optional convenience and must not be able to hold up a download. It is dropped from the lockfile, notices and flatpak digests. Its seed overlay is retired by the registry's orphan gate. - Prune retired seeds in `fetch-builtins.mjs` skip mode too, so an offline or CI packaging run cannot keep shipping a retired builtin. - Host-lane e2e coverage that used scraper-hook as a vehicle now runs against motrix.url-resolver. * fix(task): explain over-long windows paths and plugin aborts An over-long Windows destination made aria2 fail its file open with ERROR_PATH_NOT_FOUND. That was flattened into the generic write error, "check folder permissions and disk space", which cannot fix it. The reported path was 262 characters, past the 259 usable under MAX_PATH (#2183). - Add DL_PATH_TOO_LONG. classifyTerminalError measures the path named in aria2's file-open message and reports its length against the limit. - Check planned destinations before a task is created, including every path a .torrent declares. The task fails before a byte moves instead of after the transfer. Magnets fall back to the terminal classifier. Only the whole-path limit is checked; the per-component NAME_MAX budget was already enforced. - Map plugin-chain aborts and path overruns in the add-task form to localized messages that name the plugin or the lengths, instead of showing the raw engine text (#2189). * fix(session): ask the engine for checkpoints before retrying With sqlite3 persistence (the default) aria2_motrix keeps checkpoints in aria2.db and never writes <file>.aria2. The recovery planner only looked for the control file on disk. Every interrupted HTTP download with a non-empty partial file therefore came back as checkpoint-missing, and both the retry and the startup resume refused it (#2187). Where a checkpoint lives is the engine's business, so Motrix now asks the engine instead of guessing a store: - EngineAdapter.getCheckpointStatus(outputPath) calls the fork's aria2.getCheckpointStatus RPC, which answers from the store the engine actually reads. - If the engine predates the method, the adapter returns null. createEngineCheckpointProbe then falls back to the control file, which is what official aria2 and older fork builds can resume from. - DirectRecoveryPlanner takes the probe. SessionManager restore and re-add build it from the adapter they already hold, so no persistence mode or database path is plumbed through the shells. * fix(engine): upgrade aria2 for path-addressed checkpoints Bump the bundled engine to 1.37.0-motrix.15 (motrixapp/aria2#19). That release: - keeps an errored download's checkpoint when removeDownloadResult drops its task row, and addresses the checkpoint by output path, so a retry under a new gid resumes; - adds aria2.getCheckpointStatus, which the recovery planner now queries; - declares aria2c long-path aware on Windows (#2183). Together with the planner change this completes #2187. Session identity recovery allowlists aria2 schema versions and returned null for v3, which silently skipped the pre-spawn repair of magnet payload identities. Accept v3. Because v3 no longer cascades task into task_progress, drop a retired metadata ancestor's checkpoint explicitly, as v1/v2 did through the cascade. Add a real-engine integration test covering the whole #2187 flow: download, network drop, error, removeDownloadResult, getCheckpointStatus reports present, the planner picks checkpoint, and a re-add under a new gid resumes from the saved offset with a matching sha256. It fails against 1.37.0-motrix.14. Lockfile regenerated with `fetch-engine.mjs --write-lock`. The flatpak source pin, notices and their tests follow the new tag. | 29 天前 | |
fix: unblock task creation, resume retried downloads, explain long paths (#2194) * fix(plugin): keep a failing hook from blocking task creation A pre-resolve beforeCreate hook fails its chain closed, so any plugin in that band can veto every new task. motrix.scraper-hook 1.0.0 sat there with `*://*/*` host permissions and an HTTP budget (5 s HEAD + 10 s GET) larger than the 10 s series deadline, so a slow page aborted the chain and no download could be added (#2189). - Wire the existing CircuitBreaker into the production orchestrator. It was never passed in, so a persistently failing plugin was neither skipped nor disabled. The orchestrator now builds one when a caller supplies none. - Report a deadline overrun as `plugin.hook.timeout`. The caller's budget and the bridge's defensive timer fired in the same tick, so the budget always won and surfaced a bare `plugin hook aborted`. The bridge now reads the abort reason and arms its own timer with a grace margin. Reasons posted into the VM stay a closed set. - Retire motrix.scraper-hook from the bundled builtin set. Page scraping is an optional convenience and must not be able to hold up a download. It is dropped from the lockfile, notices and flatpak digests. Its seed overlay is retired by the registry's orphan gate. - Prune retired seeds in `fetch-builtins.mjs` skip mode too, so an offline or CI packaging run cannot keep shipping a retired builtin. - Host-lane e2e coverage that used scraper-hook as a vehicle now runs against motrix.url-resolver. * fix(task): explain over-long windows paths and plugin aborts An over-long Windows destination made aria2 fail its file open with ERROR_PATH_NOT_FOUND. That was flattened into the generic write error, "check folder permissions and disk space", which cannot fix it. The reported path was 262 characters, past the 259 usable under MAX_PATH (#2183). - Add DL_PATH_TOO_LONG. classifyTerminalError measures the path named in aria2's file-open message and reports its length against the limit. - Check planned destinations before a task is created, including every path a .torrent declares. The task fails before a byte moves instead of after the transfer. Magnets fall back to the terminal classifier. Only the whole-path limit is checked; the per-component NAME_MAX budget was already enforced. - Map plugin-chain aborts and path overruns in the add-task form to localized messages that name the plugin or the lengths, instead of showing the raw engine text (#2189). * fix(session): ask the engine for checkpoints before retrying With sqlite3 persistence (the default) aria2_motrix keeps checkpoints in aria2.db and never writes <file>.aria2. The recovery planner only looked for the control file on disk. Every interrupted HTTP download with a non-empty partial file therefore came back as checkpoint-missing, and both the retry and the startup resume refused it (#2187). Where a checkpoint lives is the engine's business, so Motrix now asks the engine instead of guessing a store: - EngineAdapter.getCheckpointStatus(outputPath) calls the fork's aria2.getCheckpointStatus RPC, which answers from the store the engine actually reads. - If the engine predates the method, the adapter returns null. createEngineCheckpointProbe then falls back to the control file, which is what official aria2 and older fork builds can resume from. - DirectRecoveryPlanner takes the probe. SessionManager restore and re-add build it from the adapter they already hold, so no persistence mode or database path is plumbed through the shells. * fix(engine): upgrade aria2 for path-addressed checkpoints Bump the bundled engine to 1.37.0-motrix.15 (motrixapp/aria2#19). That release: - keeps an errored download's checkpoint when removeDownloadResult drops its task row, and addresses the checkpoint by output path, so a retry under a new gid resumes; - adds aria2.getCheckpointStatus, which the recovery planner now queries; - declares aria2c long-path aware on Windows (#2183). Together with the planner change this completes #2187. Session identity recovery allowlists aria2 schema versions and returned null for v3, which silently skipped the pre-spawn repair of magnet payload identities. Accept v3. Because v3 no longer cascades task into task_progress, drop a retired metadata ancestor's checkpoint explicitly, as v1/v2 did through the cascade. Add a real-engine integration test covering the whole #2187 flow: download, network drop, error, removeDownloadResult, getCheckpointStatus reports present, the planner picks checkpoint, and a re-add under a new gid resumes from the saved offset with a matching sha256. It fails against 1.37.0-motrix.14. Lockfile regenerated with `fetch-engine.mjs --write-lock`. The flatpak source pin, notices and their tests follow the new tag. | 29 天前 | |
feat(downloads): add task re-download (#2363) * feat(downloads): add task re-download and alt-click option editing (#2324) - Support re-downloading completed tasks in task inspector and context menu (#2324) - Prompt overwrite confirmation dialog if destination file still exists - Open task modal with prefilled options when Alt+clicking re-download or retry - Detect missing credential parameters and fallback to task modal with notification - Implement Queries.CheckTaskFileExists query and handlers for main and server IPC - Add full unit test coverage and i18n support across 26 locales * fix(downloads): keep re-downloads resilient to plugin failures Build the plugin worker before starting Electron and preserve worker activation errors. Isolate optional hook failures so filename templating cannot prevent download finalization, while required resolvers and post-processors still abort. Restore the saved download directory when engine options are unavailable and cover re-download and worker failure regressions. | 7 天前 | |
feat(downloads): add task re-download (#2363) * feat(downloads): add task re-download and alt-click option editing (#2324) - Support re-downloading completed tasks in task inspector and context menu (#2324) - Prompt overwrite confirmation dialog if destination file still exists - Open task modal with prefilled options when Alt+clicking re-download or retry - Detect missing credential parameters and fallback to task modal with notification - Implement Queries.CheckTaskFileExists query and handlers for main and server IPC - Add full unit test coverage and i18n support across 26 locales * fix(downloads): keep re-downloads resilient to plugin failures Build the plugin worker before starting Electron and preserve worker activation errors. Isolate optional hook failures so filename templating cannot prevent download finalization, while required resolvers and post-processors still abort. Restore the saved download directory when engine options are unavailable and cover re-download and worker failure regressions. | 7 天前 | |
feat(migration): add the v1 migration assistant (#2331) | 13 天前 | |
feat(migration): add the v1 migration assistant (#2331) | 13 天前 | |
feat(app): unify path display and protect configuration recovery (#2382) * feat(settings): expose config paths and back up corrupt files * feat(ui): unify middle truncation for displayed paths | 4 天前 | |
feat(app): unify path display and protect configuration recovery (#2382) * feat(settings): expose config paths and back up corrupt files * feat(ui): unify middle truncation for displayed paths | 4 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 天前 | ||
| 1 个月前 | ||
| 20 天前 | ||
| 20 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 2 天前 | ||
| 2 天前 | ||
| 18 天前 | ||
| 18 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 29 天前 | ||
| 29 天前 | ||
| 7 天前 | ||
| 7 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 4 天前 | ||
| 4 天前 |