Skip to content

feat(plugin): register vortex-mod-containers v1.0.0 (task 41)#154

Merged
mpiton merged 1 commit intomainfrom
feat/task-41-containers
May 6, 2026
Merged

feat(plugin): register vortex-mod-containers v1.0.0 (task 41)#154
mpiton merged 1 commit intomainfrom
feat/task-41-containers

Conversation

@mpiton
Copy link
Copy Markdown
Owner

@mpiton mpiton commented May 6, 2026

Summary

  • Register the new official vortex-mod-containers plugin v1.0.0 in registry/registry.toml (category container, no http capability).
  • Document the new feature in CHANGELOG.md under [Unreleased] → Added.
  • Closes sprint task 41 (PRD-v2 §P1.22 / PRD §4.4) and unblocks task 42 (Link Grabber container import UI).

Plugin overview

New WASM plugin lives in a sibling repo: https://github.com/mpiton/vortex-mod-containers (release v1.0.0). Decrypts JDownloader-era link containers (DLC v1, CCF v1, RSDF) and parses Metalink (RFC 5854 v4 + community v3) into Vortex's standard ContainerLink DTOs. Pure transformation — the plugin consumes bytes (the dropped file) and emits a structured link list that the host routes through the regular hoster pipeline.

Format Extensions Algorithm
DLC v1 .dlc AES-128-CBC, embedded JDownloader historic key
CCF v1 .ccf AES-128-CBC, CCF1\n magic prefix
RSDF .rsdf AES-128-CBC, hex line per encrypted URL
Metalink .metalink, .meta4 XML parser (RFC 5854 v4 + community v3)

Privacy decision

The plugin never calls service.jdownloader.org/dlcrypt.php for DLC v3 per-container keys. plugin.toml declares http = false, so the WASM module is fully sandboxed — modern DLC v3 captures fail cleanly with Unsupported container variant instead of leaking the container hash to a third party. Rationale recorded in docs/ADR-001-container-keys.md on the plugin repo.

Registry entry

[[plugin]]
name                 = "vortex-mod-containers"
description          = "Decrypt link containers (DLC v1, CCF, RSDF) and parse Metalink (RFC 5854); pure transformation, no network capability"
author               = "vortex-community"
version              = "1.0.0"
category             = "container"
repository           = "https://github.com/mpiton/vortex-mod-containers"
checksum_sha256      = "28ba16ce5325b48451164b7cd2062b4225f5a87a1f1c2ce7cd7e72115c12ede6"
checksum_sha256_toml = "6d7e0152bc28c56adae29ba0e078cb511cc6aad468d2395c58d02d3b1f758dd6"
official             = true
min_vortex_version   = "0.1.0"

Plugin contract (host-side wiring needed in task 42)

Export Input Output
can_decrypt bytes "true" / "false"
detect bytes JSON { "format": "dlc" | "ccf" | "rsdf" | "metalink" | null }
decrypt bytes JSON { "format", "links": [{url, filename?, sizeBytes?, mirrors[], checksums[]}] }

DTOs ship #[serde(rename_all = "camelCase")] so the IPC bridge can pass them through to the React side without manual rekeying.

Test coverage on the plugin side

  • 54 native unit tests across crypto / metalink / rsdf / dlc / ccf / dispatch / lib (round-trip, format detection, error paths, edge cases — Unicode filenames, ampersand-laden URLs, namespaced Metalink, dashed-form sha-256 hash type).
  • 8 integration tests in tests/synthetic_corpus.rs exercising a 20-container synthetic corpus (5 per format) round-tripped through the public decrypt() API.
  • cargo clippy --all-targets -- -D warnings clean.
  • cargo fmt --check clean.
  • WASM artefact: 206 KB (≤500 KB acceptance budget).

The synthetic-corpus choice (rather than redistributing JDownloader-era proprietary fixtures) is documented in the plugin's ADR — historical captures point to dead hosters and many reference copyrighted material.

Test plan

  • cargo build --workspace --all-targets
  • cargo test --workspace
  • cargo clippy --workspace -- -D warnings
  • cargo fmt --check
  • Manual: vortex-mod-containers entry shows up in the in-app plugin browser (when task 79 lands) and downloads the v1.0.0 WASM cleanly via the registry checksum verification path.
  • Manual (post task 42): drop a synthetic .dlc / .metalink into the Link Grabber, verify URLs are extracted and injected into the resolve pipeline.

Related

  • PRD-v2 §P1.22 — Containers decrypt acceptance criteria (4 formats supported).
  • PRD §4.4 — Module: Containers (vortex-mod-containers).
  • Sprint task 41 — vortex/.claude/output/sprints/prd-v2-roadmap/tasks/41-plugin-containers.md (status completed, all acceptance criteria checked with verification methods recorded in-line).
  • Plugin release: https://github.com/mpiton/vortex-mod-containers/releases/tag/v1.0.0
  • Unblocks task 42 (vortex/.claude/output/sprints/prd-v2-roadmap/tasks/42-import-containers-ui.md).

Summary by cubic

Registers the official vortex-mod-containers v1.0.0 plugin to decrypt legacy link containers and parse Metalink. Updates CHANGELOG.md; completes task 41 (PRD-v2 §P1.22 / PRD §4.4) and unblocks task 42 (container import UI).

  • New Features
    • Added vortex-mod-containers to registry/registry.toml (category container, official = true, min_vortex_version = "0.1.0", no http capability, checksums set).
    • Supports DLC v1, CCF v1, RSDF, and Metalink; pure transform from file bytes to link list routed by the host.
    • Exposes can_decrypt, detect, and decrypt exports.
    • Privacy: never calls JDownloader for DLC v3 keys; v3 variants fail with a clear unsupported message.

Written for commit 889bd70. Summary will update on new commits.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added new file hosting plugins: containers, 1fichier, MEGA, Gofile, PixelDrain, and MediaFire
    • Mirror failover and switching capabilities for downloads
    • Enhanced link grabber with duplicate detection and batch operations
    • Package and playlist auto-grouping
    • Account management and detailed history tracking
    • Direct file opening from downloads
    • Download directory management
  • Improvements

    • Keyboard shortcuts and accessibility enhancements
    • Multi-language support expansion

…y (task 41)

New container plugin in sibling repo vortex-mod-containers/ at commit
b6ec9bb. Decrypts JDownloader-era link containers (DLC v1, CCF v1, RSDF)
and parses Metalink (RFC 5854 v4 + community v3) into Vortex's standard
ContainerLink DTOs. Pure transformation — no http capability declared,
host routes the resulting URLs through the regular hoster pipeline after
the user drops a .dlc / .ccf / .rsdf / .metalink / .meta4 file in the
Link Grabber.

Plugin contract:
  - can_decrypt(bytes) -> "true" | "false"
  - detect(bytes) -> JSON DetectResponse
  - decrypt(bytes) -> JSON DecryptResponse { format, links: [...] }

WASM artefact: 206 KB (≤500 KB acceptance budget).
checksum_sha256      = 28ba16ce5325b48451164b7cd2062b4225f5a87a1f1c2ce7cd7e72115c12ede6
checksum_sha256_toml = 6d7e0152bc28c56adae29ba0e078cb511cc6aad468d2395c58d02d3b1f758dd6

Privacy decision: the plugin never calls service.jdownloader.org for
DLC v3 per-container keys (rationale in
vortex-mod-containers/docs/ADR-001-container-keys.md). Modern DLC v3
captures therefore surface as "Unsupported container variant" instead
of silently leaking the container hash.

Refs: PRD-v2 §P1.22, PRD §4.4. Unblocks task 42 (Link Grabber container
import UI).
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label May 6, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 6, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3ac7b984-7fe9-4c10-a24e-d23f3db3a6c1

📥 Commits

Reviewing files that changed from the base of the PR and between edca498 and 889bd70.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • registry/registry.toml

📝 Walkthrough

Walkthrough

This PR documents a major feature release by updating the changelog with descriptions of new plugins, mirror/download engine enhancements, package integration, accounts and history features, and various UX/accessibility improvements. It also registers the new vortex-mod-containers plugin in the registry.

Changes

Documentation and Registry Updates

Layer / File(s) Summary
Changelog Documentation
CHANGELOG.md
Comprehensive changelog entries documenting seven new plugins (containers, 1fichier, mega, gofile, pixeldrain, mediafire), mirror failover with Mirror aggregate, link-grabber canonical URL normalization, auto-grouping of split archives into packages, account rotation/selection, CI/testing enhancements, and UX/accessibility improvements.
Plugin Registry
registry/registry.toml
New plugin registry entry for vortex-mod-containers with full metadata: name, description, author, version, category, repository, checksum hashes, and minimum vortex version requirement.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • mpiton/vortex#147: Adds registry entry for vortex-mod-mediafire plugin to the same registry file.
  • mpiton/vortex#149: Adds registry entry for vortex-mod-gofile plugin, following the same registry registration pattern.
  • mpiton/vortex#150: Registers vortex-mod-mega plugin in registry.toml alongside this PR's containers registration.

Poem

🐰 A changelog so grand, with mirrors that stand,
Seven new plugins dance across the land!
Packages now group, downloads take flight,
Accounts rotate smooth, and plugins shine bright—
Vortex grows mighty, what a release delight! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: registering a new plugin version in the registry, which aligns with the main changeset focus on the registry.toml addition and CHANGELOG documentation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/task-41-containers

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

You’re at about 99% of the monthly review limit. You may want to disable incremental reviews to conserve quota. Reviews will continue until that limit is exceeded. If you need help avoiding interruptions, please contact contact@cubic.dev.

@codspeed-hq
Copy link
Copy Markdown
Contributor

codspeed-hq Bot commented May 6, 2026

Merging this PR will improve performance by 24.14%

⚡ 2 improved benchmarks
✅ 24 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
normalize_link_check_parallelism 150 ns 120.8 ns +24.14%
normalize_max_concurrent 150 ns 120.8 ns +24.14%

Comparing feat/task-41-containers (889bd70) with main (edca498)

Open in CodSpeed

@mpiton mpiton merged commit c00d74b into main May 6, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant