MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / sync_sessions_to_storage

Method sync_sessions_to_storage

crates/opencode-server/src/server.rs:197–238  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

195 }
196
197 pub async fn sync_sessions_to_storage(&self) -> anyhow::Result<()> {
198 let (Some(session_repo), Some(message_repo)) = (&self.session_repo, &self.message_repo)
199 else {
200 return Ok(());
201 };
202
203 let snapshot: Vec<opencode_session::Session> = {
204 let manager = self.sessions.lock().await;
205 manager.list().into_iter().cloned().collect()
206 };
207
208 let snapshot_ids: HashSet<String> = snapshot.iter().map(|s| s.id.clone()).collect();
209 let persisted = session_repo.list(None, 100_000).await?;
210
211 for stale in persisted {
212 if !snapshot_ids.contains(&stale.id) {
213 message_repo.delete_for_session(&stale.id).await?;
214 session_repo.delete(&stale.id).await?;
215 }
216 }
217
218 for session in snapshot {
219 let mut stored_session: opencode_types::Session =
220 serde_json::from_value(serde_json::to_value(&session)?)?;
221 let stored_messages: Vec<opencode_types::SessionMessage> =
222 stored_session.messages.clone();
223 stored_session.messages.clear();
224
225 if session_repo.get(&stored_session.id).await?.is_some() {
226 session_repo.update(&stored_session).await?;
227 } else {
228 session_repo.create(&stored_session).await?;
229 }
230
231 message_repo.delete_for_session(&stored_session.id).await?;
232 for message in stored_messages {
233 message_repo.create(&message).await?;
234 }
235 }
236
237 Ok(())
238 }
239}
240
241/// Convert opencode_config::ProviderConfig map to bootstrap ConfigProvider map.

Calls 9

containsMethod · 0.80
delete_for_sessionMethod · 0.80
listMethod · 0.45
cloneMethod · 0.45
deleteMethod · 0.45
clearMethod · 0.45
getMethod · 0.45
updateMethod · 0.45
createMethod · 0.45

Tested by

no test coverage detected