image-cache: migrate storage

This commit is contained in:
kieran
2025-01-09 20:40:35 +00:00
parent 06417ff69e
commit eaa9b3ae4c
2 changed files with 39 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ use hex::ToHex;
use sha2::Digest;
use std::path;
use std::path::PathBuf;
use tracing::warn;
pub type ImageCacheValue = Promise<Result<TextureHandle>>;
pub type ImageCacheMap = HashMap<String, ImageCacheValue>;
@@ -78,6 +79,41 @@ impl ImageCache {
.to_string()
}
/// Migrate from base32 encoded url to sha256 url + sub-dir structure
pub fn migrate_v0(&self) -> Result<()> {
for file in std::fs::read_dir(&self.cache_dir)? {
if let Ok(file) = file {
if !file.path().is_file() {
continue;
}
let old_filename = file.file_name().to_string_lossy().to_string();
let old_url = if let Some(u) =
base32::decode(base32::Alphabet::Crockford, &old_filename)
.and_then(|s| String::from_utf8(s).ok())
{
u
} else {
warn!("Invalid base32 filename: {}", &old_filename);
continue;
};
let new_path = self.cache_dir.join(Self::key(&old_url));
if let Some(p) = new_path.parent() {
create_dir_all(p)?;
}
if let Err(e) = std::fs::rename(file.path(), &new_path) {
warn!(
"Failed to migrate file from {} to {}: {:?}",
file.path().display(),
new_path.display(),
e
);
}
}
}
Ok(())
}
pub fn map(&self) -> &ImageCacheMap {
&self.url_imgs
}

View File

@@ -207,6 +207,9 @@ impl Notedeck {
let tabs = Tabs::new(None);
let app_rect_handler = AppSizeHandler::new(&path);
// migrate
img_cache.migrate_v0().expect("img-cache migration");
Self {
ndb,
img_cache,