Skip to content

Commit 9ab090a

Browse files
committed
refactor(chat-info-window): Simplify subtitle binding
1 parent 8eb4903 commit 9ab090a

File tree

2 files changed

+27
-39
lines changed

2 files changed

+27
-39
lines changed

src/session/content/chat_info_window.rs

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use adw::prelude::*;
22
use adw::subclass::prelude::AdwWindowImpl;
33
use gettextrs::gettext;
44
use glib::clone;
5-
use glib::closure;
65
use gtk::glib;
76
use gtk::subclass::prelude::*;
87
use gtk::CompositeTemplate;
@@ -14,10 +13,9 @@ use tdlib::types::BasicGroupFullInfo;
1413
use tdlib::types::SupergroupFullInfo;
1514

1615
use crate::expressions;
17-
use crate::i18n::ngettext_f;
18-
use crate::strings;
16+
use crate::strings::ChatSubtitleString;
17+
use crate::strings::UserStatusString;
1918
use crate::tdlib::BasicGroup;
20-
use crate::tdlib::BoxedUserStatus;
2119
use crate::tdlib::Chat;
2220
use crate::tdlib::ChatType;
2321
use 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() {

src/strings/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ mod chat_subtitle_string;
22
mod user_status_string;
33

44
pub(crate) use chat_subtitle_string::ChatSubtitleString;
5-
pub(crate) use user_status_string::UserStatusString;
6-
75
use ellipse::Ellipse;
86
use gettextrs::gettext;
97
use gtk::glib;
@@ -12,6 +10,7 @@ use tdlib::enums::UserStatus;
1210
use tdlib::enums::UserType;
1311
use tdlib::types::MessageGame;
1412
use tdlib::types::MessageGameScore;
13+
pub(crate) use user_status_string::UserStatusString;
1514

1615
use crate::i18n::gettext_f;
1716
use crate::i18n::ngettext_f;

0 commit comments

Comments
 (0)