tonhowtf/omniget · error
Torrent was added in list-only mode
Error message
Torrent was added in list-only mode
What it means
magnet.rs throws this when librqbit's add_torrent returns AddTorrentResponse::ListOnly instead of Added/AlreadyManaged. ListOnly means the torrent was registered only to fetch its metadata (list mode, e.g. only_metadata=true or a magnet in metadata-only mode) and no download was actually started, so download() cannot proceed.
Solutions
- Ensure AddTorrentOptions passed to add_torrent do not set only_metadata/list-only flags on the download path.
- If the session was previously used for list-only lookups, create/reconfigure it with download-capable options before add_torrent.
- Handle AddTorrentResponse::ListOnly explicitly by re-adding the torrent with full options instead of bailing.
- Check librqbit upgrade notes — list-only semantics depend on the options struct and version.
Example fix
// before let mut add_opts = librqbit::AddTorrentOptions::default(); add_opts.only_metadata = true; // leftover from metadata lookup session.add_torrent(add_torrent, Some(add_opts)).await // after let add_opts = librqbit::AddTorrentOptions::default(); // download mode session.add_torrent(add_torrent, Some(add_opts)).await
Defensive patterns
Strategy: validation
Validate before calling
// ensure download-mode options before add_torrent let opts = librqbit::AddTorrentOptions::default(); assert!(!opts.only_metadata, "list-only options must not be used on the download path");
Prevention
- Never share AddTorrentOptions configured with only_metadata between metadata-lookup and download paths
- Match explicitly on AddTorrentResponse::ListOnly and re-add with full options
- After librqbit upgrades, review AddTorrentOptions defaults
When it happens
Trigger: session.add_torrent(add_torrent, Some(torrent_opts)).await returns Ok(ListOnly(_)); the match at magnet.rs:213 bails on the ListOnly variant. Happens when AddTorrentOptions enable listing/metadata-only (e.g. only_metadata: true) or when the torrent options request list-only behavior.
Common situations: Resolver code path reuses the session in list-only mode for fetching metadata and then mistakenly calls the full download path; librqbit version/option change flips only_metadata; shared session configured for metadata listing is reused for downloading.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Failed to add torrent
- No URL found in MediaInfo
- Download cancelled during session creation
- Download cancelled
- Torrent download failed
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/d101ada2346ad33f.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/platforms/magnet.rs:213
Some(list)
} else {
None
};
let torrent_opts = AddTorrentOptions {
overwrite: true,
only_files,
trackers,
..Default::default()
};
tracing::info!("[magnet] adding torrent, output: {}", output_dir.display());
let (torrent_id, managed_torrent) =
match session.add_torrent(add_torrent, Some(torrent_opts)).await {
Ok(resp) => match resp {
librqbit::AddTorrentResponse::Added(id, handle) => (id, handle),
librqbit::AddTorrentResponse::AlreadyManaged(id, handle) => (id, handle),
librqbit::AddTorrentResponse::ListOnly(_) => {
anyhow::bail!("Torrent was added in list-only mode");
}
},
Err(e) => anyhow::bail!("Failed to add torrent: {}", e),
};
tracing::info!(
"[magnet] torrent added (id={}), waiting for download...",
torrent_id
);
if let Some(slot) = &opts.torrent_id_slot {
*slot.lock().await = Some(torrent_id);
}
let completion = managed_torrent.wait_until_completed();
tokio::pin!(completion);
let cancel_rx = opts.cancel_token.clone();View on GitHub (pinned to 8600b91f42)