Load state from disk
(&mut self)
| 148 | |
| 149 | /// Load state from disk |
| 150 | async fn load(&mut self) -> Result<(), MapperError> { |
| 151 | // Load sessions database |
| 152 | let sessions_db_path = self.maps_dir.join("sessions.json"); |
| 153 | if sessions_db_path.exists() { |
| 154 | let json = tokio::fs::read_to_string(&sessions_db_path).await?; |
| 155 | let sessions: Vec<Session> = serde_json::from_str(&json)?; |
| 156 | for session in sessions { |
| 157 | self.sessions.insert(session.id, session); |
| 158 | } |
| 159 | info!("Loaded {} sessions from database", self.sessions.len()); |
| 160 | } |
| 161 | |
| 162 | // Load skipped sessions |
| 163 | let skipped_path = self.maps_dir.join("skipped_sessions.json"); |
| 164 | if skipped_path.exists() { |
| 165 | let json = tokio::fs::read_to_string(&skipped_path).await?; |
| 166 | let paths: Vec<PathBuf> = serde_json::from_str(&json)?; |
| 167 | self.skipped_sessions = paths.into_iter().collect(); |
| 168 | info!("Loaded {} skipped sessions", self.skipped_sessions.len()); |
| 169 | } |
| 170 | |
| 171 | // Load map manifests |
| 172 | let index_path = self.maps_dir.join("index.json"); |
| 173 | if index_path.exists() { |
| 174 | let json = tokio::fs::read_to_string(&index_path).await?; |
| 175 | let index: MapIndex = serde_json::from_str(&json)?; |
| 176 | |
| 177 | for entry in index.maps { |
| 178 | let manifest_path = self.maps_dir.join(&entry.name).join("manifest.json"); |
| 179 | if manifest_path.exists() { |
| 180 | let json = tokio::fs::read_to_string(&manifest_path).await?; |
| 181 | let manifest: MapManifest = serde_json::from_str(&json)?; |
| 182 | self.maps.insert(manifest.id, manifest); |
| 183 | } |
| 184 | } |
| 185 | info!("Loaded {} maps from index", self.maps.len()); |
| 186 | } |
| 187 | |
| 188 | Ok(()) |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | type SharedState = Arc<RwLock<MapperState>>; |