Session: add all at once
This commit is contained in:
parent
c6b4e78747
commit
7292522139
3 changed files with 34 additions and 25 deletions
1
TODO.md
1
TODO.md
|
|
@ -31,3 +31,4 @@ refactor:
|
||||||
- [x] start from error state should be possible from UI
|
- [x] start from error state should be possible from UI
|
||||||
- [ ] if the torrent was completed, not need to re-check it
|
- [ ] if the torrent was completed, not need to re-check it
|
||||||
- [ ] checking is very slow on raspberry
|
- [ ] checking is very slow on raspberry
|
||||||
|
- [ ] .rqbit-session.json file has 0 bytes when disk full. I guess fs::rename does this when disk is full? at least on linux
|
||||||
|
|
@ -242,11 +242,11 @@ impl Session {
|
||||||
Some(dht)
|
Some(dht)
|
||||||
};
|
};
|
||||||
let peer_opts = opts.peer_opts.unwrap_or_default();
|
let peer_opts = opts.peer_opts.unwrap_or_default();
|
||||||
let session_filename = opts
|
let persistence_filename = opts
|
||||||
.persistence_filename
|
.persistence_filename
|
||||||
.unwrap_or_else(|| output_folder.join(".rqbit-session.json"));
|
.unwrap_or_else(|| output_folder.join(".rqbit-session.json"));
|
||||||
let session = Arc::new(Self {
|
let session = Arc::new(Self {
|
||||||
persistence_filename: session_filename,
|
persistence_filename,
|
||||||
peer_id,
|
peer_id,
|
||||||
dht,
|
dht,
|
||||||
peer_opts,
|
peer_opts,
|
||||||
|
|
@ -298,34 +298,42 @@ impl Session {
|
||||||
);
|
);
|
||||||
let db: SerializedSessionDatabase =
|
let db: SerializedSessionDatabase =
|
||||||
serde_json::from_reader(&mut rdr).context("error deserializing session database")?;
|
serde_json::from_reader(&mut rdr).context("error deserializing session database")?;
|
||||||
|
let mut futures = Vec::new();
|
||||||
for storrent in db.torrents.into_iter() {
|
for storrent in db.torrents.into_iter() {
|
||||||
let magnet = Magnet {
|
let magnet = Magnet {
|
||||||
info_hash: Id20::from_str(&storrent.info_hash)
|
info_hash: Id20::from_str(&storrent.info_hash)
|
||||||
.context("error deserializing info_hash")?,
|
.context("error deserializing info_hash")?,
|
||||||
trackers: storrent.trackers.into_iter().collect(),
|
trackers: storrent.trackers.into_iter().collect(),
|
||||||
};
|
};
|
||||||
if let Err(e) = self
|
futures.push({
|
||||||
.add_torrent(
|
let session = self.clone();
|
||||||
AddTorrent::Url(Cow::Owned(magnet.to_string())),
|
async move {
|
||||||
Some(AddTorrentOptions {
|
session
|
||||||
paused: storrent.is_paused,
|
.add_torrent(
|
||||||
output_folder: Some(
|
AddTorrent::Url(Cow::Owned(magnet.to_string())),
|
||||||
storrent
|
Some(AddTorrentOptions {
|
||||||
.output_folder
|
paused: storrent.is_paused,
|
||||||
.to_str()
|
output_folder: Some(
|
||||||
.context("broken path")?
|
storrent
|
||||||
.to_owned(),
|
.output_folder
|
||||||
),
|
.to_str()
|
||||||
only_files: storrent.only_files,
|
.context("broken path")?
|
||||||
overwrite: true,
|
.to_owned(),
|
||||||
..Default::default()
|
),
|
||||||
}),
|
only_files: storrent.only_files,
|
||||||
)
|
overwrite: true,
|
||||||
.await
|
..Default::default()
|
||||||
{
|
}),
|
||||||
error!("error adding torrent from stored session: {:?}", e)
|
)
|
||||||
}
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
error!("error adding torrent from stored session: {:?}", e);
|
||||||
|
e
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
futures::future::join_all(futures).await;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue