feat(seed): add advanced transfer seed UI (generate/preview/manage) - #670
Open
PIKACHUIM wants to merge 21 commits into
Open
feat(seed): add advanced transfer seed UI (generate/preview/manage)#670PIKACHUIM wants to merge 21 commits into
PIKACHUIM wants to merge 21 commits into
Conversation
Add multi-select context menu action to generate transfer seeds (OSS/torrent/CAS) with a content-matrix wizard: per-algorithm whole/piece hash selection, per-file and overall comments, piece size, trackers, optional share/direct source embedding, and driver-capability preflight showing which files require downloading. Add upload dialog sidecar options (default off) reusing the same matrix. Extend the torrent/seed preview to parse .oss/.torrent/.cas, show hashes, comments, trackers, channels, and drive rapid-upload, offline-download, and format conversion actions gated by backend-reported capabilities. Add optional 'follow transfer seed sidecars' toggle to copy/move/rename/delete dialogs. Add per-storage seed_policy type and global single-file direct-preview setting wired to the backend.
Enable the edit, recalculate and transit-save actions driven by backend capabilities. Add a transit path selector for relayed transfer, per-file source path inputs for hash recalculation, and input validation. Extend seed operation request types and add English labels.
…ss UI Add an update-channel toggle to seed save operations and apply returned seed_data/share_status after edit. Add CAS direct-access auto-restore on preview and consume the configured default hash matrix in the generate wizard. Add English labels for the new controls.
Replace JSON string editing with user-friendly UI: - Add Seed.tsx: visual hash matrix (MD5/SHA1/SHA256 x whole/pieces), format policies (OSS/Torrent/CAS switches), site URL input, and other options - Add settings_seed.json translations (en/zh-CN) - Register seed menu item in sidemenu_items.tsx with TbSeeding icon - Visual controls replace seed_default_matrix and seed_format_policies JSON editing
PIKACHUIM
force-pushed
the
feat/advanced-transfer-seeds
branch
from
September 8, 2026 13:43
a9cb887 to
acbcbed
Compare
Card based sections, checkbox hash matrix, switch rows and a single save action. Persisted setting metadata is reused on save so type/group/flag are never overwritten. Drops placeholder i18n keys and adds select option labels for seed settings.
Preview seeds by default, per-file action rows (hash copy, piece modal, preview, remove, recalc, comment copy), merged convert panel, correct destination dir, multi-line comment, and per-file save-method badges via destination capability probe.
Add a hash matrix picker to the bulk recalculate area, defaulting to the hashes already present in the seed. Both bulk and per-file recalculate now pass hash_matrix to the update endpoint.
Merge convert/feasibility into one row, shorten destination with inline save buttons, show driver rapid capability, reuse offline-download tool dialog (BT via magnet), use a source directory instead of manual per-file paths for recalc, and display format full names (OSS/CAS/BT).
Show a queued notice when the backend turns a large seed generation into a background task.
…ns inline Place Save and Recalculate buttons after the source directory picker instead of a separate row above the matrix, and widen the picker so it flexes to fill available space.
Use the seed file name as the heading, keep the format badge as the format name only, merge size/file-count/created-at into one meta line, and format the timestamp.
Change the destination path picker and convert format select from fixed widths to flex-1 so they expand to fill the remaining space on the row.
…annel Restore Badge styling for destination driver, supported methods, and rapid availability, and move the update-channel checkbox onto the same row.
Drop the 'Source files are located at' hint and per-file path mapping under the bulk recalculate area.
Add a seed name input so users can override the auto-derived name (single file, common base, or folder).
Only show the legacy CAS warning when the seed carries no per-piece MD5 list.
PIKACHUIM
force-pushed
the
feat/advanced-transfer-seeds
branch
from
September 9, 2026 16:41
e2c0bad to
c1fca2a
Compare
…d hash requirements - Display target driver name and supported upload methods * Show rapid upload, PUT URL, and offline download capabilities * Display required hash algorithms (MD5, SHA1, SHA256, GCID) * Show available hashes in the torrent file - Add intelligent hash matching validation: * Check if torrent contains required hashes for target driver * Display clear unavailability reasons with tooltips * Color-coded badges for quick status recognition - Improve user experience with visual feedback: * Green badge: rapid upload available with matching hashes * Yellow badge: rapid upload unavailable * Blue badge: informational display * Purple badge: required hash algorithms - Add comprehensive i18n support: * Complete Chinese translations for all new features * English translations for international users * Clear error messages and hints This enhancement helps users understand why rapid upload may fail and what hashes are needed, significantly improving the torrent transfer workflow.
…ization to search for entry.ts modules\n- Support both index.ts and entry.ts naming conventions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
title: Advanced Transfer Seeds — Implementation PR
categories: [guide, advanced]
top: 22
Advanced Transfer Seeds — Implementation PR
This document is the implementation pull-request description for the Advanced Transfer Seeds feature. It complements the design and compatibility specification in transfer-seeds.md and records what was actually implemented, how it was validated, and what remains out of scope.
1. Summary
Advanced Transfer Seeds add a portable, cross-driver, cross-user metadata system built on three sidecar formats:
.oss—openlist-sharing-seedv1 JSON. The most complete and lossless envelope; every field is optional exceptformat,version,name,created_at,created_by,piece_size, andfiles..torrent— standard BitTorrent v1 plus a root-levelx-openlistextension and a legacy-compatiblex-casextension. Always carries the SHA-1 piece hashes required by BT; additional MD5/SHA-256 and comments/sources live in the extension..cas— byte-for-byte compatible with the reference OpenList-CAS payload: padded Base64 of JSON containing exactlyname,size,md5,sliceMd5, andcreate_time. No extension keys are added, preserving third-party client compatibility.Users can generate seeds during upload or from the right-click context menu, preview and consume them, convert between formats, rapid-save into another driver, relay a save through an intermediate driver, and edit/recalculate metadata.
2. What is included
OpenList-Backendsfeat/advanced-transfer-seeds/fs/seed/*API, upload sidecars, file-op sidecars, settingsOpenList-Frontendfeat/advanced-transfer-seedsOpenList-TSWorkerfeat/advanced-transfer-seeds/fs/seed/*routes, streaming hashing, settingsOpenList-Docsdocs/advanced-transfer-seedsImplemented capabilities:
oss,torrent,cas), a content hash matrix (md5/sha1/sha256× whole/pieces), per-file and overall comments, trackers, channels, piece size, and optional share/direct-source embedding..oss,.torrent, and.caswith files, hashes, comments, timestamps, trackers, channels, sources, conversion feasibility, and operation capabilities.unavailablereason (never a silent generic upload).options.mode: "transfer"withtransit_pathmaterializes synchronously into an intermediate storage (native rapid upload or PutURL), then copies server-side to the final destination. Asynchronous offline downloads are rejected for relay..oss/.torrent/.cassidecars alongside the source file.3. Format specification
.oss(openlist-sharing-seedv1){ "format": "openlist-sharing-seed", "version": 1, "name": "example", "comment": "", "created_at": "2026-09-08T00:00:00Z", "created_by": "OpenList", "piece_size": 10485760, "trackers": [], "channels": [{"driver": "189pc", "mount_path": "/189pc"}], "files": [ { "path": "a.txt", "size": 12, "modified": "2026-09-08T00:00:00Z", "comment": "", "hashes": { "md5": "...", "sha1": "...", "sha256": "...", "pieces": {"md5": ["..."], "sha1": ["..."], "sha256": ["..."]} }, "sources": [{"type": "openlist-direct", "url": "https://site/d/path"}] } ] }channelscontain only publicdriverand optionalmount_path; credentials are never serialized.sourcesare public direct (/d/) or share (/sd/) URLs validated against the configured site URL..torrentStandard BT v1
info/piecesplus a rootx-openlistdictionary holding the same optional metadata and a rootx-casdictionary for 189pc rapid-upload info.x-openlistis cross-validated againstinfo(name, piece length, file list, and SHA-1 pieces) before use..casStrict reference payload. No extension keys. Large files require either a preserved legacy aggregate
sliceMd5or complete 10 MiB MD5 pieces so conversion is lossless.4. API reference
All endpoints are under
POST /api/fs/seed/*(mounted as/fs/seed/*), with legacy/fs/torrent/*routes retained./capabilities/generate/parse/convert/rapid_upload/offline_download/updateCommon operation envelope:
{ "seed_data": "<base64>", "file_name": "...", "path": "...", "selected_files": [0], "options": {...} }.parsereturnscapabilities:rapid_upload,offline_download,transfer,convert,edit, andrecalculate, so the UI only enables actions the backend actually supports.5. Settings
seed_site_url— public site URL used to build share/direct sources (required before embedding sources).seed_default_matrix— default right-click hash matrix.seed_format_policies— global per-format auto-generation switches (all default off).seed_auto_generate_policy— globaloff/onautomatic sidecar policy.seed_single_direct_preview— open single-file seeds directly in preview (default off).seed_policy—inherit/on/offoverride that resolves against the global default.6. Acceptance criteria
torrentforces SHA-1 whole + pieces; selectingcasforces MD5 whole + pieces and a fixed 10 MiB slice size..casoutput is byte-identical to the reference five-field payload and round-trips without extra keys.torrent(missing SHA-1 pieces) and reports that reason.rapid_uploadnever silently falls back to a generic upload; it reportsunavailable.updatevalidates source URLs against the configured site and rejects cross-host URLs.recalculatewrites the effective piece size back to the seed so piece hashes andpiece_sizestay consistent.follow_seedonly touch sidecars of real files, not directories.7. Validation
go build ./...passes;go test ./pkg/torrent/... ./server/handles/... ./internal/op/...passes (format compatibility, path safety, parse limits).tsc --noEmitreports zero errors ininternal/seedandserver/seed.pnpm lintreports zero errors in the seed preview, types, and API files; production build transforms 1209 modules successfully.8. Security, stability, performance, compliance
9. Risks and limitations
.casintentionally preserves only the five reference fields; it is lossy by design and cannot carry comments, channels, trackers, or sources..torrentbut does not make OpenList a BitTorrent peer; tracker/webseed availability depends on deployment.