image-cache: use sha256 hash of url for key
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -2505,6 +2505,7 @@ dependencies = [
|
||||
"security-framework",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2",
|
||||
"strum",
|
||||
"strum_macros",
|
||||
"tempfile",
|
||||
|
||||
@@ -52,6 +52,7 @@ url = "2.5.2"
|
||||
urlencoding = "2.1.3"
|
||||
uuid = { version = "1.10.0", features = ["v4"] }
|
||||
security-framework = "2.11.0"
|
||||
sha2 = "0.10.8"
|
||||
|
||||
[profile.small]
|
||||
inherits = 'release'
|
||||
|
||||
@@ -22,6 +22,7 @@ serde = { workspace = true }
|
||||
hex = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
puffin = { workspace = true, optional = true }
|
||||
sha2 = { workspace = true }
|
||||
|
||||
[dev-dependencies]
|
||||
tempfile = { workspace = true }
|
||||
|
||||
@@ -5,9 +5,12 @@ use poll_promise::Promise;
|
||||
use egui::ColorImage;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::fs::{create_dir_all, File};
|
||||
|
||||
use hex::ToHex;
|
||||
use sha2::Digest;
|
||||
use std::path;
|
||||
use std::path::PathBuf;
|
||||
|
||||
pub type ImageCacheValue = Promise<Result<TextureHandle>>;
|
||||
pub type ImageCacheMap = HashMap<String, ImageCacheValue>;
|
||||
@@ -46,6 +49,9 @@ impl ImageCache {
|
||||
|
||||
pub fn write(cache_dir: &path::Path, url: &str, data: ColorImage) -> Result<()> {
|
||||
let file_path = cache_dir.join(Self::key(url));
|
||||
if let Some(p) = file_path.parent() {
|
||||
create_dir_all(p)?;
|
||||
}
|
||||
let file = File::options()
|
||||
.write(true)
|
||||
.create(true)
|
||||
@@ -64,7 +70,12 @@ impl ImageCache {
|
||||
}
|
||||
|
||||
pub fn key(url: &str) -> String {
|
||||
base32::encode(base32::Alphabet::Crockford, url.as_bytes())
|
||||
let k: String = sha2::Sha256::digest(url.as_bytes()).encode_hex();
|
||||
PathBuf::from(&k[0..2])
|
||||
.join(&k[2..4])
|
||||
.join(k)
|
||||
.to_string_lossy()
|
||||
.to_string()
|
||||
}
|
||||
|
||||
pub fn map(&self) -> &ImageCacheMap {
|
||||
|
||||
Reference in New Issue
Block a user