diff --git a/src/config.rs b/src/config.rs index 3f4efd2..211d45f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -13,6 +13,7 @@ use crate::queue; use crate::serialization::{Serializer, CBOR, TOML}; pub const CLIENT_ID: &str = "d420a117a32841c2b3474932e49fb54b"; +pub const CACHE_VERSION: u16 = 1; #[derive(Clone, Serialize, Deserialize, Debug, Default)] pub struct ConfigValues { @@ -81,6 +82,7 @@ pub struct UserState { pub repeat: queue::RepeatSetting, pub queuestate: QueueState, pub playlist_orders: HashMap, + pub cache_version: u16, } impl Default for UserState { @@ -91,6 +93,7 @@ impl Default for UserState { repeat: queue::RepeatSetting::None, queuestate: QueueState::default(), playlist_orders: HashMap::new(), + cache_version: 0, } } } @@ -150,6 +153,9 @@ impl Config { } pub fn save_state(&self) { + // update cache version number + self.with_state_mut(|mut state| state.cache_version = CACHE_VERSION); + let path = config_path("userstate.cbor"); debug!("saving user state to {}", path.display()); if let Err(e) = CBOR.write(path, self.state().clone()) { diff --git a/src/library.rs b/src/library.rs index 144dee2..14a9d19 100644 --- a/src/library.rs +++ b/src/library.rs @@ -10,8 +10,8 @@ use rspotify::model::Id; use serde::de::DeserializeOwned; use serde::Serialize; -use crate::config; use crate::config::Config; +use crate::config::{self, CACHE_VERSION}; use crate::events::EventManager; use crate::model::album::Album; use crate::model::artist::Artist; @@ -70,13 +70,22 @@ impl Library { } fn load_cache(&self, cache_path: PathBuf, store: Arc>>) { + let saved_cache_version = self.cfg.state().cache_version; + if saved_cache_version < CACHE_VERSION { + debug!( + "Cache version for {:?} has changed from {} to {}, ignoring cache", + cache_path, saved_cache_version, CACHE_VERSION + ); + return; + } + if let Ok(contents) = std::fs::read_to_string(&cache_path) { debug!("loading cache from {}", cache_path.display()); let parsed: Result, _> = serde_json::from_str(&contents); match parsed { Ok(cache) => { debug!( - "cache from {} loaded ({} lists)", + "cache from {} loaded ({} items)", cache_path.display(), cache.len() );