@@ -21,10 +21,12 @@ mod imp {
2121    use  super :: * ; 
2222    use  adw:: subclass:: prelude:: AdwWindowImpl ; 
2323    use  once_cell:: sync:: { Lazy ,  OnceCell } ; 
24+     use  std:: cell:: Cell ; 
2425
2526    #[ derive( Debug ,  Default ,  CompositeTemplate ) ]  
2627    #[ template( resource = "/com/github/melix99/telegrand/ui/content-chat-info-window.ui" ) ]  
2728    pub ( crate )  struct  ChatInfoWindow  { 
29+         pub ( super )  loading :  Cell < bool > , 
2830        pub ( super )  chat :  OnceCell < Chat > , 
2931        #[ template_child]  
3032        pub ( super )  toast_overlay :  TemplateChild < adw:: ToastOverlay > , 
@@ -288,26 +290,62 @@ impl ChatInfoWindow {
288290
289291        if  supergroup_full_info. can_get_members  { 
290292            imp. members_page . set_visible ( true ) ; 
291-             spawn ( clone ! ( @weak self  as  obj => async  move { 
292-                 let  limit = 200 ; 
293-                 let  mut  offset = 0 ; 
294-                 while  let  Ok ( TdChatMembers ( ChatMembers  { members,  total_count} ) )  = functions:: get_supergroup_members( 
293+ 
294+             let  limit = 100 ; 
295+ 
296+             spawn ( clone ! ( @to-owned imp => async  move { 
297+                 imp. loading. set( true ) ; 
298+                 let  result = functions:: get_supergroup_members( 
295299                    supergroup_id, 
296300                    None , 
297-                     offset , 
301+                     0 , 
298302                    limit, 
299303                    client_id, 
300-                 ) . await 
301-                 { 
302-                     if  offset > total_count { 
303-                         break ; 
304-                     } 
305- 
306-                     obj. append_members( members) . await ; 
307- 
308-                     offset += limit; 
304+                     ) . await ; 
305+                 if  let  Ok ( TdChatMembers ( ChatMembers  { members,  ..} ) )  = result { 
306+                     imp. obj( ) . append_members( members) . await ; 
309307                } 
308+                 imp. loading. set( false ) ; 
310309            } ) ) ; 
310+ 
311+             imp. members_list 
312+                 . vadjustment ( ) 
313+                 . unwrap ( ) 
314+                 . connect_value_changed ( clone ! ( @to-owned imp => move |vadjustment| { 
315+                     if  !imp. loading. get( )  { 
316+ 
317+                         let  value = vadjustment. value( )  + vadjustment. page_size( ) ; 
318+                         let  upper = vadjustment. upper( ) ; 
319+ 
320+                         let  offset = imp. members_list. model( ) . unwrap( ) . n_items( )  as  i32 ; 
321+ 
322+                         if  value / upper > 0.8  && upper - value < 2000.0  { 
323+ 
324+                             imp. loading. set( true ) ; 
325+ 
326+                             spawn( clone!( @to-owned imp => async  move { 
327+                                 let  result = functions:: get_supergroup_members( 
328+                                     supergroup_id, 
329+                                     None , 
330+                                     offset, 
331+                                     limit, 
332+                                     client_id, 
333+                                     ) . await ; 
334+                                 if  let  Ok ( TdChatMembers ( ChatMembers  { members,  total_count} ) )  = result { 
335+                                     if  offset >= total_count { 
336+                                         // remove callback 
337+                                     } 
338+ 
339+                                     imp. obj( ) . append_members( members) . await ; 
340+ 
341+                                     imp. loading. set( false ) ; 
342+                                 }  else { 
343+                                     log:: error!( "can't load members {result:?}" ) ; 
344+                                 } 
345+                             } ) ) 
346+                         } 
347+                     } 
348+                 } ) ) ; 
311349        } 
312350
313351        self . update_info_list_visibility ( ) ; 
0 commit comments