Create folders for session persistence

This commit is contained in:
Igor Katson 2023-11-27 09:20:35 +00:00
parent f33346adfb
commit 1110eb8620
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
2 changed files with 17 additions and 7 deletions

View file

@ -30,5 +30,6 @@ refactor:
- [x] start from error state should be possible from UI
- [ ] if the torrent was completed, not need to re-check it
- [ ] checking is very slow on raspberry
- [x] checking is very slow on raspberry
checked. nothing much can be done here. Even if raspberry's own libssl.so is used it's still super slow (sha1)
- [ ] .rqbit-session.json file has 0 bytes when disk full. I guess fs::rename does this when disk is full? at least on linux

View file

@ -256,6 +256,11 @@ impl Session {
});
if opts.persistence {
if let Some(parent) = session.persistence_filename.parent() {
std::fs::create_dir_all(parent).with_context(|| {
format!("couldn't create directory {:?} for session storage", parent)
})?;
}
let session = session.clone();
spawn(
"session persistene",
@ -291,11 +296,16 @@ impl Session {
}
async fn populate_from_stored(self: &Arc<Self>) -> anyhow::Result<()> {
let mut rdr = BufReader::new(
std::fs::File::open(&self.persistence_filename).with_context(|| {
format!("error opening session file {:?}", self.persistence_filename)
})?,
);
let mut rdr = match std::fs::File::open(&self.persistence_filename) {
Ok(f) => BufReader::new(f),
Err(e) if e.kind() == std::io::ErrorKind::NotFound => return Ok(()),
Err(e) => {
return Err(e).context(format!(
"error opening session file {:?}",
self.persistence_filename
))
}
};
let db: SerializedSessionDatabase =
serde_json::from_reader(&mut rdr).context("error deserializing session database")?;
let mut futures = Vec::new();
@ -342,7 +352,6 @@ impl Session {
let mut tmp = BufWriter::new(
std::fs::OpenOptions::new()
.create(true)
.create_new(true)
.truncate(true)
.write(true)
.open(&tmp_filename)