Truncate files at the start to required length
This commit is contained in:
parent
3b8c4e053f
commit
6bd518676d
1 changed files with 26 additions and 1 deletions
|
|
@ -14,7 +14,7 @@ use librqbit_core::{
|
||||||
id20::Id20, lengths::Lengths, peer_id::generate_peer_id, speed_estimator::SpeedEstimator,
|
id20::Id20, lengths::Lengths, peer_id::generate_peer_id, speed_estimator::SpeedEstimator,
|
||||||
torrent_metainfo::TorrentMetaV1Info,
|
torrent_metainfo::TorrentMetaV1Info,
|
||||||
};
|
};
|
||||||
use log::{debug, info};
|
use log::{debug, info, warn};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use reqwest::Url;
|
use reqwest::Url;
|
||||||
use sha1w::Sha1;
|
use sha1w::Sha1;
|
||||||
|
|
@ -152,6 +152,10 @@ fn make_lengths<ByteBuf: AsRef<[u8]>>(
|
||||||
Lengths::new(total_length, torrent.piece_length, None)
|
Lengths::new(total_length, torrent.piece_length, None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ensure_file_length(file: &mut File, length: u64) -> anyhow::Result<()> {
|
||||||
|
Ok(file.set_len(length)?)
|
||||||
|
}
|
||||||
|
|
||||||
impl TorrentManager {
|
impl TorrentManager {
|
||||||
fn start<P: AsRef<Path>>(
|
fn start<P: AsRef<Path>>(
|
||||||
info: TorrentMetaV1Info<ByteString>,
|
info: TorrentMetaV1Info<ByteString>,
|
||||||
|
|
@ -209,6 +213,27 @@ impl TorrentManager {
|
||||||
SF::new(initial_check_results.needed_bytes)
|
SF::new(initial_check_results.needed_bytes)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
spawner.spawn_block_in_place(|| {
|
||||||
|
for (file, (name, length)) in
|
||||||
|
files.iter().zip(info.iter_filenames_and_lengths().unwrap())
|
||||||
|
{
|
||||||
|
let now = Instant::now();
|
||||||
|
if let Err(err) = ensure_file_length(&mut file.lock(), length) {
|
||||||
|
warn!(
|
||||||
|
"Error setting length for file {:?} to {}: {:#?}",
|
||||||
|
name, length, err
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
info!(
|
||||||
|
"Set length for file {:?} to {} in {:?}",
|
||||||
|
name,
|
||||||
|
SF::new(length),
|
||||||
|
now.elapsed()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let chunk_tracker = ChunkTracker::new(
|
let chunk_tracker = ChunkTracker::new(
|
||||||
initial_check_results.needed_pieces,
|
initial_check_results.needed_pieces,
|
||||||
initial_check_results.have_pieces,
|
initial_check_results.have_pieces,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue