Browse Source

add group chat block someone

pull/18/head
Sun 4 years ago
parent
commit
ebdb3f3001
  1. 22
      lib/apps/group_chat/detail.dart
  2. 11
      lib/apps/group_chat/provider.dart
  3. 5
      src/apps/group_chat/models.rs
  4. 12
      src/apps/group_chat/rpc.rs

22
lib/apps/group_chat/detail.dart

@ -597,7 +597,10 @@ class _MemberDrawerWidget extends StatelessWidget { @@ -597,7 +597,10 @@ class _MemberDrawerWidget extends StatelessWidget {
child: ListTile(
leading: member.showAvatar(colorSurface: false),
title: Text(member.name, textAlign: TextAlign.left, style: TextStyle(fontSize: 16.0)),
trailing: Text(isOwner ? 'Owner' : (member.isManager ? 'Manager' : ''),
trailing: Text(member.isBlock
? 'Blocked' : (isOwner
? 'Owner' : (member.isManager
? 'Manager' : '')),
style: TextStyle(color: color)),
onTap: () {
Navigator.pop(context);
@ -753,6 +756,23 @@ class _MemberDetailState extends State<MemberDetail> { @@ -753,6 +756,23 @@ class _MemberDetailState extends State<MemberDetail> {
style: TextStyle(fontSize: 14.0, color: Colors.red))),
)
),
InkWell(
onTap: () {
Navigator.pop(context);
context.read<GroupChatProvider>().memberUpdate(
widget.member.id, !widget.member.isBlock);
},
hoverColor: Colors.transparent,
child: Container(
width: 300.0,
padding: const EdgeInsets.symmetric(vertical: 10.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.red),
borderRadius: BorderRadius.circular(10.0)),
child: Center(child: Text(widget.member.isBlock ? 'Blocked' : 'Block',
style: TextStyle(fontSize: 14.0, color: Colors.red))),
)
),
]
);
}

11
lib/apps/group_chat/provider.dart

@ -37,7 +37,11 @@ class GroupChatProvider extends ChangeNotifier { @@ -37,7 +37,11 @@ class GroupChatProvider extends ChangeNotifier {
List<int> allKeys = [];
List<int> managers = [];
List<int> commons = [];
List<int> blocks = [];
this.activedMembers.forEach((i, m) {
if (m.isBlock) {
blocks.add(i);
} else {
if (m.isManager) {
if (m.mid == this.activedGroup.owner) {
allKeys.add(i);
@ -47,8 +51,9 @@ class GroupChatProvider extends ChangeNotifier { @@ -47,8 +51,9 @@ class GroupChatProvider extends ChangeNotifier {
} else {
commons.add(i);
}
}
});
return allKeys + managers + commons;
return allKeys + managers + commons + blocks;
}
GroupChatProvider() {
@ -145,6 +150,10 @@ class GroupChatProvider extends ChangeNotifier { @@ -145,6 +150,10 @@ class GroupChatProvider extends ChangeNotifier {
// rpc.send('group-chat-readd', [id]);
}
memberUpdate(int id, bool isBlock) {
rpc.send('group-chat-member-update', [id, isBlock]);
}
_list(List params) {
this.clear();
params.forEach((params) {

5
src/apps/group_chat/models.rs

@ -674,6 +674,11 @@ impl Member { @@ -674,6 +674,11 @@ impl Member {
);
db.update(&sql)
}
pub fn block(db: &DStorage, id: &i64, block: bool) -> Result<usize> {
let sql = format!("UPDATE members SET is_block={} WHERE id = {}", block, id,);
db.update(&sql)
}
}
/// Group Chat Message Model.

12
src/apps/group_chat/rpc.rs

@ -279,6 +279,18 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) { @@ -279,6 +279,18 @@ pub(crate) fn new_rpc_handler(handler: &mut RpcHandler<RpcState>) {
},
);
handler.add_method(
"group-chat-member-update",
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move {
let id = params[0].as_i64()?;
let is_block = params[1].as_bool()?;
let db = group_chat_db(state.layer.read().await.base(), &gid)?;
Member::block(&db, &id, is_block)?;
Ok(HandleResult::new())
},
);
handler.add_method(
"group-chat-message-create",
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move {

Loading…
Cancel
Save