Clippy
This commit is contained in:
parent
2061fe56bb
commit
487ff50bd7
5 changed files with 28 additions and 16 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
use futures::{stream::FuturesUnordered, StreamExt};
|
use futures::{stream::FuturesUnordered, StreamExt};
|
||||||
use log::warn;
|
use log::debug;
|
||||||
use tokio::sync::mpsc::UnboundedReceiver;
|
use tokio::sync::mpsc::UnboundedReceiver;
|
||||||
|
|
||||||
use crate::{buffers::ByteString, peer_info_reader, torrent_metainfo::TorrentMetaV1Info};
|
use crate::{buffers::ByteString, peer_info_reader, torrent_metainfo::TorrentMetaV1Info};
|
||||||
|
|
@ -50,7 +50,7 @@ pub async fn read_metainfo_from_peer_receiver(
|
||||||
match done {
|
match done {
|
||||||
Some(Ok(info)) => return ReadMetainfoResult::Found { info, seen, rx: addrs },
|
Some(Ok(info)) => return ReadMetainfoResult::Found { info, seen, rx: addrs },
|
||||||
Some(Err(e)) => {
|
Some(Err(e)) => {
|
||||||
warn!("error in peer_info_reader::read_metainfo_from_peer: {}", e);
|
debug!("error in peer_info_reader::read_metainfo_from_peer: {}", e);
|
||||||
},
|
},
|
||||||
None => unreachable!()
|
None => unreachable!()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,10 @@ impl Magnet {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
match info_hash {
|
match info_hash {
|
||||||
Some(info_hash) => {
|
Some(info_hash) => Ok(Magnet {
|
||||||
return Ok(Magnet {
|
info_hash,
|
||||||
info_hash,
|
trackers,
|
||||||
trackers,
|
}),
|
||||||
})
|
|
||||||
}
|
|
||||||
None => {
|
None => {
|
||||||
anyhow::bail!("did not find infohash")
|
anyhow::bail!("did not find infohash")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ pub struct TorrentManagerBuilder {
|
||||||
overwrite: bool,
|
overwrite: bool,
|
||||||
output_folder: PathBuf,
|
output_folder: PathBuf,
|
||||||
only_files: Option<Vec<usize>>,
|
only_files: Option<Vec<usize>>,
|
||||||
|
peer_id: Option<[u8; 20]>,
|
||||||
force_tracker_interval: Option<Duration>,
|
force_tracker_interval: Option<Duration>,
|
||||||
spawner: Option<BlockingSpawner>,
|
spawner: Option<BlockingSpawner>,
|
||||||
}
|
}
|
||||||
|
|
@ -53,6 +54,7 @@ impl TorrentManagerBuilder {
|
||||||
overwrite: false,
|
overwrite: false,
|
||||||
output_folder: output_folder.as_ref().into(),
|
output_folder: output_folder.as_ref().into(),
|
||||||
only_files: None,
|
only_files: None,
|
||||||
|
peer_id: None,
|
||||||
force_tracker_interval: None,
|
force_tracker_interval: None,
|
||||||
spawner: None,
|
spawner: None,
|
||||||
}
|
}
|
||||||
|
|
@ -78,6 +80,11 @@ impl TorrentManagerBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn peer_id(&mut self, peer_id: [u8; 20]) -> &mut Self {
|
||||||
|
self.peer_id = Some(peer_id);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn start_manager(self) -> anyhow::Result<TorrentManagerHandle> {
|
pub fn start_manager(self) -> anyhow::Result<TorrentManagerHandle> {
|
||||||
TorrentManager::start(
|
TorrentManager::start(
|
||||||
self.info,
|
self.info,
|
||||||
|
|
@ -86,6 +93,7 @@ impl TorrentManagerBuilder {
|
||||||
self.overwrite,
|
self.overwrite,
|
||||||
self.only_files,
|
self.only_files,
|
||||||
self.force_tracker_interval,
|
self.force_tracker_interval,
|
||||||
|
self.peer_id,
|
||||||
self.spawner.unwrap_or_else(|| BlockingSpawner::new(true)),
|
self.spawner.unwrap_or_else(|| BlockingSpawner::new(true)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -123,6 +131,7 @@ impl TorrentManagerHandle {
|
||||||
|
|
||||||
struct TorrentManager {
|
struct TorrentManager {
|
||||||
state: Arc<TorrentState>,
|
state: Arc<TorrentState>,
|
||||||
|
#[allow(dead_code)]
|
||||||
speed_estimator: Arc<SpeedEstimator>,
|
speed_estimator: Arc<SpeedEstimator>,
|
||||||
trackers: Mutex<HashSet<Url>>,
|
trackers: Mutex<HashSet<Url>>,
|
||||||
force_tracker_interval: Option<Duration>,
|
force_tracker_interval: Option<Duration>,
|
||||||
|
|
@ -136,13 +145,15 @@ fn make_lengths<ByteBuf: Clone + Deref<Target = [u8]>>(
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TorrentManager {
|
impl TorrentManager {
|
||||||
pub fn start<P: AsRef<Path>>(
|
#[allow(clippy::too_many_arguments)]
|
||||||
|
fn start<P: AsRef<Path>>(
|
||||||
info: TorrentMetaV1Info<ByteString>,
|
info: TorrentMetaV1Info<ByteString>,
|
||||||
info_hash: [u8; 20],
|
info_hash: [u8; 20],
|
||||||
out: P,
|
out: P,
|
||||||
overwrite: bool,
|
overwrite: bool,
|
||||||
only_files: Option<Vec<usize>>,
|
only_files: Option<Vec<usize>>,
|
||||||
force_tracker_interval: Option<Duration>,
|
force_tracker_interval: Option<Duration>,
|
||||||
|
peer_id: Option<[u8; 20]>,
|
||||||
spawner: BlockingSpawner,
|
spawner: BlockingSpawner,
|
||||||
) -> anyhow::Result<TorrentManagerHandle> {
|
) -> anyhow::Result<TorrentManagerHandle> {
|
||||||
let files = {
|
let files = {
|
||||||
|
|
@ -180,7 +191,7 @@ impl TorrentManager {
|
||||||
files
|
files
|
||||||
};
|
};
|
||||||
|
|
||||||
let peer_id = generate_peer_id();
|
let peer_id = peer_id.unwrap_or_else(generate_peer_id);
|
||||||
let lengths = make_lengths(&info).context("unable to compute Lengths from torrent")?;
|
let lengths = make_lengths(&info).context("unable to compute Lengths from torrent")?;
|
||||||
debug!("computed lengths: {:?}", &lengths);
|
debug!("computed lengths: {:?}", &lengths);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ use crate::{
|
||||||
peer_connection::{PeerConnection, PeerConnectionHandler, WriterRequest},
|
peer_connection::{PeerConnection, PeerConnectionHandler, WriterRequest},
|
||||||
peer_state::{InflightRequest, LivePeerState, PeerState},
|
peer_state::{InflightRequest, LivePeerState, PeerState},
|
||||||
spawn_utils::{spawn, BlockingSpawner},
|
spawn_utils::{spawn, BlockingSpawner},
|
||||||
torrent_metainfo::{TorrentMetaV1Info, TorrentMetaV1Owned},
|
torrent_metainfo::TorrentMetaV1Info,
|
||||||
type_aliases::{PeerHandle, Sha1, BF},
|
type_aliases::{PeerHandle, Sha1, BF},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
13
src/main.rs
13
src/main.rs
|
|
@ -57,7 +57,7 @@ enum LogLevel {
|
||||||
#[derive(Clap)]
|
#[derive(Clap)]
|
||||||
#[clap(version = "1.0", author = "Igor Katson <igor.katson@gmail.com>")]
|
#[clap(version = "1.0", author = "Igor Katson <igor.katson@gmail.com>")]
|
||||||
struct Opts {
|
struct Opts {
|
||||||
/// The filename or URL of the .torrent file.
|
/// The filename or URL of the torrent. If URL, http/https/magnet are supported.
|
||||||
torrent_path: String,
|
torrent_path: String,
|
||||||
|
|
||||||
/// The filename of the .torrent file.
|
/// The filename of the .torrent file.
|
||||||
|
|
@ -182,7 +182,7 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()>
|
||||||
librqbit::dht::inforead::ReadMetainfoResult::Found { info, rx, seen } => {
|
librqbit::dht::inforead::ReadMetainfoResult::Found { info, rx, seen } => {
|
||||||
(info, rx, seen)
|
(info, rx, seen)
|
||||||
}
|
}
|
||||||
librqbit::dht::inforead::ReadMetainfoResult::ChannelClosed { seen } => {
|
librqbit::dht::inforead::ReadMetainfoResult::ChannelClosed { .. } => {
|
||||||
anyhow::bail!("DHT died, no way to discover torrent metainfo")
|
anyhow::bail!("DHT died, no way to discover torrent metainfo")
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -198,7 +198,7 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()>
|
||||||
.filter_map(|url| match reqwest::Url::parse(&url) {
|
.filter_map(|url| match reqwest::Url::parse(&url) {
|
||||||
Ok(url) => Some(url),
|
Ok(url) => Some(url),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
warn!("error parsing tracker {} as url", url);
|
warn!("error parsing tracker {} as url: {}", url, e);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -269,7 +269,10 @@ async fn main_info(
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
let mut builder = TorrentManagerBuilder::new(info, info_hash, opts.output_folder);
|
let mut builder = TorrentManagerBuilder::new(info, info_hash, opts.output_folder);
|
||||||
builder.overwrite(opts.overwrite).spawner(spawner);
|
builder
|
||||||
|
.overwrite(opts.overwrite)
|
||||||
|
.spawner(spawner)
|
||||||
|
.peer_id(peer_id);
|
||||||
if let Some(only_files) = only_files {
|
if let Some(only_files) = only_files {
|
||||||
builder.only_files(only_files);
|
builder.only_files(only_files);
|
||||||
}
|
}
|
||||||
|
|
@ -283,7 +286,7 @@ async fn main_info(
|
||||||
for peer in initial_peers {
|
for peer in initial_peers {
|
||||||
handle.add_peer(peer);
|
handle.add_peer(peer);
|
||||||
}
|
}
|
||||||
spawn("peer adder", {
|
spawn("DHT peer adder", {
|
||||||
let handle = handle.clone();
|
let handle = handle.clone();
|
||||||
async move {
|
async move {
|
||||||
while let Some(peer) = dht_peer_rx.recv().await {
|
while let Some(peer) = dht_peer_rx.recv().await {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue