Create folders for session persistence
This commit is contained in:
parent
f33346adfb
commit
1110eb8620
2 changed files with 17 additions and 7 deletions
3
TODO.md
3
TODO.md
|
|
@ -30,5 +30,6 @@ 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
|
- [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
|
- [ ] .rqbit-session.json file has 0 bytes when disk full. I guess fs::rename does this when disk is full? at least on linux
|
||||||
|
|
@ -256,6 +256,11 @@ impl Session {
|
||||||
});
|
});
|
||||||
|
|
||||||
if opts.persistence {
|
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();
|
let session = session.clone();
|
||||||
spawn(
|
spawn(
|
||||||
"session persistene",
|
"session persistene",
|
||||||
|
|
@ -291,11 +296,16 @@ impl Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn populate_from_stored(self: &Arc<Self>) -> anyhow::Result<()> {
|
async fn populate_from_stored(self: &Arc<Self>) -> anyhow::Result<()> {
|
||||||
let mut rdr = BufReader::new(
|
let mut rdr = match std::fs::File::open(&self.persistence_filename) {
|
||||||
std::fs::File::open(&self.persistence_filename).with_context(|| {
|
Ok(f) => BufReader::new(f),
|
||||||
format!("error opening session file {:?}", self.persistence_filename)
|
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 =
|
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();
|
let mut futures = Vec::new();
|
||||||
|
|
@ -342,7 +352,6 @@ impl Session {
|
||||||
let mut tmp = BufWriter::new(
|
let mut tmp = BufWriter::new(
|
||||||
std::fs::OpenOptions::new()
|
std::fs::OpenOptions::new()
|
||||||
.create(true)
|
.create(true)
|
||||||
.create_new(true)
|
|
||||||
.truncate(true)
|
.truncate(true)
|
||||||
.write(true)
|
.write(true)
|
||||||
.open(&tmp_filename)
|
.open(&tmp_filename)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue