1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use std::path::Path;
use std::path::PathBuf;
fn init_download_path() -> Option<PathBuf> {
let mut path = gtk::glib::user_data_dir();
path.push("boorus");
path.push("images");
std::fs::create_dir_all(&path).ok()?;
Some(path)
}
pub fn download_read_path(filename: String) -> PathBuf {
let mut path = gtk::glib::user_data_dir();
path.push("boorus");
path.push("images");
path.push(filename);
path
}
pub fn thumb_write_path(filename: &str) -> Option<PathBuf> {
let mut path = gtk::glib::user_data_dir();
path.push("boorus");
path.push("thumbs");
std::fs::create_dir_all(&path).ok()?;
path.push(filename);
path.set_extension("png");
Some(path)
}
pub fn thumb_read_path(filename: &str) -> PathBuf {
let mut path = gtk::glib::user_data_dir();
path.push("boorus");
path.push("thumbs");
path.push(filename);
path.set_extension("png");
path
}
pub fn save_image(filename: &Path, bytes: &bytes::Bytes) -> Option<PathBuf> {
let mut path = init_download_path()?;
path.push(filename.file_name()?);
std::fs::write(&path, bytes).ok()?;
path.file_name().map(PathBuf::from)
}
/// Returns relative path
pub fn save_thumb(filename: &Path, thumb: Option<gtk::gdk::Texture>) -> Option<PathBuf> {
if let Some(thumb) = thumb {
use adw::prelude::TextureExt;
let bytes = thumb.save_to_png_bytes();
let thumb_path = filename
.file_name()
.and_then(|o| o.to_str())
.and_then(crate::download::thumb_write_path);
if let Some(thumb_path) = thumb_path.as_ref() {
std::fs::write(thumb_path, bytes).ok()?;
}
thumb_path?.file_name().map(PathBuf::from)
} else {
None
}
}