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. 23
      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 {
child: ListTile( child: ListTile(
leading: member.showAvatar(colorSurface: false), leading: member.showAvatar(colorSurface: false),
title: Text(member.name, textAlign: TextAlign.left, style: TextStyle(fontSize: 16.0)), 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)), style: TextStyle(color: color)),
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
@ -753,6 +756,23 @@ class _MemberDetailState extends State<MemberDetail> {
style: TextStyle(fontSize: 14.0, color: Colors.red))), 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))),
)
),
] ]
); );
} }

23
lib/apps/group_chat/provider.dart

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

5
src/apps/group_chat/models.rs

@ -674,6 +674,11 @@ impl Member {
); );
db.update(&sql) 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. /// 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>) {
}, },
); );
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( handler.add_method(
"group-chat-message-create", "group-chat-message-create",
|gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move { |gid: GroupId, params: Vec<RpcParam>, state: Arc<RpcState>| async move {

Loading…
Cancel
Save