@@ -2,7 +2,6 @@ use adw::prelude::*;
22use adw:: subclass:: prelude:: AdwWindowImpl ;
33use gettextrs:: gettext;
44use glib:: clone;
5- use glib:: closure;
65use gtk:: glib;
76use gtk:: subclass:: prelude:: * ;
87use gtk:: CompositeTemplate ;
@@ -14,10 +13,9 @@ use tdlib::types::BasicGroupFullInfo;
1413use tdlib:: types:: SupergroupFullInfo ;
1514
1615use crate :: expressions;
17- use crate :: i18n :: ngettext_f ;
18- use crate :: strings;
16+ use crate :: strings :: ChatSubtitleString ;
17+ use crate :: strings:: UserStatusString ;
1918use crate :: tdlib:: BasicGroup ;
20- use crate :: tdlib:: BoxedUserStatus ;
2119use crate :: tdlib:: Chat ;
2220use crate :: tdlib:: ChatType ;
2321use crate :: tdlib:: Supergroup ;
@@ -117,9 +115,13 @@ impl ChatInfoWindow {
117115 Some ( self ) ,
118116 ) ;
119117
120- match self . chat ( ) . unwrap ( ) . type_ ( ) {
118+ let chat = self . chat ( ) . unwrap ( ) ;
119+ match chat. type_ ( ) {
121120 ChatType :: Private ( user) => {
122- self . setup_user_info ( user) ;
121+ // TODO: Add handle own chat;
122+ if !chat. is_own_chat ( ) {
123+ self . setup_user_info ( user) ;
124+ }
123125 }
124126 ChatType :: BasicGroup ( basic_group) => {
125127 self . setup_basic_group_info ( basic_group) ;
@@ -140,12 +142,9 @@ impl ChatInfoWindow {
140142 if let UserType :: Bot ( _) = user. type_ ( ) . 0 {
141143 imp. subtitle_label . set_text ( Some ( & gettext ( "bot" ) ) ) ;
142144 } else {
143- User :: this_expression ( "status" )
144- . chain_closure :: < String > ( closure ! (
145- |_: Option <glib:: Object >, status: BoxedUserStatus | {
146- strings:: user_status( & status. 0 )
147- }
148- ) )
145+ let status_string = gtk:: ConstantExpression :: new ( UserStatusString :: new ( user. clone ( ) ) ) ;
146+ status_string
147+ . chain_property :: < UserStatusString > ( "string" )
149148 . bind ( & * imp. subtitle_label , "text" , Some ( user) ) ;
150149 }
151150
@@ -166,24 +165,23 @@ impl ChatInfoWindow {
166165 self . update_info_list_visibility ( ) ;
167166 }
168167
168+ fn setup_group_member_count ( & self ) {
169+ let imp = self . imp ( ) ;
170+ let chat = self . chat ( ) . unwrap ( ) ;
171+ let subtitle_string =
172+ gtk:: ConstantExpression :: new ( ChatSubtitleString :: new ( chat. clone ( ) , false ) ) ;
173+ subtitle_string
174+ . chain_property :: < ChatSubtitleString > ( "subtitle" )
175+ . bind ( & * imp. subtitle_label , "text" , Some ( chat) ) ;
176+ self . update_info_list_visibility ( ) ;
177+ }
178+
169179 fn setup_basic_group_info ( & self , basic_group : & BasicGroup ) {
170180 let client_id = self . chat ( ) . unwrap ( ) . session ( ) . client_id ( ) ;
171181 let basic_group_id = basic_group. id ( ) ;
172- let imp = self . imp ( ) ;
173182
174- // Members number
175- BasicGroup :: this_expression ( "member-count" )
176- . chain_closure :: < String > ( closure ! ( |_: Option <glib:: Object >, member_count: i32 | {
177- ngettext_f(
178- "{num} member" ,
179- "{num} members" ,
180- member_count as u32 ,
181- & [ ( "num" , & member_count. to_string( ) ) ] ,
182- )
183- } ) )
184- . bind ( & * imp. subtitle_label , "text" , Some ( basic_group) ) ;
185-
186- self . update_info_list_visibility ( ) ;
183+ // Member count
184+ self . setup_group_member_count ( ) ;
187185
188186 // Full info
189187 spawn ( clone ! ( @weak self as obj => async move {
@@ -217,17 +215,8 @@ impl ChatInfoWindow {
217215 let supergroup_id = supergroup. id ( ) ;
218216 let imp = self . imp ( ) ;
219217
220- // Members number
221- Supergroup :: this_expression ( "member-count" )
222- . chain_closure :: < String > ( closure ! ( |_: Option <glib:: Object >, member_count: i32 | {
223- ngettext_f(
224- "{num} member" ,
225- "{num} members" ,
226- member_count as u32 ,
227- & [ ( "num" , & member_count. to_string( ) ) ] ,
228- )
229- } ) )
230- . bind ( & * imp. subtitle_label , "text" , Some ( supergroup) ) ;
218+ // Member count
219+ self . setup_group_member_count ( ) ;
231220
232221 // Link
233222 if !supergroup. username ( ) . is_empty ( ) {
0 commit comments