From eaa9b3ae4cc1131361bb9699db674d11282f2fd9 Mon Sep 17 00:00:00 2001 From: kieran Date: Thu, 9 Jan 2025 20:40:35 +0000 Subject: [PATCH] image-cache: migrate storage --- crates/notedeck/src/imgcache.rs | 36 +++++++++++++++++++++++++++++++ crates/notedeck_chrome/src/app.rs | 3 +++ 2 files changed, 39 insertions(+) diff --git a/crates/notedeck/src/imgcache.rs b/crates/notedeck/src/imgcache.rs index 00f6a1f1..432a9fe3 100644 --- a/crates/notedeck/src/imgcache.rs +++ b/crates/notedeck/src/imgcache.rs @@ -11,6 +11,7 @@ use hex::ToHex; use sha2::Digest; use std::path; use std::path::PathBuf; +use tracing::warn; pub type ImageCacheValue = Promise>; pub type ImageCacheMap = HashMap; @@ -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 } diff --git a/crates/notedeck_chrome/src/app.rs b/crates/notedeck_chrome/src/app.rs index 6cc6435b..6551eb67 100644 --- a/crates/notedeck_chrome/src/app.rs +++ b/crates/notedeck_chrome/src/app.rs @@ -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,