@@ -3,9 +3,10 @@ use gtk::prelude::*;
33use gtk:: subclass:: prelude:: * ;
44use gtk:: { gio, glib} ;
55use std:: cmp:: Ordering ;
6+ use tdlib:: enums:: SearchMessagesFilter ;
67use thiserror:: Error ;
78
8- use super :: { MessageListViewItem , MessageListViewItemType } ;
9+ use super :: { MessageListViewItem , MessageListViewItemType , MessageListViewType } ;
910use crate :: tdlib:: { Chat , Message } ;
1011
1112#[ derive( Error , Debug ) ]
@@ -25,6 +26,7 @@ mod imp {
2526
2627 #[ derive( Debug , Default ) ]
2728 pub ( crate ) struct MessageListViewModel {
29+ pub ( super ) type_ : Cell < MessageListViewType > ,
2830 pub ( super ) chat : WeakRef < Chat > ,
2931 pub ( super ) is_loading : Cell < bool > ,
3032 pub ( super ) list : RefCell < VecDeque < MessageListViewItem > > ,
@@ -82,9 +84,10 @@ glib::wrapper! {
8284}
8385
8486impl MessageListViewModel {
85- pub ( crate ) fn new ( chat : & Chat ) -> Self {
87+ pub ( crate ) fn new ( type_ : MessageListViewType , chat : & Chat ) -> Self {
8688 let obj: MessageListViewModel = glib:: Object :: new ( ) ;
8789
90+ obj. imp ( ) . type_ . set ( type_) ;
8891 obj. imp ( ) . chat . set ( Some ( chat) ) ;
8992
9093 chat. connect_new_message ( clone ! ( @weak obj => move |_, message| {
@@ -121,7 +124,21 @@ impl MessageListViewModel {
121124
122125 imp. is_loading . set ( true ) ;
123126
124- let result = self . chat ( ) . get_chat_history ( oldest_message_id, limit) . await ;
127+ let result = match imp. type_ . get ( ) {
128+ MessageListViewType :: ChatHistory => {
129+ self . chat ( ) . get_chat_history ( oldest_message_id, limit) . await
130+ }
131+ MessageListViewType :: PinnedMessages => {
132+ self . chat ( )
133+ . search_messages (
134+ String :: new ( ) ,
135+ oldest_message_id,
136+ limit,
137+ Some ( SearchMessagesFilter :: Pinned ) ,
138+ )
139+ . await
140+ }
141+ } ;
125142
126143 imp. is_loading . set ( false ) ;
127144
0 commit comments