From b9c381c1284f730cf9e87ccfff835afad74870da Mon Sep 17 00:00:00 2001 From: samzong Date: Wed, 8 Jul 2026 13:17:03 -0400 Subject: [PATCH] refactor(adapters): extract shared session_state_is_current helper Signed-off-by: samzong --- src/adapters/cursor.rs | 27 ++++----------------------- src/adapters/opencode.rs | 11 ++++------- src/adapters/sync_state.rs | 13 +++++++++++++ 3 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/adapters/cursor.rs b/src/adapters/cursor.rs index 7b41b43..d7e1b6e 100644 --- a/src/adapters/cursor.rs +++ b/src/adapters/cursor.rs @@ -17,7 +17,7 @@ use crate::adapters::{ RawMessage, RawSession, ResumeCommand, SourceAdapter, SyncScanResult, SyncScanStats, first_timestamp, last_timestamp, }; -use crate::db::store::{EventSessionStateMeta, Store, UsageSessionStateMeta}; +use crate::db::store::Store; use crate::types::{RawSessionEvent, RawUsageEvent, Role}; pub(crate) struct CursorAdapter; @@ -105,7 +105,9 @@ impl SourceAdapter for CursorAdapter { let source_updated_at = updated_at.or(global_mtime); if let Some((old_updated_at, _)) = existing.get(&composer_id) && *old_updated_at == source_updated_at - && session_state_is_current( + && crate::adapters::sync_state::session_state_is_current( + USAGE_PARSER_VERSION, + EVENT_PARSER_VERSION, usage_state.get(&composer_id).copied(), event_state.get(&composer_id).copied(), source_updated_at, @@ -1035,27 +1037,6 @@ fn global_db_mtime() -> Option { resolve_global_state_db_path().and_then(|path| stat_mtime_ms(&path)) } -fn session_state_is_current( - usage_state: Option, - event_state: Option, - source_updated_at: Option, - include_events: bool, -) -> bool { - if !crate::adapters::sync_state::usage_state_is_current( - USAGE_PARSER_VERSION, - usage_state, - source_updated_at, - ) { - return false; - } - !include_events - || crate::adapters::sync_state::event_state_is_current( - EVENT_PARSER_VERSION, - event_state, - source_updated_at, - ) -} - fn build_agent_cwd_map(db_path: Option<&Path>) -> HashMap { let Some(db_path) = db_path else { return HashMap::new(); diff --git a/src/adapters/opencode.rs b/src/adapters/opencode.rs index ff9ccf7..7c6841a 100644 --- a/src/adapters/opencode.rs +++ b/src/adapters/opencode.rs @@ -647,17 +647,14 @@ fn scan_for_sync_conn( let current_message_count = current_counts.get(&session.id).copied().unwrap_or(0); if session.time_updated == old_updated_at && current_message_count == old_message_count - && crate::adapters::sync_state::usage_state_is_current( + && crate::adapters::sync_state::session_state_is_current( USAGE_PARSER_VERSION, + EVENT_PARSER_VERSION, usage_state.get(&session.id).copied(), + event_state.get(&session.id).copied(), session.time_updated, + include_events, ) - && (!include_events - || crate::adapters::sync_state::event_state_is_current( - EVENT_PARSER_VERSION, - event_state.get(&session.id).copied(), - session.time_updated, - )) { stats.skipped_sessions += 1; continue; diff --git a/src/adapters/sync_state.rs b/src/adapters/sync_state.rs index 5b549be..f248af1 100644 --- a/src/adapters/sync_state.rs +++ b/src/adapters/sync_state.rs @@ -22,6 +22,19 @@ pub(crate) fn event_state_is_current( }) } +pub(crate) fn session_state_is_current( + usage_parser_version: u32, + event_parser_version: u32, + usage_state: Option, + event_state: Option, + source_updated_at: Option, + include_events: bool, +) -> bool { + usage_state_is_current(usage_parser_version, usage_state, source_updated_at) + && (!include_events + || event_state_is_current(event_parser_version, event_state, source_updated_at)) +} + pub(crate) fn usage_state_is_current_for_mtime( required_parser_version: Option, state: Option,