@@ -110,8 +110,38 @@ impl ScreenDataProvider for RecordsScreenDataProvider {
110110 fn provide ( & self ) -> Result < Box < dyn std:: any:: Any > > {
111111 let repositories = self . repository . get_all_repositories ( ) ?;
112112
113+ // Get sessions with default filter (Last 30 days, sorted by date descending)
114+ let sessions = self . repository . get_sessions_filtered (
115+ None , // repository_filter
116+ Some ( 30 ) , // date_filter: Last 30 days
117+ "date" , // sort_by
118+ true , // sort_descending
119+ ) ?;
120+
121+ // Convert to SessionDisplayData with session results and repository info
122+ let mut session_display_data = Vec :: new ( ) ;
123+ let repository_map: std:: collections:: HashMap < i64 , StoredRepository > = repositories
124+ . iter ( )
125+ . map ( |repo| ( repo. id , repo. clone ( ) ) )
126+ . collect ( ) ;
127+
128+ for session in sessions {
129+ let session_result = {
130+ let db = self . repository . db_with_lock ( ) ?;
131+ db. get_session_result ( session. id ) . unwrap_or ( None )
132+ } ;
133+ let repository = session
134+ . repository_id
135+ . and_then ( |id| repository_map. get ( & id) . cloned ( ) ) ;
136+ session_display_data. push ( SessionDisplayData {
137+ session,
138+ repository,
139+ session_result,
140+ } ) ;
141+ }
142+
113143 Ok ( Box :: new ( RecordsScreenData {
114- sessions : Vec :: new ( ) ,
144+ sessions : session_display_data ,
115145 repositories,
116146 } ) )
117147 }
@@ -136,29 +166,19 @@ pub struct RecordsScreen {
136166
137167impl RecordsScreen {
138168 pub fn new ( event_bus : EventBus ) -> Self {
139- let ( sessions, repositories) = SessionRepository :: new ( )
140- . and_then ( |repo| {
141- let repositories = repo. get_all_repositories ( ) ?;
142- Ok ( ( Vec :: new ( ) , repositories) )
143- } )
144- . unwrap_or_default ( ) ;
145-
146169 let mut list_state = ListState :: default ( ) ;
147170 list_state. select ( Some ( 0 ) ) ;
148171
149- let mut screen = Self {
150- sessions,
151- repositories,
172+ Self {
173+ sessions : Vec :: new ( ) ,
174+ repositories : Vec :: new ( ) ,
152175 filter_state : FilterState :: default ( ) ,
153176 list_state,
154177 scroll_state : ScrollbarState :: default ( ) ,
155178 action_result : None ,
156179 selected_session_for_detail : None ,
157180 event_bus,
158- } ;
159-
160- let _ = screen. refresh_sessions ( ) ;
161- screen
181+ }
162182 }
163183
164184 pub fn get_selected_session_for_detail ( & self ) -> & Option < SessionDisplayData > {
@@ -492,8 +512,8 @@ impl Screen for RecordsScreen {
492512
493513 let screen_data = data. downcast :: < RecordsScreenData > ( ) ?;
494514
515+ self . sessions = screen_data. sessions ;
495516 self . repositories = screen_data. repositories ;
496- self . refresh_sessions ( ) ?;
497517
498518 Ok ( ( ) )
499519 }
0 commit comments